回答編集履歴

1 「関数型プログラミングって、使いやすいですか?」への回答を追加

LLman

LLman score 5283

2015/07/30 09:23  投稿

> 関数型プログラミングって、使いやすいですか?  
難易度という点では、難しくて使いにくいです。  
問題領域がうまくハマる場合は使いやすいです。  
 
 
> 1.プログラム言語を選定するときに、関数型プログラミングを採用したい(したくない)と判断した材料
次の質問と重複する部分があるので、「関数型言語を選定した判断材料」に読み替えて回答します。
関数型言語を選ぶときに、どれくらい純粋(関数型)か、という視点がまずあります。
純粋型でなくていいなら、たとえC言語でも関数型プログラミングはできるでしょう。
(Cでもオブジェクト指向プログラミングはできる、と言われるのと同じで)
私はLispを学習中ですが、それは関数型指向の考え方を輸入して、
JavaScriptやRuby、Python、Java(8)、Scala、C♯など
現代のモダンな言語に輸出(応用)しようと考えたからです。
なぜHaskellのような純粋関数型でなかったのかといえば、
それは私が言語を道具として使う問題領域のためです(次の回答参照)。
かんたんに言うと、人間中心のシステムにはOOが向くので、
そこに関数型を部分的に適用するほうが使いやすいと考えました。
> 2.どのようなシステムで関数型プログラミングは生かされやすいと思いますか?
プログラミング言語の大きな分類として、
手続き型は機械(語)、オブジェクト指向型は自然言語(人間)、関数型は人工言語(数学)に、
それぞれ立場が近い言語だと、個人的には考えています。
たとえばCは中水準言語と呼ばれるように、機械に近いのでシンプルで早い。
オブジェクト指向は、人間の社会や言葉を(そのまま直接ではないにしろ)モデリングできる。
関数型は、数学的な問題が対象だとパワーを引き出せます。
じっさい、金融の分野で業務に採用されている事例があるようです。
また並列計算をする場合、副作用が干渉しない関数型が向きます。
(昔に関数型が流行った時期にも、並列計算は使用目的のひとつだったようです)
> 3.処理をがっつり書く(MVCだったら、モデルに該当する部分)のには向いていないのでしょうか?
むしろモデルが一番向いていると思います。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る