Skip to content

Kotlin 1.5.0の新機能

リリース日: 2021年5月5日

Kotlin 1.5.0では、新しい言語機能、安定版のIRベースJVMコンパイラバックエンド、パフォーマンスの改善、および実験的機能の安定化や古い機能の非推奨化といった進化的な変更が導入されました。

変更点の概要は、リリースブログ記事でもご覧いただけます。

言語機能

Kotlin 1.5.0では、1.4.30でプレビューとして発表された新しい言語機能の安定版が提供されます。

これらの機能の詳細については、こちらのブログ記事とKotlinドキュメントの対応するページで確認できます。

JVMレコードのサポート

Javaは急速に進化しており、KotlinがJavaとの相互運用性を維持できるようにするため、最新機能の1つであるレコードクラスのサポートを導入しました。

KotlinのJVMレコードサポートには、双方向の相互運用性が含まれます。

  • Kotlinコードでは、Javaのレコードクラスをプロパティを持つ通常のクラスと同じように使用できます。
  • KotlinクラスをJavaコードでレコードとして使用するには、dataクラスにして@JvmRecordアノテーションを付けます。
kotlin
@JvmRecord
data class User(val name: String, val age: Int)

KotlinでのJVMレコードの使用について詳しく学ぶ

シールドインターフェース

Kotlinのインターフェースはsealed修飾子を持つことができるようになりました。これはクラスと同様にインターフェースに作用し、シールドインターフェースのすべての実装がコンパイル時に既知になります。

kotlin
sealed interface Polygon

その事実を利用して、例えば網羅的なwhen式を書くことができます。

kotlin
fun draw(polygon: Polygon) = when (polygon) {
   is Rectangle -> // ...
   is Triangle -> // ...
   // else is not needed - all possible implementations are covered
}

さらに、シールドインターフェースは、1つのクラスが複数のシールドインターフェースを直接継承できるため、より柔軟な制限されたクラス階層を可能にします。

kotlin
class FilledRectangle: Polygon, Fillable

シールドインターフェースについて詳しく学ぶ

パッケージ全体にわたるシールドクラス階層

シールドクラスは、同じコンパイル単位および同じパッケージ内のすべてのファイルにサブクラスを持つことができるようになりました。以前は、すべてのサブクラスは同じファイル内に存在する必要がありました。

直接のサブクラスは、トップレベルであるか、任意の数の名前付きクラス、名前付きインターフェース、または名前付きオブジェクト内にネストされていても構いません。

シールドクラスのサブクラスは、適切に修飾された名前を持つ必要があります。ローカルオブジェクトや匿名オブジェクトにはできません。

シールドクラス階層について詳しく学ぶ

インラインクラス

インラインクラスは、値のみを保持する値ベースクラスのサブセットです。これらは、メモリ割り当てによる追加のオーバーヘッドなしに、特定の型の値のラッパーとして使用できます。

インラインクラスは、クラス名の前にvalue修飾子を付けて宣言できます。

kotlin
value class Password(val s: String)

JVMバックエンドでは、特別な@JvmInlineアノテーションも必要です。

kotlin
@JvmInline
value class Password(val s: String)

現在、inline修飾子は警告とともに非推奨となっています。

インラインクラスについて詳しく学ぶ

Kotlin/JVM

Kotlin/JVMには、内部およびユーザー向けの改善が多数加えられました。特に注目すべき点を以下に示します。

安定版JVM IRバックエンド

Kotlin/JVMコンパイラのIRベースバックエンドが、Stableとなり、デフォルトで有効になりました。

Kotlin 1.4.0以降、IRベースのバックエンドの初期バージョンがプレビューとして利用可能でしたが、言語バージョン1.5ではデフォルトになりました。古いバックエンドは、以前の言語バージョンでは引き続きデフォルトで使用されます。

IRバックエンドの利点とその将来の開発についての詳細は、こちらのブログ記事で確認できます。

