Kotlin Cheatsheet - Kotlin Syntax & Coroutine Reference

Kotlin 日常开发必备命令与语法都在这里了,从空安全到协程编程,按类别分类整理,写代码时直接复制。

Languages·47 commands·Last updated 2026-07-21
Back to Languages

编译与运行 5

kotlinc main.kt -include-runtime -d main.jar
编译为可执行 jar
java -jar main.jar
运行编译后的 jar
kotlinc -script script.kts
运行 Kotlin 脚本
kotlinc-jvm
进入 REPL
kotlin main.kt
直接运行(无需编译)

Gradle 构建 5

./gradlew build
构建项目
./gradlew run
运行主类
./gradlew test
运行测试
./gradlew clean
清理构建目录
./gradlew dependencies
查看依赖

空安全 5

var name: String? = null
可空类型声明
name?.length
安全调用(null 返回 null)
name ?: "default"
Elvis 操作符(null 时给默认值)
name!!.length
非空断言(null 抛异常)
val len = name?.length ?: 0
组合使用

集合操作 10

list.filter { it > 5 }
过滤
list.map { it * 2 }
映射
list.flatMap { it.split(",") }
扁平化映射
list.groupBy { it.category }
分组
list.sortedBy { it.age }
排序
list.distinct()
去重
list.take(5)
取前 5 个
list.drop(3)
丢弃前 3 个
list.firstOrNull { it.id == 1 }
查找第一个匹配
list.partition { it > 0 }
按条件分成两份

协程 Coroutine 6

runBlocking { ... }
阻塞式协程(测试用)
launch { ... }
启动协程(不返回值)
async { ... }
启动协程(返回 Deferred)
delay(1000)
非阻塞延迟
withContext(Dispatchers.IO) { ... }
切换上下文
coroutineScope { ... }
创建协程作用域

类与对象 8

data class User(val name: String, val age: Int)
数据类(自动生成 equals/hashCode/toString/copy)
sealed class Result
密封类(受限继承层次,when 分支可穷举)
object Singleton { val x = 1 }
单例对象声明
companion object { val MAX = 100 }
伴生对象(类级静态成员)
class User(val name: String)
主构造函数声明属性
open class Animal; class Dog : Animal()
继承(父类需 open)
interface Drawable { fun draw() }
接口定义
enum class Color { RED, GREEN, BLUE }
枚举类

作用域函数与委托 8

obj.let { it.foo() }
let:it 接收者,返回 lambda 结果
obj.apply { this.x = 1 }
apply:this 接收者,返回对象本身(初始化用)
obj.also { it.log() }
also:it 接收者,返回对象本身(副作用用)
obj.run { compute() }
run:this 接收者,返回 lambda 结果
with(obj) { foo() }
with:this 接收者,返回 lambda 结果
val lazyVal by lazy { init() }
延迟初始化委托(首次访问时计算)
var x by Delegates.observable(0) { _, old, new -> }
可观察属性委托
val v by map
Map 委托(从 map 按键取值)

💡 Tips

  • Kotlin 的空安全是编译期检查,!! 能不用就不用。
  • 协程的 launch 和 async 区别:launch 返回 Job,async 返回 Deferred(可 await)。
  • 集合操作链式调用很优雅,但大数据量时注意中间集合的内存开销。
  • data class 自动生成 copy/equals/hashCode/toString,适合纯数据模型。
  • 作用域函数选择:初始化用 apply,转换用 let/let it,副作用用 also。
  • sealed class 搭配 when 使用时编译器会检查分支是否穷举,无需 else。