Kotlin 基础语法解析

详细的 Kotlin 基础语法解析,结合概念说明和实用场景:


一、变量与常量

1. 变量类型
  • val (不可变变量):声明后不可重新赋值,类似 Java 的 final。

    kotlin 复制代码
    val name = "Kotlin" // 类型自动推断为 String
    
    // name = "Java" // 编译错误:Val cannot be reassigned
  • var(可变变量):可修改值,但类型不可变。

    kotlin 复制代码
    var age = 25
    
    age = 26 // 允许
    
    // age = "26" // 编译错误:类型不匹配
2. 显式类型声明

当无法自动推断类型时,需显式声明:

kotlin 复制代码
var score: Int // 先声明后初始化

score = 100



var message: String? // 可空类型

message = null

二、函数定义

1. 基本函数结构
kotlin 复制代码
// 完整写法

fun add(a: Int, b: Int): Int {

    return a + b

}



// 单表达式简写(省略大括号和 return)

fun multiply(a: Int, b: Int) = a * b
2. 默认参数与命名参数
kotlin 复制代码
fun connect(url: String, timeout: Int = 5000, retry: Boolean = true) { ... }



// 调用

connect("https://example.com") // 使用默认 timeout=5000, retry=true

connect("https://example.com", retry = false) // 命名参数(跳过 timeout)
3. 无返回值
  • Unit 表示无返回值(类似 Java 的 void),可省略:

    kotlin 复制代码
    fun log(message: String): Unit { ... }
    
    fun log(message: String) { ... } // 等价写法

三、条件控制

1. if 作为表达式

Kotlin 的 if 可以返回值:

kotlin 复制代码
val max = if (a > b) a else b
2. when 表达式

比 Java 的 switch 更强大:

kotlin 复制代码
when (x) {

    0 -> "Zero"

    1, 2 -> "One or Two"

    in 3..10 -> "Between 3 and 10"

    is String -> "It's a String"

    else -> "Unknown"

}
3. 类型检查与智能转换
kotlin 复制代码
fun printLength(obj: Any) {

    if (obj is String) {

        println(obj.length) // 自动转换为 String 类型

    }

}

四、循环

1. 范围表达式
  • 1..5:包含 5(闭区间)

  • 1 until 5:1 到 4(半开区间)

  • 5 downTo 1:递减

  • step 2:步长

2. 遍历集合
kotlin 复制代码
val list = listOf("a", "b", "c")



// 遍历元素

for (item in list) { ... }



// 遍历索引

for (index in list.indices) { ... }



// 同时获取索引和值

for ((index, value) in list.withIndex()) { ... }

五、类与对象

1. 主构造函数

直接在类名后声明:

kotlin 复制代码
class Person(val name: String, var age: Int) {

    // 类体

}
  • val 生成只读属性,var 生成可变属性。
2. 次构造函数

使用 constructor 关键字:

kotlin 复制代码
class Person(val name: String) {

    var age: Int = 0



    constructor(name: String, age: Int) : this(name) {

        this.age = age

    }

}
3. 数据类(data class)

自动生成 equals()、hashCode()、toString() 和 copy():

kotlin 复制代码
data class User(val id: Int, val email: String)



// 使用

val user = User(1, "user@example.com")

val copyUser = user.copy(email = "new@example.com") // 修改部分属性
4. 伴生对象(companion object)

替代 Java 的静态方法:

kotlin 复制代码
class MyClass {

    companion object {

        fun create() = MyClass()

    }

}



// 调用

val instance = MyClass.create()

六、空安全机制

1. 可空类型

通过 ? 声明可空:

kotlin 复制代码
var str: String? = null

// str.length // 编译错误:需处理可空性
2. 安全调用操作符 ?.

避免空指针:

kotlin 复制代码
val length = str?.length // 返回 Int?(可能为 null)
3. Elvis 操作符 ?:

提供默认值:

kotlin 复制代码
val len = str?.length ?: 0 // 若 str 为 null,返回 0
4. 非空断言 !!

强制解除可空(慎用):

kotlin 复制代码
val forcedLen = str!!.length // 若 str 为 null,抛出 NPE

七、集合操作

1. 集合类型
  • 不可变集合 :listOf(), setOf(), mapOf()

  • 可变集合 :mutableListOf(), mutableSetOf(), mutableMapOf()

2. 常用操作符
kotlin 复制代码
val numbers = listOf(1, 2, 3, 4, 5)



// 过滤

val evens = numbers.filter { it % 2 == 0 }



// 转换

val squares = numbers.map { it * it }



// 分组

val groups = numbers.groupBy { if (it % 2 == 0) "even" else "odd" }



// 聚合

val sum = numbers.reduce { acc, num -> acc + num }

八、扩展函数

1. 为现有类添加方法
kotlin 复制代码
fun String.addExclamation() = "$this!"



// 使用

println("Hello".addExclamation()) // 输出:Hello!
2. 扩展属性
kotlin 复制代码
val String.lastChar: Char

    get() = this[length - 1]



// 使用

println("Kotlin".lastChar) // 输出:n

九、Lambda 表达式

1. 基本语法
kotlin 复制代码
val sum: (Int, Int) -> Int = { a, b -> a + b }

println(sum(2, 3)) // 输出:5
2. 高阶函数

将函数作为参数传递:

kotlin 复制代码
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {

    return operation(a
相关推荐
小羊没烦恼!3 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
千里马学框架3 天前
一起学 Android 14:ShellTransition 屏幕旋转过程深度剖析
android·智能手机·性能优化·framework·性能·屏幕旋转·rotation
美狐美颜SDK开放平台3 天前
开发直播APP时如何接入视频美颜SDK?开发流程与注意事项
android·人工智能·计算机视觉·音视频·直播美颜sdk
AFinalStone3 天前
Android7 SystemUI源码解析(七)Keyguard锁屏模块深度解析
android·systemui
伞伞悦读3 天前
【第38期】Python 模块与包详解:import、from、模块搜索路径、包结构和 __init__
开发语言·python
致远ccc3 天前
Google Play 上架前如何测试 App?多国家 Android 环境测试
android·app测试·googleplay·多国家应用测试
C语言小火车3 天前
C/C++ 为什么需要编译器?
开发语言·c++
霍霍的袁3 天前
【C++】map 和 set 的使用 | 从用法到底层
开发语言·c++·学习·visual studio
ttyyttemo3 天前
Kotlin 协程中的 Job 结构化并发与取消
android
孙启超3 天前
【AI开发之Rust】第 11 课:智能指针与内部可变性
开发语言·后端·rust