Kotlin 1.5.0で古いバックエンドを使用する必要がある場合は、プロジェクトの設定ファイルに以下の行を追加できます。

  • Gradleの場合:
kotlin
 tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile> {
   kotlinOptions.useOldBackend = true
 }
groovy
 tasks.withType(org.jetbrains.kotlin.gradle.dsl.KotlinJvmCompile) {
  kotlinOptions.useOldBackend = true
 }
  • Mavenの場合:
xml
<configuration>
    <args>
        <arg>-Xuse-old-backend</arg>
    </args>
</configuration>

新しいデフォルトのJVMターゲット: 1.8

Kotlin/JVMコンパイルのデフォルトターゲットバージョンが1.8になりました。1.6ターゲットは非推奨です。

JVM 1.6用のビルドが必要な場合でも、このターゲットに切り替えることができます。方法はこちらです。

invokedynamic経由のSAMアダプター

Kotlin 1.5.0では、SAM (Single Abstract Method) 変換のコンパイルに動的呼び出し (invokedynamic) を使用するようになりました。

新しい実装ではLambdaMetafactory.metafactory()を使用し、コンパイル中に補助的なラッパークラスが生成されなくなりました。これにより、アプリケーションのJARサイズが減少し、JVMの起動パフォーマンスが向上します。

匿名クラス生成に基づく古い実装方式に戻すには、コンパイラオプション-Xsam-conversions=classを追加します。

GradleMaven、およびコマンドラインコンパイラでコンパイラオプションを追加する方法を学びます。

invokedynamic経由のラムダ

DANGER

invokedynamicへのプレーンなKotlinラムダのコンパイルは実験的です。これはいつでも廃止または変更される可能性があります。オプトインが必要であり(詳細は下記参照)、評価目的でのみ使用してください。これに関するフィードバックをYouTrackでお寄せいただければ幸いです。

Kotlin 1.5.0では、プレーンなKotlinラムダ(関数型インターフェースのインスタンスに変換されないもの)を動的呼び出し (invokedynamic) にコンパイルする実験的なサポートを導入しています。この実装は、LambdaMetafactory.metafactory()を使用することで、必要なクラスを実行時に効果的に生成し、より軽量なバイナリを生成します。現在、通常のラムダコンパイルと比較して3つの制限があります。

  • invokedynamicにコンパイルされたラムダはシリアライズできません。
  • そのようなラムダでtoString()を呼び出すと、可読性の低い文字列表現が生成されます。
  • 実験的なreflect APIは、LambdaMetafactoryで作成されたラムダをサポートしません。

この機能を試すには、-Xlambdas=indyコンパイラオプションを追加してください。このYouTrackチケットを使用してフィードバックを共有していただけると幸いです。

GradleMaven、およびコマンドラインコンパイラでコンパイラオプションを追加する方法を学びます。

@JvmDefault と古い Xjvm-default モードの非推奨化

Kotlin 1.4.0より前は、-Xjvm-default=enableおよび-Xjvm-default=compatibilityモードとともに@JvmDefaultアノテーションがありました。これらは、Kotlinインターフェース内の特定の非抽象メンバーに対してJVMデフォルトメソッドを作成するために使用されました。

Kotlin 1.4.0では、プロジェクト全体に対してデフォルトメソッドの生成をオンにする新しいXjvm-defaultモードを導入しました

Kotlin 1.5.0では、@JvmDefaultと古いXjvm-defaultモード (-Xjvm-default=enableおよび-Xjvm-default=compatibility) を非推奨化しています。

Java相互運用におけるデフォルトメソッドについて詳しく学ぶ

nullabilityアノテーションの処理の改善

