オブジェクト指向と何が違うの?
オブジェクト指向は「データと振る舞いをオブジェクトにまとめる」、関数型は「データの変換を関数で記述する」。オブジェクト指向はオブジェクトの状態を変更する(ミュータブル)が、関数型は状態を変更せず新しいデータを返す(イミュータブル)。現代は両方の良いところを使うマルチパラダイムが主流だよ
不変性って何がいいの?
データが変わらないから、「いつの間にか値が変わっていた」バグが起きない。マルチスレッド環境でも競合状態が発生しない。Reactの状態管理で「stateを直接変更せずsetStateで新しいオブジェクトを作る」のも不変性の考え方。デバッグしやすく、テストもしやすいんだよ
実務でどう活かす?
①配列操作にmap/filter/reduceを使う(forループより宣言的)、②const推奨でletを減らす、③Object.freezeやimmerで不変性を確保、④純粋関数でビジネスロジックを書く(テストしやすい)。全てを関数型にする必要はなく、「副作用を分離する」意識だけでもコード品質は上がるよ
関数型が向いている場面は?
データ変換パイプライン(ETL処理)、並行・並列処理、状態管理(Redux)、コンパイラ・インタプリタ。Reactのフック(useState、useEffect)も関数型の考え方を取り入れている。一方、GUIやI/O処理は本質的に副作用を伴うから、完全な関数型よりマルチパラダイムが実用的だね