Open1

2.シールドクラスを使って画面を管理

るるすたるるすた

sealed classを使うと・・・?

  • Screen.Home.route のように 安全に画面遷移先を参照できる
  • 必要があれば、他のプロパティや関数を各画面ごとに追加可能
  • when(screen)で使えば、網羅チェック(全パターンを使ってるか)もOK

🔁 enum class との違い

項目 sealed class enum class
拡張性 高い!各画面にプロパティや関数を追加できる 固定された値+共通プロパティだけ
継承 abstract class を継いだみたいに柔軟 継承不可
表現力 各画面にroute以外の情報(タイトルやアイコン)なども定義できる val しか使えない。条件が増えると辛くなる
使用場面 画面や状態など中身に差があるもの 色、曜日、性別など固定セットのカテゴリ

具体例:sealed class の強み

sealed class Screen(val route:String) {
    object Home: Screen("home")
    object Drill: Screen("drill")
    object Drawing: Screen("drawing")
    object Profile: Screen("profile")

    @Composable
    fun displayName(): String = when (this) {
        Home -> stringResource(R.string.home_jp)
        Drill -> stringResource(R.string.drill_jp)
        Drawing -> stringResource(R.string.drawing_jp)
        Profile -> stringResource(R.string.profile_jp)
    }

    fun emoji(): String = when (this) {
        Home -> "\uD83C\uDFE0"           // 🏠
        Drill -> "\uD83E\uDD2E"          // 🧮
        Drawing -> "\uD83D\uDD8D\uFE0F"  // 🖍️
        Profile -> "\uD83D\uDE4B"        // 🙋
    }
}

これ、enum class では無理なんだよね😢
whenでthisを使ってロジックを分けたり、オブジェクトごとに独自プロパティを持てるのは
sealed classの特権✨

結論(ふうこのおすすめ)

目的 おすすめ
遷移先の画面を表す ✅ sealed class(画面によって違う情報が出てくるから)
固定の選択肢(色、性別など) ✅ enum class(軽くて簡単)