Kotlin 2.1.0 发布,带来新的语言特性和编译器更新

Kotlin 2.1.0 发布,带来新的语言特性和编译器更新
2024年12月13日 16:38 InfoQ

作者 | Sergio De Simone

译者 | 平川

策划 | Tina

Kotlin 2.1.0 引入了新语法,包括守卫条件、非局部breakcontinue以及多$符字符串插值。此外,它还扩展了多平台功能,并改进了 K2 编译器。

when表达式中的守卫条件旨在使条件逻辑更加简洁易读,使开发人员可以在主条件关联到分支之后再加入一个if条件,例如:

when (httpResponse) {

is Success -> ...

is HttpError if httpResponse.status >= 500 -> ...

is HttpError -> ...

}

只有当主条件和if条件都验证通过时,才会执行带有守卫条件的分支中的代码。此外,它还支持 if ... else

对于在循环内部执行的 lambda 表达式,非局部breakcontinue使开发人员可以从这些表达式中中断或继续执行循环,例如:

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 更新构建脚本之前,务必要查看官方迁移指南。

财经自媒体联盟更多自媒体作者

新浪首页 语音播报 相关新闻 返回顶部