Kotlin 2.0 で Explicit backing fields (Experimental) を使う

ふと思い出して、DroidKaigi 2024 で Masayuki Suda さんが発表された Kotlin 2.0 が与える Android アプリ開発への進化のお話がそれだった。

speakerdeck.com

例えば Android の ViewModel で UiState を宣言するような場面で以下のように書くことができる。

// Before
private val _uiState = MutableStateFlow(UiState<Something>())
val uiState = _uiState.asStateFlow()

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

宣言をしているクラス内では MutableStateFlow、外部からは読み取り専用の StateFlow として見えながら、どちらからも uiState の名前で参照することができる。

youtu.be

この機能は Kotlin 2.2 に予定されているが 2.0 でも Experimental で使うことができ、次の設定を build.gradle に加えることで有効になる。

kotlin {
    sourceSets.configureEach {
        languageSettings.enableLanguageFeature("ExplicitBackingFields")
    }
}

さらに Android Studio の Settings で Enable K2 mode にもチェックを入れておく。

これを入れなくともビルドは通るが、赤いエラーの表示は出てしまう。

参考