12.1 Kotlin:Android的现代选择

Kotlin由JetBrains公司于2011年发布,2016年发布1.0版本。它运行在JVM上,与Java完全互操作,设计目标是更简洁、更安全、更表达力的Java替代品。

2017年,Google宣布Kotlin成为Android官方开发语言。2019年,Google进一步宣布Android开发“Kotlin优先”。

kotlin
复制代码
// Kotlin代码示例

// 数据类
data class User(val name: String, val age: Int, val email: String? = null)

// 扩展函数
fun String.isEmail(): Boolean = contains("@") && contains(".")

// 空安全
fun getEmailLength(user: User?): Int {
    return user?.email?.length ?: 0  // Elvis运算符处理null
}

// 协程
import kotlinx.coroutines.*

suspend fun fetchData(): String {
    delay(1000)  // 非阻塞延迟
    return "Data"
}

fun main() = runBlocking {
    val results = coroutineScope {
        val data1 = async { fetchData() }
        val data2 = async { fetchData() }
        listOf(data1.await(), data2.await())
    }
    println(results)
    
    // 使用集合函数式操作
    val numbers = listOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    val evenSquares = numbers
        .filter { it % 2 == 0 }
        .map { it * it }
    
    println(evenSquares)
    
    // 使用when表达式(类似switch但更强大)
    fun describe(x: Any) = when (x) {
        is Int -> "Integer: $x"
        is String -> "String: $x"
        else -> "Unknown type"
    }
}

// 密封类
sealed class Result<out T> {
    data class Success<T>(val data: T) : Result<T>()
    data class Error(val message: String) : Result<Nothing>()
}

Kotlin的特点:

  • 空安全:类型系统区分可空和不可空类型
  • 协程:轻量级并发,避免回调地狱
  • 扩展函数:为现有类添加方法而不修改原类
  • 数据类:自动生成equalshashCodetoStringcopy
  • 与Java完全互操作:可以调用Java代码,反之亦然
  • 多平台:Kotlin Multiplatform支持Android、iOS、Web、桌面