Kotlin Cheatsheet - Kotlin Syntax & Coroutine Reference
Kotlin 日常开发必备命令与语法都在这里了,从空安全到协程编程,按类别分类整理,写代码时直接复制。
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 mapMap 委托(从 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。