Kotlinは、nullabilityアノテーションを使用してJavaからの型nullability情報を処理することをサポートしています。Kotlin 1.5.0では、この機能に関していくつかの改善が導入されました。

  • 依存関係として使用されるコンパイル済みJavaライブラリの型引数にあるnullabilityアノテーションを読み取ります。
  • TYPE_USEターゲットを持つnullabilityアノテーションをサポートします。
    • 配列
    • 可変引数
    • フィールド
    • 型パラメータとその境界
    • 基底クラスとインターフェースの型引数
  • nullabilityアノテーションが型に適用可能な複数のターゲットを持ち、そのうちの1つがTYPE_USEである場合、TYPE_USEが優先されます。例えば、@NullableTYPE_USEMETHODの両方をターゲットとしてサポートしている場合、メソッドシグネチャ@Nullable String[] f()fun f(): Array<String?>!になります。

これらの新しくサポートされたケースでは、KotlinからJavaを呼び出す際に誤った型nullabilityを使用すると警告が生成されます。これらのケース(エラーレポートを含む)で厳密モードを有効にするには、-Xtype-enhancement-improvements-strict-modeコンパイラオプションを使用します。

null安全性とプラットフォーム型について詳しく学ぶ

Kotlin/Native

Kotlin/Nativeは、より高性能で安定したものになりました。主な変更点は以下のとおりです。

パフォーマンスの改善

1.5.0では、Kotlin/Nativeはコンパイルと実行の両方を高速化する一連のパフォーマンス改善を受けています。

コンパイラキャッシュが、linuxX64 (Linuxホストのみ) およびiosArm64ターゲットのデバッグモードでサポートされるようになりました。コンパイラキャッシュを有効にすると、最初のコンパイルを除いて、ほとんどのデバッグコンパイルがはるかに高速に完了します。測定では、テストプロジェクトで約200%の速度向上が示されました。

新しいターゲットでコンパイラキャッシュを使用するには、プロジェクトのgradle.propertiesに以下の行を追加してオプトインしてください。

  • linuxX64の場合: kotlin.native.cacheKind.linuxX64=static
  • iosArm64の場合: kotlin.native.cacheKind.iosArm64=static

コンパイラキャッシュを有効にした後に問題が発生した場合は、イシュートラッカーYouTrackまでご報告ください。

その他の改善により、Kotlin/Nativeコードの実行が高速化されます。

  • 自明なプロパティアクセサーはインライン化されます。
  • 文字列リテラルのtrimIndent()はコンパイル中に評価されます。

メモリリークチェッカーの無効化

組み込みのKotlin/Nativeメモリリークチェッカーがデフォルトで無効になりました。

これは元々内部使用向けに設計されており、限られた数のケースでのみリークを検出でき、すべてを検出できるわけではありません。さらに、後にアプリケーションのクラッシュを引き起こす可能性のある問題があることが判明しました。そのため、メモリリークチェッカーをオフにすることにしました。

メモリリークチェッカーは、例えばユニットテストなど、特定のケースでは依然として役立ちます。これらのケースでは、以下のコード行を追加することで有効にできます。

kotlin
Platform.isMemoryLeakCheckerActive = true

アプリケーションの実行時にチェッカーを有効にすることは推奨されません。

Kotlin/JS

Kotlin/JSは1.5.0で進化的な変更を受けています。私たちはJS IRコンパイラバックエンドの安定化に向けて作業を続けており、その他の更新も提供しています。

webpack 5へのアップグレード

Kotlin/JS Gradleプラグインは、webpack 4の代わりにwebpack 5をブラウザターゲットに使用するようになりました。これは互換性のない変更をもたらすwebpackのメジャーアップグレードです。カスタムwebpack設定を使用している場合は、必ずwebpack 5リリースノートを確認してください。

webpackを使用したKotlin/JSプロジェクトのバンドルについて詳しく学ぶ

IRコンパイラ用のフレームワークとライブラリ

DANGER

Kotlin/JS IRコンパイラは現在アルファ版です。将来的に互換性のない変更があり、手動での移行が必要になる可能性があります。これに関するフィードバックをYouTrackでお寄せいただければ幸いです。

