Kotlin 2.1.0版本在2024年11月27日发布,引入了多项新功能和优化,提升了语言的表达力和性能。
在 IntelliJ IDEA 2024.3 的最新版本中,开启了 K2 模式,所有功能都在 IDE 中得到了支持。
更多详情请参阅 IntelliJ IDEA 2024.3 博客文章。
1. 当中的守卫在 Kotlin 2.1.0 版本之前: 开发者需要使用嵌套的 if
语句或在每个分支里进行显式检查条件来包含额外条件。
sealed interface Animal {
data class Cat(val mouseHunter: Boolean) : Animal
data class Dog(val breed: String) : Animal
}
fun feedAnimal(animal: Animal) {
when (animal) {
is Animal.Dog -> {
if (animal.age < 10) {
println("给这只小狗喂食")
} else {
println("给这只老狗喂食特别的食物")
}
}
is Animal.Cat -> {
if (!animal.mouseHunter) {
println("给这只猫喂食")
} else {
println("这只猫会抓老鼠,所以不用喂它")
}
}
}
}
从 Kotlin 2.1.0 版本开始: 守卫条件允许你在 when
表达式的各分支中包含多个条件来,从而使复杂的控制流程更加明确和简洁,并且使代码结构更加扁平化。
为了在分支中加入一个额外的条件检查,可以在主要条件后面加上,并用 if
分隔。
fun 喂动物(animal: Animal) {
when (animal) {
is Animal.Dog if animal.age < 10 -> println("喂一条小狗")
is Animal.Dog if animal.age >= 10 -> println("喂一只老年狗特殊食物")
is Animal.Cat if !animal.mouseHunter -> println("喂一只猫")
is Animal.Cat if animal.mouseHunter -> println("这只猫抓老鼠,不用喂食")
}
}
在单个 when
表达式中,你可以结合带有和不带守卫的分支。带有守卫的分支代码只有在主条件和守卫都为 true
时才会执行。如果主条件不符合,则不会评估守卫。此外,守卫还支持 else if
。
要启用守卫检查,在你的项目中的 Gradle 构建文件的 compilerOptions {}
中添加 -Xwhen-guard
。
// 开启-Xwhen-guards编译器选项
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xwhen-guards")
}
}
2. 非本地 break 和 continue
在 Kotlin 2.1.0 版本发布之前: 开发者通过标签来处理 lambda 中的复杂循环,这使得代码变得冗长且难以阅读。
fun processList(elements: List<Int>): Boolean {
for (element in elements) loop@ {
val variable = element.takeIf { it > 0 } ?: continue@loop // 使用带标签的返回语句,因为当时还不支持 continue 语句
if (variable == 0) return@processList true // 这里实现了非局部返回,非局部返回功能已经被支持
}
return false
}
从Kotlin 2.1.0开始: 新特性支持在传递给内联函数 lambda 表达式中直接使用 break
和 continue
关键字。
此功能扩展了内联函数中您可以使用的工具种类,并减少了项目中的重复代码。
fun processList(elements: List<Int>): Boolean {
elements.forEach { element ->
val variable = element.takeIf { it > 0 } ?: continue // 现在可以直接用 continue 替代 return@forEach
if (variable == 0) break // 现在可以直接用 break 替代 return true
}
直接返回 false
}
为了启用非局部中断,在你的 Gradle 构建脚本中的 compilerOptions {}
块中加入 -Xnon-local-break-continue
。
在 build.gradle.kts
文件中,配置 Kotlin 编译器选项,允许使用非局部 break 和 continue 语句。
在 Kotlin 2.1.0 版本之前: 处理包含实际美元符号的字符串时,需要对每个美元符号进行转义处理,这可能会很麻烦且容易出错。
val KClass<*>.jsonSchema: String
get() = """
{
"\$schema": "https://json-schema.org/draft/2020-12/schema",
"\$id": "https://example.com/product.schema.json",
"title": "${simpleName ?: qualifiedName ?: "未知"}",
"type": "对象"
}
"""
从 Kotlin 2.1.0 开始: Kotlin 中的字符串插值使用单个美元符号。然而,在字符串中直接使用美元符号,这在金融数据和模板系统中很常见,需要一些解决方法,比如 `${'
这里展示如何使用 `# 探索 Kotlin 2.1.0:新特性大揭秘
Kotlin 2.1.0版本在2024年11月27日发布,引入了多项新功能和优化,提升了语言的表达力和性能。
在 IntelliJ IDEA 2024.3 的最新版本中,开启了 K2 模式,所有功能都在 IDE 中得到了支持。
更多详情请参阅 IntelliJ IDEA 2024.3 博客文章。
1. 当中的守卫在 Kotlin 2.1.0 版本之前: 开发者需要使用嵌套的 if
语句或在每个分支里进行显式检查条件来包含额外条件。
sealed interface Animal {
data class Cat(val mouseHunter: Boolean) : Animal
data class Dog(val breed: String) : Animal
}
fun feedAnimal(animal: Animal) {
when (animal) {
is Animal.Dog -> {
if (animal.age < 10) {
println("给这只小狗喂食")
} else {
println("给这只老狗喂食特别的食物")
}
}
is Animal.Cat -> {
if (!animal.mouseHunter) {
println("给这只猫喂食")
} else {
println("这只猫会抓老鼠,所以不用喂它")
}
}
}
}
从 Kotlin 2.1.0 版本开始: 守卫条件允许你在 when
表达式的各分支中包含多个条件来,从而使复杂的控制流程更加明确和简洁,并且使代码结构更加扁平化。
为了在分支中加入一个额外的条件检查,可以在主要条件后面加上,并用 if
分隔。
fun 喂动物(animal: Animal) {
when (animal) {
is Animal.Dog if animal.age < 10 -> println("喂一条小狗")
is Animal.Dog if animal.age >= 10 -> println("喂一只老年狗特殊食物")
is Animal.Cat if !animal.mouseHunter -> println("喂一只猫")
is Animal.Cat if animal.mouseHunter -> println("这只猫抓老鼠,不用喂食")
}
}
在单个 when
表达式中,你可以结合带有和不带守卫的分支。带有守卫的分支代码只有在主条件和守卫都为 true
时才会执行。如果主条件不符合,则不会评估守卫。此外,守卫还支持 else if
。
要启用守卫检查,在你的项目中的 Gradle 构建文件的 compilerOptions {}
中添加 -Xwhen-guard
。
// 开启-Xwhen-guards编译器选项
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xwhen-guards")
}
}
2. 非本地 break 和 continue
在 Kotlin 2.1.0 版本发布之前: 开发者通过标签来处理 lambda 中的复杂循环,这使得代码变得冗长且难以阅读。
fun processList(elements: List<Int>): Boolean {
for (element in elements) loop@ {
val variable = element.takeIf { it > 0 } ?: continue@loop // 使用带标签的返回语句,因为当时还不支持 continue 语句
if (variable == 0) return@processList true // 这里实现了非局部返回,非局部返回功能已经被支持
}
return false
}
从Kotlin 2.1.0开始: 新特性支持在传递给内联函数 lambda 表达式中直接使用 break
和 continue
关键字。
此功能扩展了内联函数中您可以使用的工具种类,并减少了项目中的重复代码。
fun processList(elements: List<Int>): Boolean {
elements.forEach { element ->
val variable = element.takeIf { it > 0 } ?: continue // 现在可以直接用 continue 替代 return@forEach
if (variable == 0) break // 现在可以直接用 break 替代 return true
}
直接返回 false
}
为了启用非局部中断,在你的 Gradle 构建脚本中的 compilerOptions {}
块中加入 -Xnon-local-break-continue
。
在 build.gradle.kts
文件中,配置 Kotlin 编译器选项,允许使用非局部 break 和 continue 语句。
在 Kotlin 2.1.0 版本之前: 处理包含实际美元符号的字符串时,需要对每个美元符号进行转义处理,这可能会很麻烦且容易出错。
val KClass<*>.jsonSchema: String
get() = """
{
"\$schema": "https://json-schema.org/draft/2020-12/schema",
"\$id": "https://example.com/product.schema.json",
"title": "${simpleName ?: qualifiedName ?: "未知"}",
"type": "对象"
}
"""
从 Kotlin 2.1.0 开始: Kotlin 中的字符串插值使用单个美元符号。然而,在字符串中直接使用美元符号,这在金融数据和模板系统中很常见,需要一些解决方法,比如 `${'
生成多行 JSON 字符串格式并添加占位符。
val KClass<*>.jsonSchema: String
get() = $"""
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "${simpleName ?: qualifiedName ?: "unknown"}",
"type": "object"
}
""" // 此 JSON 架构用于定义产品的数据结构,确保数据的一致性和有效性。
在这里,初始的 $
表示需要输入两个美元符号来触发插值,从而防止 $schema
、$id
和 $dynamicAnchor
被解释为插值标记。要启用此功能,您需要在 Gradle 构建文件的 compilerOptions {}
块中添加 -Xmulti-dollar-interpolation
:
// build.gradle.kts
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xmulti-dollar-interpolation")
}
}
4 K2编译器更新
Kotlin 2.1.0 中的 K2 编译器提供了更灵活的编译检查方式,并改进了 kapt 的实现。这些更新让开发者对编译过程拥有更多控制权,并提升了编译性能。
5. Kotlin 多平台功能增强Kotlin 2.1.0 引入了对 Swift 导出的基本支持,从而可以更好地与 Swift 代码进行互操作。此外,引入了一个稳定的 Gradle DSL 来配置编译器选项,简化了在多平台项目中配置编译器选项的过程。
6. Kotlin/Native 改进此版本增强了对iosArm64
的支持,提升了开发iOS应用的体验。其他更新还包括性能优化和修复错误,有助于构建更稳定、高效的Kotlin/Native环境。
第7节 Kotlin/Wasm 更新
Kotlin 2.1.0 包含了许多针对 Kotlin/Wasm 的更新,特别是增加了对增量编译的支持。这一改进减少了构建时间,并优化了针对 WebAssembly 的开发流程。
8.: Gradle 支持改进该版本提升了与较新版本Gradle及Android Gradle插件的兼容性。更新后的Kotlin Gradle插件API为开发人员提供了更多构建Kotlin项目的工具和选择。
第九 文档优化Kotlin的文档已经得到了显著的改进,提供了更加清晰且全面的指南和参考材料,帮助开发者更有效地使用该语言。
10. 更新到 Kotlin 2.1.0 版本要开始使用Kotlin 2.1.0,只需将您的构建脚本中的Kotlin版本从旧版本更新为2.1.0。支持2.1.0的Kotlin插件已内置在IntelliJ IDEA和Android Studio的最新版本中,因此您无需单独更新任何插件。
你可以通过探索并使用这些新功能和改进,提升你的Kotlin开发过程,并利用语言的最新特性。
}`。通过启用多美元插值功能,您可以配置触发插值的美元符号数量,较少的美元符号将被当作字符串字面量。
Here’s an example of how to generate a JSON schema multi-line string with placeholders using $
:
val KClass<*>.jsonSchema: String
get() = $$"""
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://example.com/product.schema.json",
"title": "$${simpleName ?: qualifiedName ?: "unknown"}",
"type": "object"
}
"""
Here, the initial $$
means that two dollar signs are required to trigger interpolation, preventing $schema
, $id
, and $dynamicAnchor
from being interpreted as interpolation markers. To enable this feature, add the
-Xmulti-dollar-interpolation
in the compilerOptions {}
block of your Gradle build file:
// build.gradle.kts
kotlin {
compilerOptions {
freeCompilerArgs.add("-Xmulti-dollar-interpolation")
}
}
4. K2 Compiler Updates
The K2 compiler in Kotlin 2.1.0 offers more flexibility around compiler checks and improvements to the kapt implementation. These updates enhance performance and give developers more control over the compilation process.
5. Kotlin Multiplatform EnhancementsKotlin 2.1.0 introduces basic support for Swift export, allowing for better interoperability with Swift code. Additionally, a stable Gradle DSL for compiler options has been introduced, simplifying the configuration of compiler settings in multiplatform projects.
6. Kotlin/Native ImprovementsThis release brings improved support for iosArm64
, enhancing the development experience for iOS applications. Other updates include performance optimizations and bug fixes that contribute to a more stable and efficient Kotlin/Native environment.
Kotlin 2.1.0 includes multiple updates for Kotlin/Wasm, notably support for incremental compilation. This enhancement reduces build times and improves the development workflow when targeting WebAssembly.
8. Gradle Support EnhancementsThe release improves compatibility with newer versions of Gradle and the Android Gradle plugin. Updates to the Kotlin Gradle plugin API provide developers with more tools and options for building Kotlin projects efficiently.
9. Documentation ImprovementsSignificant improvements have been made to the Kotlin documentation, providing clearer and more comprehensive guides and references to assist developers in utilizing the language effectively.
10. Updating to Kotlin 2.1.0To start using Kotlin 2.1.0, change the Kotlin version to 2.1.0 in your build scripts. The Kotlin plugins that support 2.1.0 are bundled in the latest versions of IntelliJ IDEA and Android Studio, so no additional plugin updates are necessary.
By exploring and adopting these new features and improvements, you can enhance your Kotlin development experience and take advantage of the latest advancements in the language.
共同学习,写下你的评论
评论加载中...
作者其他优质文章