详细的 Kotlin 基础语法解析,结合概念说明和实用场景:
一、变量与常量
1. 变量类型
val
(不可变变量):声明后不可重新赋值,类似 Java 的final
。
val name = “Kotlin” // 类型自动推断为 String
// name = “Java” // 编译错误:Val cannot be reassigned
var
(可变变量):可修改值,但类型不可变。
var age = 25
age = 26 // 允许
// age = “26” // 编译错误:类型不匹配
2. 显式类型声明
当无法自动推断类型时,需显式声明:
var score: Int // 先声明后初始化
score = 100
var message: String? // 可空类型
message = null
二、函数定义
1. 基本函数结构
// 完整写法
fun add(a: Int, b: Int): Int {
return a + b
}
// 单表达式简写(省略大括号和 return)
fun multiply(a: Int, b: Int) = a * b
2. 默认参数与命名参数
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
),可省略:
fun log(message: String): Unit { … }
fun log(message: String) { … } // 等价写法
三、条件控制
1. if
作为表达式
Kotlin 的 if
可以返回值:
val max = if (a > b) a else b
2. when
表达式
比 Java 的 switch
更强大:
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. 类型检查与智能转换
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. 遍历集合
val list = listOf("a", "b", "c")
// 遍历元素
for (item in list) { ... }
// 遍历索引
for (index in list.indices) { ... }
// 同时获取索引和值
for ((index, value) in list.withIndex()) { ... }
五、类与对象
1. 主构造函数
直接在类名后声明:
class Person(val name: String, var age: Int) {
// 类体
}
val
生成只读属性,var
生成可变属性。
2. 次构造函数
使用 constructor
关键字:
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()
:
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 的静态方法:
class MyClass {
companion object {
fun create() = MyClass()
}
}
// 调用
val instance = MyClass.create()
六、空安全机制
1. 可空类型
通过 ?
声明可空:
var str: String? = null
// str.length // 编译错误:需处理可空性
2. 安全调用操作符 ?.
避免空指针:
val length = str?.length // 返回 Int?(可能为 null)
3. Elvis 操作符 ?:
提供默认值:
val len = str?.length ?: 0 // 若 str 为 null,返回 0
4. 非空断言 !!
强制解除可空(慎用):
val forcedLen = str!!.length // 若 str 为 null,抛出 NPE
七、集合操作
1. 集合类型
-
不可变集合:
listOf()
,setOf()
,mapOf()
-
可变集合:
mutableListOf()
,mutableSetOf()
,mutableMapOf()
2. 常用操作符
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. 为现有类添加方法
fun String.addExclamation() = "$this!"
// 使用
println("Hello".addExclamation()) // 输出:Hello!
2. 扩展属性
val String.lastChar: Char
get() = this[length - 1]
// 使用
println("Kotlin".lastChar) // 输出:n
九、Lambda 表达式
1. 基本语法
val sum: (Int, Int) -> Int = { a, b -> a + b }
println(sum(2, 3)) // 输出:5
2. 高阶函数
将函数作为参数传递:
fun calculate(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a