Kotlin 命令速查表 - Kotlin 常用语法与协程编程大全

这套速查给写 Kotlin 的开发者——无论是 Android 应用、JVM 后端还是随手写脚本——聚焦每天都碰的几件事:用 kotlinc/Gradle 编译运行、空安全那套写法(安全调用、Elvis、非空断言)、filter/map/groupBy 等集合操作符,以及协程做结构化并发。与泛泛的语法罗列不同,条目按"这句代码解决什么问题"组织,从"避免空指针"到"把 I/O 挪出主线程"都有对应。读完应能写出没有散落 !! 的空安全链、流式处理集合,并让协程按作用域正确取消。

编程语言·共 47 条命令·最后更新 2026-07-21
kotlingradlejvm

编译与运行 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 避免本地环境差异
./gradlew run
运行配置了 application 插件的主类,本地快速起应用入口
./gradlew test
运行 JUnit 等测试套件,失败会让构建失败,可在 CI 里拦截回归
./gradlew clean
清空 build 目录构建产物,配合 build 得到干净的 from-scratch 构建
./gradlew dependencies
打印依赖及其解析版本,排查冲突和升级影响面

空安全 5

var name: String? = null
用 ? 声明可空类型,后续赋值可以置 null;非空断言前先确认真不为空
name?.length
安全调用:name 为 null 时整个表达式返回 null 而不是抛 NPE,是首选写法
name ?: "default"
Elvis 操作符:左侧为 null 时改用右侧默认值,一行搞定兜底
name!!.length
非空断言:强行当非空去访问,若实际为 null 会抛 NPE,需慎用、多数可被 ?. 和 ?: 替代
val len = name?.length ?: 0
组合:安全调用拿不到就用 0 兜底,链式中最常用的 null-safe 表达式

集合操作 10

list.filter { it > 5 }
保留满足条件的元素并返回新列表,原列表不变
list.map { it * 2 }
对每个元素应用变换,返回长度相同的新列表,通常做 DTO 到视图模型转换
list.flatMap { it.split(",") }
每个元素映射到一个集合再拍平为一个列表,常用于一对多展开
list.groupBy { it.category }
按任意键把列表分组为 Map,如按分类聚合同类对象
list.sortedBy { it.age }
按指定字段返回升序新列表,配合 reversed 可做倒序
list.distinct()
按相等性去重并返回新列表,去重排序逻辑由 equals 决定
list.take(5)
取前 5 个元素作为新列表,常用于分页或截断展示
list.drop(3)
丢弃前 3 个元素并返回其余,常与 take 配对实现分页
list.firstOrNull { it.id == 1 }
返回第一个匹配的元素,没有匹配返回 null,比 first() 更安全不抛异常
list.partition { it > 0 }
按条件一次分成两半:成对的 Pair(first=满足, second=不满足)

协程 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 按键取值)

提示

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

官方参考来源

下方为命令对应的官方权威文档,供你核对最新用法与深入查阅。

由 巧匠 维护

公开更新于 2026年7月21日,内容持续校对官方文档。

联系我们

命令或描述有误?提交反馈、商务合作或产品建议都可发送邮件给我们。

联系我们