Kotlin 2.1.0 引入了新语法,包括守卫条件、非局部break
和continue
以及多$
符字符串插值。此外,它还扩展了多平台功能,并改进了 K2 编译器。
when
表达式中的守卫条件旨在使条件逻辑更加简洁易读,使开发人员可以在主条件关联到分支之后再加入一个if
条件,例如:
when (httpResponse) {
is Success -> ...
is HttpError if httpResponse.status >= 500 -> ...
is HttpError -> ...
}
只有当主条件和if
条件都验证通过时,才会执行带有守卫条件的分支中的代码。此外,它还支持 if ... else
。
对于在循环内部执行的 lambda 表达式,非局部break
和continue
使开发人员可以从这些表达式中中断或继续执行循环,例如:
fun processList(records: List<Int>): Boolean {
for (record in list) {
val variable = record.nullableValue() ?: run {
log.warning("Record is null or invalid, continuing...")
continue
}
if (variable == 0) return true
}
return false
}
在语法方面,Kotlin 2.1.0 还扩展了字符串插值功能,使得在插值字符串内使用$
符号变得更容易,不需要再转义了。例如,在生成 JSON 模式时,就可以使用$$
作为插值前缀,如下例所示:
val KClass<*>.jsonSchema : String
get() = $$"""
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"$dynamicAnchor": "meta"
"title": "$${simpleName ?: qualifiedName ?: "unknown"}",
"type": "object"
}
"""
其他新增的语法特性包括:@SubclassOptInRequired
注解 要求显式选择启用子类化;改进泛型函数的重载解析;改进使用密封类的when
表达式的穷举检查。
这里描述的新语法特性仍处于预览阶段,如果要使用这些特性,必须在编译器层面启用。
Kotlin 2.1.0 版本还带来了更灵活的 K2 编译器,新增了可配置的编译器检查功能,包括未使用的变量、无法访问的代码、已定义但未使用的值等。反过来,K2 现在也支持逐一关闭所有警告。
K2 还带来了一个经过改进的kapt
插件实现。kapt
是一个注解处理器,可以使用 Dagger 或 Data Binding 等库根据文本注解生成 / 修改代码。虽然kapt
目前处于维护模式,并被 Kotlin 符号处理 API 所取代,但 Kotlin 2.1.0 带来的新版本为现有的所有用户提供了更好的性能。
Kotlin 2.1.0 带来的另外一项重大变化是多平台编程。它支持在不使用 Objective-C 头文件的情况下使用 Swift API,支持配置编译器选项的新 DSL,还支持从任何平台发布多平台库,包括之前被排除在外的 macOS。
Kotlin 2.1.0 可能会破坏现有代码,因此,在使用 IntelliJ IDEA 2023.3 和 Android Studio Iguana (2023.2.1) Canary 15 更新构建脚本之前,务必要查看官方迁移指南。
原文链接:
https://www.infoq.com/news/2024/12/kotlin-2-1-language-features/
声明:本文为 InfoQ 翻译,未经许可禁止转载。
1620 天后,Redis 之父强势归来:开始着手修复社区裂痕,并布局下一代向量数据库
号召全体员工“一起开除老板”!极狐 GitLab 架构师怒斥高层“恐吓免费版用户”,前员工揭 CEO“不懂开源”?
硅谷 1/10 程序员在摸鱼?拿20-30万美元年薪却几乎不干活
12 月 13 日至 14 日(周五至周六),AICon 全球人工智能开发与应用大会将在北京盛大开幕!本次大会汇聚 70+ 位 AI 及技术领域的顶尖专家,深入探讨大模型与推理、AI Agent、多模态、具身智能等前沿话题。此外还有丰富的圆桌论坛、以及展区活动,带你深入探索大模型的最新实践与未来趋势。年度最后一次 AI 盛宴,让我们一起见证 AI 未来。