51 - Kotlin 入门教程

适用人群:有Java基础或移动端开发兴趣
难度:中等
预计学习时间:30-40小时

为什么学 Kotlin?

优势说明
Android官方语言Google首选Android开发语言
与Java互操作100%兼容Java,可混合使用
现代语法空安全、协程、扩展函数等
多平台JVM/Android/iOS/JS/Native
简洁比Java代码量少约40%

学习路线

第1阶段:基础语法(1周)
├── 变量(val/var)
├── 基本类型与字符串模板
├── 函数与默认参数
├── 控制流(when表达式)
├── 空安全(?.、!!、?:)
└── 集合操作(List/Set/Map)

第2阶段:面向对象(1周)
├── 类与构造函数
├── 继承与接口
├── 数据类(data class)
├── 密封类(sealed class)
├ object声明(单例)
└── 扩展函数

第3阶段:高级特性(2周)
├── 泛型
├── 高阶函数与Lambda
├── 集合高级操作(map/filter/reduce)
├── 协程(Coroutine)基础
└── Flow

第4阶段:实战(2周)
├── Android应用开发(Jetpack Compose)
├── Spring Boot + Kotlin后端
├── Ktor框架
└── Kotlin Multiplatform


基础语法速查

// 变量
val name = "Kotlin"       // 不可变(推荐)
var age = 10               // 可变
val pi: Double = 3.14      // 显式类型

// 字符串模板
fun main() {
    val name = "World"
    println("Hello, $name!")
    println("1 + 1 = ${1 + 1}")
}

// 空安全
var nullable: String? = null   // 可空类型
val length = nullable?.length  // 安全调用,返回null
val len = nullable?.length ?: 0  // Elvis运算符
// val crash = nullable!!.length  // 非空断言,可能NPE

// 函数
greet(name: String, prefix: String = "Hello"): String {
    return "$prefix, $name"
}

// 单表达式函数
fun add(a: Int, b: Int) = a + b

// when表达式
fun describe(obj: Any): String = when(obj) {
    1 -> "One"
    "Hello" -> "Greeting"
    is Long -> "Long number $obj"
    else -> "Unknown"
}

// 数据类(自动生成equals/hashCode/toString/copy)
data class User(val name: String, val age: Int)

val user = User("Alice", 25)
val copy = user.copy(age = 26)  // 复制并修改
val (name, age) = user           // 解构

// 扩展函数
fun String.isPalindrome(): Boolean {
    return this == this.reversed()
}
println("racecar".isPalindrome())  // true

// Lambda与集合操作
val numbers = listOf(1, 2, 3, 4, 5)
val doubled = numbers.map { it * 2 }        // [2, 4, 6, 8, 10]
val evens = numbers.filter { it % 2 == 0 }  // [2, 4]
val sum = numbers.reduce { acc, i -> acc + i }  // 15

// 类与继承
open class Animal(val name: String) {
    open fun speak(): String = "..."
}

class Dog(name: String) : Animal(name) {
    override fun speak() = "Woof!"
}

// 接口
interface Drawable {
    fun draw()
    fun area(): Double
}

circle(val radius: Double) : Drawable {
    override fun draw() = println("Drawing circle")
    override fun area() = Math.PI * radius * radius
}

// 协程
import kotlinx.coroutines.*

suspend fun fetchData(): String {
    delay(1000)  // 模拟网络请求
    return "Data loaded"
}

fun main() = runBlocking {
    val job = launch {
        val data = fetchData()
        println(data)
    }
    job.join()
    
    // async/await
    val deferred = async { fetchData() }
    val result = deferred.await()
    println(result)
}


Kotlin vs Java 对比

特性KotlinJava
空安全内置需要注解/Optional
数据类data class需要手写或Lombok
协程原生支持需要第三方库
扩展函数支持不支持
代码量少约40%较多
编译速度略慢

推荐资源

资源说明
Kotlin官网文档最权威的学习资料
Kotlin Koans官方练习题
JetBrains Academy结构化学习路径
Android CodelabsAndroid Kotlin实战

实战项目建议

  1. Android天气应用:Jetpack Compose + Retrofit
  2. Spring Boot API:Kotlin + Spring Boot后端
  3. CLI工具:Clikt库构建命令行应用
  4. Kotlin Multiplatform:跨平台共享代码
返回首页