Kotlin/JSコンパイラ用のIRベースのバックエンドの開発と並行して、ライブラリの作者がプロジェクトをbothモードでビルドすることを奨励し、支援しています。これにより、両方のKotlin/JSコンパイラ用のアーティファクトを生成できるようになり、新しいコンパイラのエコシステムが成長します。

多くの有名なフレームワークやライブラリは、すでにIRバックエンドで利用可能です。例: KVisionfritz2doodleなど。プロジェクトでこれらを使用している場合、すでにIRバックエンドでビルドしてその利点を確認できます。

独自のライブラリを作成している場合は、「両方」モードでコンパイルしてください。そうすることで、クライアントも新しいコンパイラでそれを使用できるようになります。

Kotlin Multiplatform

Kotlin 1.5.0では、各プラットフォームのテスト依存関係の選択が簡素化され、Gradleプラグインによって自動的に行われるようになりました。

文字カテゴリを取得するための新しいAPIがマルチプラットフォームプロジェクトで利用可能になりました

標準ライブラリ

標準ライブラリには、実験的機能の安定化から新機能の追加まで、さまざまな変更と改善が加えられました。

標準ライブラリの変更点については、こちらのブログ記事で詳しく学ぶことができます。

安定版の符号なし整数型

符号なし整数型UIntULongUByteUShortStableになりました。これらの型に対する操作、範囲、進行も同様です。符号なし配列とその操作はベータ版のままです。

符号なし整数型について詳しく学ぶ

テキストの大文字/小文字変換のための安定版ロケール非依存API

このリリースでは、テキストの大文字/小文字変換のための新しいロケール非依存APIが提供されます。これは、ロケールに依存するtoLowerCase()toUpperCase()capitalize()、およびdecapitalize()API関数の代替を提供します。新しいAPIは、異なるロケール設定によるエラーを回避するのに役立ちます。

Kotlin 1.5.0では、以下の完全にStableな代替機能が提供されます。

  • String関数について:

    以前のバージョン1.5.0の代替
    String.toUpperCase()String.uppercase()
    String.toLowerCase()String.lowercase()
    String.capitalize()String.replaceFirstChar { it.uppercase() }
    String.decapitalize()String.replaceFirstChar { it.lowercase() }
  • Char関数について:

    以前のバージョン1.5.0の代替
    Char.toUpperCase()Char.uppercaseChar(): Char
    Char.uppercase(): String
    Char.toLowerCase()Char.lowercaseChar(): Char
    Char.lowercase(): String
    Char.toTitleCase()Char.titlecaseChar(): Char
    Char.titlecase(): String

NOTE

Kotlin/JVMには、明示的なLocaleパラメータを持つオーバーロードされたuppercase()lowercase()titlecase()関数もあります。

古いAPI関数は非推奨としてマークされており、将来のリリースで削除されます。

テキスト処理関数の変更点の全リストは、KEEPを参照してください。

安定版の文字から整数への変換API

Kotlin 1.5.0以降、新しい文字からコードへの変換関数と文字から数字への変換関数がStableになりました。これらの関数は、類似の文字列からIntへの変換と混同されがちだった現在のAPI関数を置き換えます。

新しいAPIは、この命名の混乱を解消し、コードの振る舞いをより透過的で曖昧さのないものにします。

このリリースでは、明確に名前が付けられた以下の関数のセットに分けられたChar変換が導入されます。

  • Charの整数コードを取得し、与えられたコードからCharを構築する関数:
kotlin
fun Char(code: Int): Char
fun Char(code: UShort): Char
val Char.code: Int
  • Charが表す数字の数値に変換する関数:
kotlin
fun Char.digitToInt(radix: Int): Int
fun Char.digitToIntOrNull(radix: Int): Int?
  • Intの拡張関数で、表す非負の単一の数字を対応するChar表現に変換します。
kotlin
fun Int.digitToChar(radix: Int): Char

古い変換API、Number.toChar()とその実装(Int.toChar()を除くすべて)、およびChar.toInt()のような数値型への変換のためのChar拡張は、現在非推奨となっています。

