Kotlin 概述与环境配置
Kotlin 语言概述、发展历史、与 Java 的关系、多平台支持与环境搭建。
1. Kotlin 概述
Kotlin 是由 JetBrains 公司于 2011 年发布的一种静态类型编程语言,2012 年开源,2016 年发布 1.0 正式版。2017 年 Google 宣布 Kotlin 成为 Android 官方开发语言,2019 年进一步宣布 Kotlin 为 Android 开发的首选语言。Kotlin 的设计目标是成为一种实用、简洁、安全的语言,同时与 Java 保持完全互操作。
1.1 发展历程
| 时间 | 事件 | 版本 |
|---|---|---|
| 2011 | JetBrains 公布 Kotlin 项目 | - |
| 2012 | Kotlin 开源 | 0.1 |
| 2016 | Kotlin 1.0 正式发布 | 1.0 |
| 2017 | Google 宣布 Kotlin 为 Android 官方语言 | 1.1 |
| 2018 | Kotlin 协程稳定版发布 | 1.3 |
| 2019 | Google 宣布 Kotlin 为 Android 首选语言 | 1.3 |
| 2021 | Kotlin 1.5 发布,新增 JVM IR 编译器后端 | 1.5 |
| 2022 | Kotlin 1.7 发布,K2 编译器预览 | 1.7 |
| 2023 | Kotlin 2.0 发布,K2 编译器正式稳定 | 2.0 |
| 2024 | Kotlin 2.1 发布,KMP 稳定 | 2.1 |
| 2025 | Kotlin 2.2 发布,Compose Multiplatform 持续增强 | 2.2 |
1.2 核心特点
| 特点 | 描述 | 优势 |
|---|---|---|
| 简洁性 | 大幅减少样板代码,数据类、属性委托等特性极大简化代码 | 开发效率高,代码可读性强 |
| 安全性 | 空安全类型系统从编译期消除空指针异常 | 减少 NPE 运行时崩溃 |
| 互操作性 | 与 Java 100% 互操作,可自由混用 Java 和 Kotlin 代码 | 渐进式迁移,保护已有投资 |
| 工具友好 | 由 JetBrains 设计,与 IntelliJ IDEA 深度集成 | 优秀的 IDE 支持和开发体验 |
| 多平台 | 支持 JVM、JavaScript、Native 多个编译目标 | 一套代码多端运行 |
| 协程 | 内置协程支持,提供结构化并发模型 | 简化异步编程,避免回调地狱 |
| 函数式 | 支持高阶函数、Lambda、扩展函数等函数式特性 | 代码更灵活、表达力更强 |
1.3 Kotlin 与 Java 的关系
Kotlin 运行在 JVM 之上,与 Java 完全互操作,但并非 Java 的简单语法糖:
| 方面 | Java | Kotlin |
|---|---|---|
| 空安全 | 无内建空安全,依赖注解 | 类型系统内建空安全(? 标记) |
| 数据类 | 需手写 getter/setter/equals/hashCode | data class 一行搞定 |
| 扩展函数 | 不支持 | 支持为已有类添加方法 |
| 协程 | 无内建支持(Project Loom 在进行中) | 内建协程支持 |
| Lambda | Java 8+ 支持,但与 SAM 类型交互繁琐 | Lambda 与函数类型无缝集成 |
| 智能转换 | 不支持 | 自动智能类型转换 |
| 默认参数 | 不支持 | 支持,减少方法重载 |
| 密封类 | Java 17+ 支持 sealed | 早已支持,且与 when 配合更好 |
// Java
public class User {
private String name;
private int age;
public User(String name, int age) { this.name = name; this.age = age; }
public String getName() { return name; }
public int getAge() { return age; }
@Override public boolean equals(Object o) { /* ... */ }
@Override public int hashCode() { /* ... */ }
@Override public String toString() { /* ... */ }
}
// Kotlin — 一行等价
data class User(val name: String, val age: Int)
2. 多平台支持
Kotlin 不仅仅是 JVM 语言,它支持多个编译目标:
2.1 Kotlin/JVM
最成熟的目标平台,编译为 JVM 字节码,与 Java 完全互操作。适用于:
- 服务端开发(Spring Boot、Ktor)
- Android 应用开发
- 桌面应用(TornadoFX)
2.2 Kotlin/JS
将 Kotlin 代码编译为 JavaScript,支持:
- 前端 Web 开发
- Node.js 服务端
- 与现有 JavaScript 库互操作
// Kotlin/JS 示例
fun main() {
val element = document.createElement("div")
element.textContent = "Hello from Kotlin/JS!"
document.body!!.appendChild(element)
}
2.3 Kotlin/Native
将 Kotlin 编译为原生二进制文件,无需虚拟机:
- iOS 应用开发
- 嵌入式系统
- 对启动时间敏感的应用
2.4 Kotlin Multiplatform (KMP)
KMP 是 Kotlin 多平台的核心策略,允许在平台间共享代码:
shared/
├── commonMain/ # 所有平台共享的代码
├── jvmMain/ # JVM 特定代码
├── jsMain/ # JS 特定代码
├── nativeMain/ # Native 特定代码
└── appleMain/ # Apple 平台共享代码
3. 环境搭建
3.1 IntelliJ IDEA(推荐)
IntelliJ IDEA 是 Kotlin 开发的最佳 IDE,由 JetBrains 出品,内建完整的 Kotlin 支持:
- 下载 IntelliJ IDEA(Community 版免费)
- 安装后,Kotlin 插件已内置,无需额外配置
- 创建新项目:File → New → Project → 选择 Kotlin
3.2 Android Studio
Android Studio 基于 IntelliJ IDEA,同样内置 Kotlin 支持:
- 下载 Android Studio
- 创建新项目时选择 Kotlin 作为开发语言
- 现有项目可通过 Tools → Kotlin → Configure Kotlin in Project 迁移
3.3 命令行(SDKMAN)
使用 SDKMAN 安装 Kotlin SDK:
# Install SDKMAN
curl -s "https://get.sdkman.io" | bash
# Install Kotlin
sdk install kotlin
# Verify installation
kotlinc -version
# Kotlin version 2.2.0 ...
编译和运行 Kotlin 程序:
# Compile
kotlinc Hello.kt -include-runtime -d Hello.jar
# Run
java -jar Hello.jar
# Or use Kotlin directly
kotlinc Hello.kt -script
3.4 Gradle 构建配置
Kotlin 项目通常使用 Gradle 构建,以下是基础配置:
// build.gradle.kts
plugins {
kotlin("jvm") version "2.2.0"
application
}
group = "com.example"
version = "1.0-SNAPSHOT"
repositories {
mavenCentral()
}
dependencies {
testImplementation(kotlin("test"))
}
application {
mainClass.set("com.example.MainKt")
}
kotlin {
jvmToolchain(17)
}
3.5 在线 Playground
无需安装任何环境,直接在浏览器中体验 Kotlin:
- Kotlin Playground — 官方在线编辑器
- Kotlin Koans — 交互式练习
4. Hello World
4.1 基础 Hello World
fun main() {
println("Hello, Kotlin!")
}
4.2 带命令行参数
fun main(args: Array<String>) {
if (args.isNotEmpty()) {
println("Hello, ${args[0]}!")
} else {
println("Hello, World!")
}
}
4.3 脚本模式
Kotlin 支持脚本文件(.kts):
// hello.kts
println("Hello from Kotlin script!")
val numbers = listOf(1, 2, 3, 4, 5)
println("Sum: ${numbers.sum()}")
运行:kotlinc -script hello.kts
5. Kotlin 2.x 新特性
5.1 K2 编译器
Kotlin 2.0 引入了全新的 K2 编译器前端,带来显著改进:
- 编译速度:相比 1.x 提升约 2 倍
- 统一架构:所有目标平台共享前端
- 更好的 IDE 体验:代码高亮和补全更快
5.2 Kotlin 2.1+ 新特性
// Guard conditions in when (2.1)
when (value) {
is String -> when {
value.length > 5 -> println("Long string")
else -> println("Short string")
}
}
// Improved smart casting
fun process(input: Any) {
if (input is String && input.length > 0) {
// input is smart-cast to String here
println(input.uppercase())
}
}
6. 学习路线建议
Kotlin 基础语法 → 函数与 Lambda → 类与对象 → 泛型与类型系统
↓ ↓
集合与协程 → 协程进阶 → Kotlin 多平台 → DSL 设计 → 测试与最佳实践
| 阶段 | 内容 | 预计时间 |
|---|---|---|
| 入门 | 基础语法、函数、类 | 1-2 周 |
| 进阶 | 泛型、协程、集合操作 | 2-3 周 |
| 高级 | KMP、DSL、性能优化 | 3-4 周 |
| 实战 | 项目开发、架构设计 | 持续 |
提示:有 Java 基础的开发者可以重点关注 Kotlin 与 Java 的差异部分,如空安全、扩展函数、协程等,通常 1-2 周即可上手。