1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Kotlin 2.4.0でAndroidエンジニアが知っておきたい変更点まとめ

1
Posted at

はじめに

Kotlin 2.4.0がリリースされました!

そこで本記事では、Kotlin 2.4.0で追加・Stable化された変更点のうち、Android開発で利用機会がありそうなものを中心に紹介します。

Kotlin/Native、Wasm、Swift Exportなど、Android開発では利用機会が少ないものは割愛しています。

1. Context ParametersがStable化

Kotlin 2.4.0では、Context ParametersがStableになりました。

これまではExperimentalだったため実務での採用には慎重になる必要がありましたが、今後はライブラリやフレームワーク側でも採用が進む可能性があります。

従来

class Logger

fun printLog(logger: Logger) {
    // ...
}

Kotlin 2.4.0

context(logger: Logger)
fun printLog() {
    // ...
}

依存するオブジェクトを毎回通常の引数として渡さずに、関数が必要とするコンテキストとして定義できます。

Androidアプリですぐに置き換える場面は多くないかもしれませんが、DIやCompose向けライブラリなどで利用される可能性があります。

2. Explicit Backing FieldsがStable化

Kotlin 2.4.0では、Explicit Backing FieldsがStableになりました。

Android開発では、ViewModelでMutableStateFlowを内部に保持し、StateFlowとして外部公開する実装をよく使います。

従来

private val _uiState = MutableStateFlow(UiState())
val uiState: StateFlow<UiState> = _uiState

Kotlin 2.4.0

val uiState: StateFlow<UiState>
    field = MutableStateFlow(UiState())

外部にはStateFlowとして公開しつつ、内部ではMutableStateFlowとして扱えます。

_uiStateuiStateの2つのプロパティを定義する必要がなくなるため、ViewModel周りのボイラープレートを減らせます。

今回の変更の中では、Android開発で特に利用機会が多そうな機能です。

3. UUID APIがStable化

UUID APIがStableになりました。

import kotlin.uuid.Uuid

val id = Uuid.random()

UUIDをKotlin標準ライブラリのAPIとして扱えるようになります。

Androidではjava.util.UUIDを利用することも多いため、すぐに大きく実装が変わるわけではありませんが、マルチプラットフォームを意識したコードでは使いやすくなりそうです。

なお、UUID v4やUUID v7に関する一部APIは、引き続きExperimentalです。

4. Map Fallback Functionsが追加

nullableな値を持つMap向けに、Fallback Functionsが追加されました。

従来のMapアクセスでは、次の2つを単純な取得結果だけでは区別できません。

  • キーが存在しない
  • キーは存在するが値がnull
val map = mapOf(
    "name" to null
)

val value = map["name"]

この場合、取得結果はnullになります。

Kotlin 2.4.0で追加されたFallback Functionsを利用することで、キーが存在しない場合の処理を明示しやすくなります。

APIレスポンスや設定値など、nullと未設定を区別したい場面で役立ちそうです。

5. Collection Literalsが追加

Collection LiteralsがExperimentalとして追加されました。

従来は次のように記述していました。

val list = listOf(
    "A",
    "B",
    "C"
)

Collection Literalsでは、次のような記法を利用できます。

val list = ["A", "B", "C"]

配列やコレクションを簡潔に記述できるようになります。

ただし、Kotlin 2.4.0時点ではExperimentalです。

実務で積極的に採用する段階ではありませんが、今後のKotlinの記法に影響しそうな変更として押さえておいてよさそうです。

6. Sorted APIが追加

コレクションがソート済みかどうかを判定するAPIが追加されました。

list.isSorted()

list.isSortedDescending()

list.isSortedBy(User::age)

従来は、ソート後のコレクションと比較する方法などが使われていました。

list == list.sorted()

専用APIが追加されたことで、処理の意図が分かりやすくなります。

利用頻度はそれほど高くないかもしれませんが、入力値の検証やテストコードでは使いやすそうです。

7. その他の変更

Android開発に関連しそうな変更として、次のようなものがあります。

  • Java 26への対応
  • Annotation Metadataのデフォルト有効化
  • Gradle 9.5への対応

日常的なアプリコードに直接影響する変更ではありませんが、ビルド環境やライブラリ開発では確認しておきたい内容です。

まとめ

Kotlin 2.4.0では、既存のコードを大きく変える機能というより、Kotlinの記述を整理しやすくする変更が多く含まれています。

Android開発で特に利用機会が多そうなのは、次の機能です。

  • Explicit Backing Fields
  • Context Parameters
  • UUID API
  • Sorted API

特にExplicit Backing Fieldsは、ViewModelでStateFlowを扱うコードを簡潔にできるため、Androidエンジニアにとって影響の大きい変更になりそうです。

Collection LiteralsのようにExperimentalの機能も含まれているため、Stableな機能と分けて確認しながら利用するのがよさそうです。

さいごに

毎日暑すぎるので、熱中症にはお気をつけください…!

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?