KEEPでの文字から整数への変換APIについて詳しく学ぶ

安定版Path API

java.nio.file.Pathの拡張機能を持つ実験的なPath APIが、Stableになりました。

kotlin
// construct path with the div (/) operator
val baseDir = Path("/base")
val subDir = baseDir / "subdirectory"

// list files in a directory
val kotlinFiles: List<Path> = Path("/home/user").listDirectoryEntries("*.kt")

Path APIについて詳しく学ぶ

切り捨て除算とmod演算子

標準ライブラリにモジュロ算術のための新しい操作が追加されました。

  • floorDiv()は、切り捨て除算の結果を返します。これは整数型で利用可能です。
  • mod()は、切り捨て除算の剰余(モジュラス)を返します。これはすべての数値型で利用可能です。

これらの操作は既存の整数除算およびrem()関数(または%演算子)とよく似ていますが、負の数に対しては動作が異なります。

  • a.floorDiv(b)は通常の/とは異なり、floorDivは結果を切り下げ(より小さい整数方向へ)、/は結果を0に近い整数に切り詰めます。
  • a.mod(b)aa.floorDiv(b) * bの差です。これはゼロであるか、bと同じ符号を持ちますが、a % bは異なる符号を持つことがあります。
kotlin
fun main() {
    println("Floored division -5/3: ${(-5).floorDiv(3)}")
    println( "Modulus: ${(-5).mod(3)}")
    
    println("Truncated division -5/3: ${-5 / 3}")
    println( "Remainder: ${-5 % 3}")
}

Duration APIの変更点

DANGER

Duration APIは実験的です。これはいつでも廃止または変更される可能性があります。評価目的でのみ使用してください。これに関するフィードバックをYouTrackでお寄せいただければ幸いです。

異なる時間単位での期間量を表現するための実験的なDurationクラスがあります。1.5.0では、Duration APIに以下の変更が加えられました。

  • 内部値表現がDoubleの代わりにLongを使用するようになり、より高い精度を提供します。
  • 特定の時間単位へのLongでの変換のための新しいAPIがあります。これは、Double値で動作し、現在非推奨となっている古いAPIを置き換えるものです。例えば、Duration.inWholeMinutesは期間の値をLongとして表現したものを返し、Duration.inMinutesを置き換えます。
  • 数値からDurationを構築するための新しいコンパニオン関数があります。例えば、Duration.seconds(Int)は整数の秒数を表すDurationオブジェクトを作成します。Int.secondsのような古い拡張プロパティは現在非推奨となっています。
kotlin
import kotlin.time.Duration
import kotlin.time.ExperimentalTime

@ExperimentalTime
fun main() {
    val duration = Duration.milliseconds(120000)
    println("There are ${duration.inWholeSeconds} seconds in ${duration.inWholeMinutes} minutes")
}

文字カテゴリを取得するための新しいAPIがマルチプラットフォームコードで利用可能に

Kotlin 1.5.0では、マルチプラットフォームプロジェクトでUnicodeに従った文字のカテゴリを取得するための新しいAPIが導入されました。いくつかの関数が、すべてのプラットフォームおよび共通コードで利用可能になりました。

文字が文字または数字であるかどうかをチェックする関数:

kotlin
fun main() {
    val chars = listOf('a', '1', '+')
    val (letterOrDigitList, notLetterOrDigitList) = chars.partition { it.isLetterOrDigit() }
    println(letterOrDigitList) // [a, 1]
    println(notLetterOrDigitList) // [+]
}

文字のケース(大文字/小文字/タイトルケース)をチェックする関数:

kotlin
fun main() {
    val chars = listOf('Dž', 'Lj', 'Nj', 'Dz', '1', 'A', 'a', '+')
    val (titleCases, notTitleCases) = chars.partition { it.isTitleCase() }
    println(titleCases) // [Dž, Lj, Nj, Dz]
    println(notTitleCases) // [1, A, a, +]
}

その他の関数:

