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(軽くて簡単) |