萌えハッカーニュースリーダー

2025/10/25 14:33 UIs Are Not Pure Functions of the Model – React.js and Cocoa Side by Side (2018)

出典: https://blog.metaobject.com/2018/12/uis-are-not-pure-functions-of-model.html
hakase
博士

やあ、ロボ子。今日のITニュース、ReactとCocoaのUI設計思想の違いについてだって。興味深いテーマじゃな。

roboko
ロボ子

博士、こんにちは。ReactとCocoaですか。どちらもUIを構築するためのフレームワークですが、何が違うのでしょうか?

hakase
博士

Reactは、UIを「データのある形式から別の形式への投影」と捉えるのじゃ。つまり、データが変わればUIも変わるという考え方だぞ。

roboko
ロボ子

なるほど。Cocoaの場合はどうなのですか?

hakase
博士

Cocoaは、MVCモデルに基づいているから、「データのある形式から画面上のビットへの投影」と考えるのじゃ。画面に表示されるものが最終的な形、という感じかの。

roboko
ロボ子

少し違うのですね。ReactではUIを再利用可能な部品に抽象化するとありますが、Cocoaではどうでしょうか?

hakase
博士

Cocoaでは、再利用可能な部品はオブジェクトで、クラスにグループ化されるのじゃ。UIを表すオブジェクトは「ビュー」と呼ばれるぞ。

roboko
ロボ子

ビュー、ですね。Reactでは複数の抽象化を組み合わせて新しい抽象化を構築するとありますが、具体的にはどういうことですか?

hakase
博士

例えば、ボタンとテキストフィールドを組み合わせて、検索バーを作ったりすることじゃな。Cocoaでも、NSScrollViewやNSTableViewsなどが、複数の部品を組み合わせて構成されているぞ。

roboko
ロボ子

なるほど、部品の組み合わせですね。Reactでは、UIはサーバーやビジネスロジックの状態の複製ではないとありますが、これはどういう意味ですか?

hakase
博士

UI固有の状態を持つということじゃ。例えば、ボタンがクリックされたかどうか、とかじゃな。Cocoaでは、ビューオブジェクトがUI固有の状態を提供するぞ。

roboko
ロボ子

UIが状態を持つ、ということですね。Reactでは、純粋な関数を繰り返し呼び出すのは無駄であるため、メモ化を使用するとありますが、Cocoaではどうでしょうか?

hakase
博士

Cocoaでは、UIがモデルの純粋な関数であるという前提を立てないのじゃ。UIの安定性を維持するために、状態を保持したり、イベントを処理したりするぞ。

roboko
ロボ子

安定性を重視しているのですね。Reactでは、リスト内の各アイテムの状態を管理するためにMapを使用するとありますが、Cocoaではどうでしょうか?

hakase
博士

Cocoaでは、階層的なビューモデルがリストの処理を自動的に行うのじゃ。データの変更を監視して、UIを更新してくれるぞ。

roboko
ロボ子

自動的に行うのですね。Reactでは、ボイラープレートを削減するために、関数の実行を遅延させる(カリー化)とありますが、これはどういうことですか?

hakase
博士

カリー化は、関数に引数を少しずつ与えて、最終的な結果を得るテクニックじゃ。Reactでは、状態の抽出と受け渡しを低レベルの関数に移動して再利用するのじゃ。

roboko
ロボ子

なるほど。Reactでは、メモ化を容易にするために、ツリー構造を利用してメモ化キャッシュを渡すとありますが、これはどういうことですか?

hakase
博士

Reactのコンポーネントはツリー構造になっているから、親コンポーネントから子コンポーネントへ、メモ化された値を効率的に渡せるのじゃ。

roboko
ロボ子

効率的なんですね。Reactでは、抽象化のレベルを超えてデータを渡すために、コンテキストを使用するとありますが、Cocoaではどうでしょうか?

hakase
博士

Cocoaでは、UIが状態を持つオブジェクトの階層であるため、必要なコンテキストを親、兄弟、子供に問い合わせることができるのじゃ。

roboko
ロボ子

問い合わせることができるんですね。記事では、UIがモデルの純粋な関数であるという考え方は、多くの問題を引き起こす可能性があるとありますが、なぜですか?

hakase
博士

UIが複雑になると、状態管理が難しくなるからじゃ。FacebookやInstagramのフィードアプリケーションでは、表示が主にフィードからのデータによって決定されるため、この考え方が適用しやすいとあるぞ。

roboko
ロボ子

なるほど。React.jsとReact Nativeは、ネイティブ開発の分野で存在感を増しているとありますが、今後の展望はどうでしょうか?

hakase
博士

Dan Abramovは、Reactコンポーネントは常に厳密な意味で「純粋」ではないと述べているのじゃ。ローカルの状態と副作用のサポートは、Reactコンポーネントのコア機能だから、ますます発展していくじゃろうな。

roboko
ロボ子

勉強になりました。ありがとうございました、博士。

hakase
博士

どういたしまして。しかし、ReactとCocoaの違いを語るなんて、まるでリンゴとミカンの違いを議論するみたいじゃな。どっちも美味しいけど、好みは人それぞれ、ってことで!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search