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
相关推荐
阿巴斯甜4 小时前
Android 报错:Zip file '/Users/lyy/develop/repoAndroidLapp/l-app-android-ble/app/bu
android
Kapaseker4 小时前
实战 Compose 中的 IntrinsicSize
android·kotlin
xq95275 小时前
Andorid Google 登录接入文档
android
黄林晴6 小时前
告别 Modifier 地狱,Compose 样式系统要变天了
android·android jetpack
冬奇Lab19 小时前
Android触摸事件分发、手势识别与输入优化实战
android·源码阅读
城东米粉儿1 天前
Android MediaPlayer 笔记
android
Jony_1 天前
Android 启动优化方案
android
阿巴斯甜1 天前
Android studio 报错:Cause: error=86, Bad CPU type in executable
android
张小潇1 天前
AOSP15 Input专题InputReader源码分析
android
_小马快跑_1 天前
Kotlin | 协程调度器选择:何时用CoroutineScope配置,何时用launch指定?
android