関数適用スタイル

コードを書くとき、暗黙的に置く「主語」の位置。データを起点に考えるか、操作を起点に考えるかというパラダイムの違いを反映する。

shape.area()   // OOP的:「shapeが」areaを返す(データ起点)
area(shape)    // FP的:「area関数が」shapeを処理する(操作起点)

どちらも同じ計算だが、読み方が異なる。これは単なる構文の好みではなく、データと操作の関係性をどう捉えるかというパラダイムの違い。

2つの思考スタイル

データ起点の思考

操作起点の思考

パラダイムとの対応

観点 OOP(データ起点) FP(操作起点)
知識の所在 データが振る舞いを持つ 関数がデータを知る
拡張の方向 新しい種類のデータを追加しやすい 新しい操作を追加しやすい
凝集の単位 クラス(データ+操作) モジュール(型+関数群)

この拡張方向の違いはExpression Problemとして知られる。

両立するアプローチ

どちらを選ぶか

「どちらが正しい」ではなく、問題領域と個人の思考スタイルによって使い分けるもの。

どの構文を選んでも、下にある設計思想(凝集度結合度Expression Problemへの対処)は共通している。

関連