関数型プログラミングとは
数学でよく使われる関数と同じ同じ入力に対して同じ出力が保証されている
– これを参照透過性という
これらを組み合わせてプログラムを書いていくことを関数型プログラミングという
プログラミングの種類
プログラミングの種類は以下のように分類される.
- 命令型プログラミング
- 手続き型プログラミング
- オブジェクト指向プログラミング(今はほとんどこっち)
- 宣言型プログラミング
- 例:SQL(どんなデータが欲しいかを宣言する)
SQLはあくまでDB問い合わせを行うものであり,これ単体ではプログラムとしては機能しない.
このような場合に関数型プログラミングという方法で解決する
関数型プログラミングの特徴
- プログラムの不変性
- イミュータブルな(作成後に状態を変更することが出来ない)オブジェクトを組み合わせている
- 「不変」,つまりは一部プログラムの書き換えといった変更によって引き起こされるバグ(副作用)の発生が低いので安全性が高い
- 文ではなく式を組み合わせる
- 文とはfor文やif文といった処理のこと
- 式とは関数やメソッドのこと
- 入力-出力がはっきりしているため,式を組み合わせて構成したコードの方がよりシンプルになる
- トップダウンな構成
- 宣言型だと1から組み上げるイメージ(ボトムアップ)
- 例)SQLで問い合わせ文を1から組み上げる,for文を使って配列を探索する等
- 関数型だと完成している状態から一つずつ分解していって大雑把なところから実装するイメージ(トップダウン)
- 例)既存の関数を使ってDBに問い合わせる,既存の関数を使って配列を探索する等
- 宣言型だと1から組み上げるイメージ(ボトムアップ)
関数型プログラミングの言語例
基本的にはどのようなプログラミング言語でも関数型プログラミングは実現可能である.
ただ言語の中には,全ての関数が参照透過性をもつ言語も存在する.
これを「純粋関数型プログラミング言語」という.
有名どころでいうと,
- Scala
- Haskell
- LISP
- Erlang
…
あたりだろうか.
もっと関数型プログラミングについて知りたい方へ
関数プログラミング実践入門 ──簡潔で、正しいコードを書くために
コメント