作者 | Sergio De Simone
译者 | 平川
策划 | Tina
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
): 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 更新构建脚本之前,务必要查看官方迁移指南。
4000520066 欢迎批评指正
All Rights Reserved 新浪公司 版权所有