
「手動マッピング(命令型)」か、「DSLマッピング(宣言型・型安全)か」
ということなります。
これまで:
when 式などを使って、ルートごとに手動でインスタンスを生成・紐付けするスタイル。自由度は高いですが、記述量が増えやすく、型の不整合も起きがちです。
DSL形式:
entry
🤔 比較してみる
entryProvider = { key ->
when (key) {
is RouteA -> NavEntry(key) { ... }
is RouteB -> NavEntry(key) { ... }
else -> error()
}
}
- key は Any
- Any → is チェック必須
- 毎回 is RouteB などの分岐が必要
entryProvider = entryProvider {
entry<RouteA> { ... }
entry<RouteB> { key ->
Text(key.id)
}
}
- key は 型付き (RouteB)
- 分岐不要
- entry
→ コンパイル時保証
🤔 まとめ

NavDisplay
└ entryProvider (lambda)
└ when(key)
├ RouteA → NavEntry + UI
├ RouteB → NavEntry + UI
└ else → error
NavDisplay
└ entryProvider (DSL)
├ entry<RouteA> { UI }
└ entry<RouteB> { key -> UI(key.id) }
DSLは便利だが、抽象化が増えるため「内部の仕組み」が見えにくい感じに思います。
Related Categories : Android・Developmemt・JetpackCompose・Kotlin・Newbie