IT用語
(
ひよぺん
)
Home
コラム
用語集
About
検索
Ctrl K
Esc
見つかりませんでした
調べたいIT用語を入力してね
関数型プログラミング
かんすうがたぷろぐらみんぐ
プログラミング
用語集
› 💻 プログラミング › 関数型プログラミング
【かんすうがたぷろぐらみんぐ】
関数型プログラミング とは?
最終更新:
2026年3月24日
💡 「状態を変えない」関数の組み合わせでプログラムを作る
📌 このページのポイント
純粋関数
(同じ入力に同じ出力、
副作用
なし)が基本
不変性(immutability)でデータの変更を防ぐ
map/filter/reduceなどの
高階関数
でデータを変換
Haskell
、Elm が
純粋関数
型、
TypeScript
/
Python
はマルチパラダイム
関数型プログラミングの特徴
純粋関数
入力: 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)のように、入力から出力を生成する「関数」を中心に組み立てるよ
🔗 あわせて読みたい
オブジェクト指向 とは?
プログラミング とは?
TypeScript とは?
📝 この用語に関連するコラム
📝
【図解で比較】オブジェクト指向 vs 関数型プログラミング — 2大パラダイムの違いを徹底解説
シェアする
X
URLコピー
← 用語集にもどる