Unicodeに従った文字の一般カテゴリを示すプロパティChar.categoryとその戻り値型であるenumクラスCharCategoryも、マルチプラットフォームプロジェクトで利用可能になりました。

文字について詳しく学ぶ

新しいコレクション関数 firstNotNullOf()

新しいfirstNotNullOf()およびfirstNotNullOfOrNull()関数は、mapNotNull()first()またはfirstOrNull()を組み合わせたものです。これらはカスタムセレクター関数で元のコレクションをマッピングし、最初の非null値を返します。そのような値がない場合、firstNotNullOf()は例外をスローし、firstNotNullOfOrNull()はnullを返します。

kotlin
fun main() {
    val data = listOf("Kotlin", "1.5")
    println(data.firstNotNullOf(String::toDoubleOrNull))
    println(data.firstNotNullOfOrNull(String::toIntOrNull))
}

String?.toBoolean()の厳密版

既存のString?.toBoolean()のケースセンシティブな厳密版を導入する2つの新しい関数が追加されました。

kotlin
fun main() {
    println("true".toBooleanStrict())
    println("1".toBooleanStrictOrNull())
    // println("1".toBooleanStrict()) // Exception
}

kotlin-test ライブラリ

kotlin-testライブラリにはいくつかの新機能が導入されました。

マルチプラットフォームプロジェクトにおけるテスト依存関係の使用の簡素化

これで、commonTestソースセットにテストのための依存関係を追加するためにkotlin-test依存関係を使用でき、Gradleプラグインは各テストソースセットに対応するプラットフォーム依存関係を推測します。

さらに、kotlin-test依存関係は、共有またはプラットフォーム固有の任意のソースセットで使用できます。

明示的な依存関係を持つ既存のkotlin-test設定は、GradleとMavenの両方で引き続き機能します。

テストライブラリの依存関係の設定について詳しく学びます。

Kotlin/JVMソースセットのテストフレームワークの自動選択

Gradleプラグインがテストフレームワークへの依存関係を自動的に選択し、追加するようになりました。必要なのは、commonTestソースセットにkotlin-test依存関係を追加することだけです。

GradleはデフォルトでJUnit 4を使用します。したがって、kotlin("test")依存関係はJUnit 4のバリアント、つまりkotlin-test-junitに解決されます。

kotlin
kotlin {
    sourceSets {
        val commonTest by getting {
            dependencies {
                implementation(kotlin("test")) // This brings the dependency
                                               // on JUnit 4 transitively
            }
        }
    }
}
groovy
kotlin {
    sourceSets {
        commonTest {
            dependencies {
                implementation kotlin("test") // This brings the dependency 
                                              // on JUnit 4 transitively
            }
        }
    }
}

テストタスク内でuseJUnitPlatform()またはuseTestNG()を呼び出すことで、JUnit 5またはTestNGを選択できます。

groovy
tasks {
    test {
        // enable TestNG support
        useTestNG()
        // or
        // enable JUnit Platform (a.k.a. JUnit 5) support
        useJUnitPlatform()
    }
}

プロジェクトのgradle.propertieskotlin.test.infer.jvm.variant=falseの行を追加することで、テストフレームワークの自動選択を無効にできます。

テストライブラリの依存関係の設定について詳しく学びます。

アサーション関数の更新

このリリースでは、新しいアサーション関数が追加され、既存の関数が改善されました。

