Kotlin 2.1.0では、ガード条件、非ローカルbreakとcontinue、マルチドル文字列補間などのの新しいシンタックスが導入されている。さらに、マルチプラットフォーム機能の拡張や、K2コンパイラの強化が実施されている。
when式のガード条件は、条件ロジックをより簡潔で読みやすくするためのものである。これにより、条件分岐に関連する主要条件の中に、if条件をさらに追加できるようになった。 以下は一例である。
when (httpResponse) { is Success -> ... is HttpError if httpResponse.status >= 500 -> ... is HttpError -> ...} ガード条件分岐コードは、主要条件とifの両方が成立した場合に実行される。if ... elseガードも実装されている。
非ローカルの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 Symbol Processing APIに切り替わっているが、Kotlin 2.1.0で実装された本バージョンではパフォーマンスが向上している。
Kotlin2.1.0が重要な変更をもたらすもう1つの領域は、プラットフォームプログラミングである。Objective-CヘッダなしでSwift APIが利用できるようになり、コンパイラオプションを設定する新しいDSLやmacOSなどのこれまでに除外されていたあらゆるプラットフォームからのマルチプラットフォームライブラリの公開が実装されている。
Kotlin 2.1.0は既存のコードに破壊的変更を加える可能性があるため、IntelliJ IDEA 2023.3やAndroid Studio Iguana (2023.2.1) Canary 15を使用している場合は、ビルドスクリプトを更新する前に公式移行ガイドの確認がお勧めである。