【かんすうがたぷろぐらみんぐ】

関数型プログラミング とは?

💡 「状態を変えない」関数の組み合わせでプログラムを作る
📌 このページのポイント
関数型プログラミングの特徴 純粋関数 入力: x=3 f(x)=x*2 出力: 6 同じ入力 → 常に同じ出力 副作用なし (外部状態を変更しない) 可変 vs 不変 {'let x = 1;'} {'x = 2; // 変更可'} {'const x = 1;'} {'// 変更不可 ✓'} 不変データで安全性を確保 新しいデータを作って返す データ変換パイプライン {'[1,2,3,4,5]'} 配列 map x*2 filter {'x > 4'} reduce 合計 {'[2,4,6,8,10]'} {'[6,8,10]'} → 24 各ステップで新しいデータを生成(元データは不変)
関数型プログラミングの特徴
ひよこ ひよこ

オブジェクト指向と何が違うの?

ペンギン先生 ペンギン先生

オブジェクト指向は「データと振る舞いをオブジェクトにまとめる」、関数型は「データの変換を関数で記述する」。オブジェクト指向オブジェクトの状態を変更する(ミュータブル)が、関数型は状態を変更せず新しいデータを返す(イミュータブル)。現代は両方の良いところを使うマルチパラダイムが主流だよ

ひよこ ひよこ

不変性って何がいいの?

ペンギン先生 ペンギン先生

データが変わらないから、「いつの間にか値が変わっていた」バグが起きない。マルチスレッド環境でも競合状態が発生しない。React状態管理で「stateを直接変更せずsetStateで新しいオブジェクトを作る」のも不変性の考え方。デバッグしやすく、テストもしやすいんだよ

ひよこ ひよこ

実務でどう活かす?

ペンギン先生 ペンギン先生

配列操作にmap/filter/reduceを使う(forループより宣言的)、②const推奨でletを減らす、③Object.freezeやimmerで不変性を確保、④純粋関数でビジネスロジックを書く(テストしやすい)。全てを関数型にする必要はなく、「副作用を分離する」意識だけでもコード品質は上がるよ

ひよこ ひよこ

関数型が向いている場面は?

ペンギン先生 ペンギン先生

データ変換パイプライン(ETL処理)、並行・並列処理、状態管理(Redux)、コンパイラ・インタプリタ。Reactのフック(useState、useEffect)も関数型の考え方を取り入れている。一方、GUIやI/O処理は本質的に副作用を伴うから、完全な関数型よりマルチパラダイムが実用的だね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「関数型プログラミング」って出てきたら「純粋関数と不変データでプログラムを書くスタイル」と思えればだいたいOK!
📖 おまけ:英語の意味
「Functional Programming」 = 関数型プログラミング
💬 数学の関数(f(x)=y)のように、入力から出力を生成する「関数」を中心に組み立てるよ
← 用語集にもどる