Upgrade to Pro — share decks privately, control downloads, hide ads and more …

なぜ宣言的 UI は壊れにくいのか / Why declarative UI is less ...

Ueni
July 14, 2024

なぜ宣言的 UI は壊れにくいのか / Why declarative UI is less fragile

Zli × サイバーエージェント 合同LT 2024/07/14
https://zli.connpass.com/event/319572/

ReactやSwiftUIのような宣言的UIの「原理」を、10分のLTになんとか詰め込んでみました。
Reactフックは名詞起点 = オブジェクト指向を促す設計になってるよねって話とか。
まあ促しているというよりは、そもそもオブジェクト指向UIの原則を「グラフィック」によって適用したものがGUIなので、必然的に行き着く先ではあるんですが。

モードレスについての重要な資料 : https://www.sociomedia.co.jp/10046

---

(要約)

宣言的 UI とは、取りうる「視覚状態」を記述するように実装された UI のこと。命令的 UI とは、「変化」を細かく管理するように実装された UI のこと。宣言的 UI は、UI 要素や操作方法を追加・変更しても他の既存実装が壊れにくく、システムが将来的に大規模化したり複雑になっても壊れにくいといわれている。

なぜ宣言的 UI は壊れにくいのか?命令や手続きは「モード」を発生させる。モードとは、辞書的な意味では、1. 方法。型。2. 同じ入力でも他の設定の場合とは異なる結果を生じる設定。また、モードがあることを「モーダル」いい、モードがないことを「モードレス」という。モードは「モードエラー」を引き起こす。例えば、命令的 UI が変更時に矛盾を抱えて壊れることはモードエラーに相当する。一方、宣言的 UI は前の状態に関わらず次の視覚状態が決まるためモードレスであり、モードエラーがなく、変更時に壊れにくい。「宣言的」という概念の本質は「モードレスネス」である。

モードレスにするコツは「名詞」起点、すなわちオブジェクト指向。例えば、React は開発者がオブジェクトを指向するように「目当てになる有用な概念か?」「メンタルモデルと一致する粒度か?」という検討を随所で促す設計になっている。React フックは「オブジェクト(名詞)を宣言する」ものであって、「ロジック(動詞)を切り出す」ものでは決してない。

Ueni

July 14, 2024
Tweet

More Decks by Ueni

Other Decks in Programming

Transcript

  1. 命令的 UI が壊れる様子 function handleClick() { if (isOn) { 取っ手を左へ移動する();

    色をグレーに変更する(); } else { 取っ手を右へ移動する(); 色をブルーに変更する(); } }
  2. 例:React フックは「名詞」起点を促す設計 const 名詞 = use名詞(); 動詞は固定なので、開発者は「起点にふさわしい名詞」を考えることになる 目当てになる有用な概念か? メンタルモデルと一致する粒度か? ※

    例えば useState は "State" を返すし、useEffect は "Effect" を返す ※ React フックは「オブジェクト(名詞)を宣言する」ものであって、「ロジック(動詞)を切り出す」ものでは決してない