适用人群:有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 对比
| 特性 | Kotlin | Java |
|---|
| 空安全 | 内置 | 需要注解/Optional |
| 数据类 | data class | 需要手写或Lombok |
| 协程 | 原生支持 | 需要第三方库 |
| 扩展函数 | 支持 | 不支持 |
| 代码量 | 少约40% | 较多 |
| 编译速度 | 略慢 | 快 |
推荐资源
| 资源 | 说明 |
|---|
| Kotlin官网文档 | 最权威的学习资料 |
| Kotlin Koans | 官方练习题 |
| JetBrains Academy | 结构化学习路径 |
| Android Codelabs | Android Kotlin实战 |
实战项目建议
- Android天气应用:Jetpack Compose + Retrofit
- Spring Boot API:Kotlin + Spring Boot后端
- CLI工具:Clikt库构建命令行应用
- Kotlin Multiplatform:跨平台共享代码