現在、kotlin-testライブラリには以下の機能があります。

  • 値の型のチェック

    値の型をチェックするために、新しいassertIs<T>assertIsNot<T>を使用できます。

    kotlin
    @Test
    fun testFunction() {
        val s: Any = "test"
        assertIs<String>(s)  // throws AssertionError mentioning the actual type of s if the assertion fails
        // can now print s.length because of contract in assertIs
        println("${s.length}")
    }

    型消去のため、このアサート関数は以下の例でvalueList型であるかどうかのみをチェックし、特定のString要素型のリストであるかどうかはチェックしません: assertIs<List<String>>(value)

  • 配列、シーケンス、および任意のイテラブルのコンテナコンテンツの比較

    構造的同等性を実装していない異なるコレクションのコンテンツを比較するための、新しいオーバーロードされたassertContentEquals()関数のセットがあります。

    kotlin
    @Test
    fun test() {
        val expectedArray = arrayOf(1, 2, 3)
        val actualArray = Array(3) { it + 1 }
        assertContentEquals(expectedArray, actualArray)
    }
  • DoubleおよびFloat数値のためのassertEquals()およびassertNotEquals()の新しいオーバーロード

    2つのDoubleまたはFloat数値を絶対精度で比較できるようにする、assertEquals()関数の新しいオーバーロードが追加されました。精度値は関数の3番目のパラメータとして指定されます。

    kotlin
     @Test
    fun test() {
        val x = sin(PI)
    
        // precision parameter
        val tolerance = 0.000001
    
        assertEquals(0.0, x, tolerance)
    }
  • コレクションと要素のコンテンツをチェックする新機能

    コレクションまたは要素が何かを含んでいるかどうかをassertContains()関数でチェックできるようになりました。これは、IntRangeStringなど、contains()演算子を持つKotlinコレクションや要素で使用できます。

    kotlin
    @Test
    fun test() {
        val sampleList = listOf<String>("sample", "sample2")
        val sampleString = "sample"
        assertContains(sampleList, sampleString)  // element in collection
        assertContains(sampleString, "amp")       // substring in string
    }
  • assertTrue()assertFalse()expect()関数がインライン化

    今後、これらをインライン関数として使用できるため、ラムダ式内で中断関数を呼び出すことが可能になります。

    kotlin
    @Test
    fun test() = runBlocking<Unit> {
        val deferred = async { "Kotlin is nice" }
        assertTrue("Kotlin substring should be present") {
            deferred.await() .contains("Kotlin")
        }
    }

kotlinxライブラリ

Kotlin 1.5.0とともに、kotlinxライブラリの新しいバージョンをリリースします。

Coroutines 1.5.0-RC

kotlinx.coroutines 1.5.0-RCは以下を提供します。

Kotlin 1.5.0以降、実験的なコルーチンは無効になり、-Xcoroutines=experimentalフラグはサポートされなくなりました。

詳細については、変更ログkotlinx.coroutines 1.5.0リリースブログ記事を参照してください。

Serialization 1.2.1

kotlinx.serialization 1.2.1は以下を提供します。

  • JSONシリアライズパフォーマンスの改善
  • JSONシリアライズにおける複数名のサポート
  • @Serializableクラスからの実験的な.protoスキーマ生成
  • その他

詳細については、変更ログkotlinx.serialization 1.2.1リリースブログ記事を参照してください。

dateTime 0.2.0

kotlinx-datetime 0.2.0は以下を提供します。

  • @SerializableなDatetimeオブジェクト
  • DateTimePeriodDatePeriodの正規化されたAPI
  • その他

詳細については、変更ログkotlinx-datetime 0.2.0リリースブログ記事を参照してください。

Kotlin 1.5.0への移行

IntelliJ IDEAとAndroid Studioは、Kotlinプラグインが利用可能になり次第、1.5.0への更新を提案します。

既存のプロジェクトをKotlin 1.5.0に移行するには、Kotlinのバージョンを1.5.0に変更し、GradleまたはMavenプロジェクトを再インポートするだけです。Kotlin 1.5.0への更新方法について学ぶ

Kotlin 1.5.0で新しいプロジェクトを開始するには、Kotlinプラグインを更新し、File | New | Project からプロジェクトウィザードを実行します。

新しいコマンドラインコンパイラは、GitHubのリリースページからダウンロードできます。

Kotlin 1.5.0は機能リリースであり、そのため言語に互換性のない変更をもたらす可能性があります。そのような変更の詳細なリストは、Kotlin 1.5互換性ガイドにあります。