いくつかまとめて反論したい
まず最初に言っておきたいけれども、僕自身はHaskellが大好きな関数型言語大好き人間である、ということを先に述べておきたい、それを踏まえた上で以下をお読みいただきたい
最初の「オブジェクト指向 v.s. 関数型プログラミング」や「ふたつのアプローチの比較」はまあ問題ないかなぁという感じ、問題があれば他の誰かに任せます
問題は「関数型プログラミングの利点」と「関数型プログラミングの得意分野はなにか」
まず「関数型プログラミングの利点」だけれども、ファンクタが云々、モナドが云々、これは「関数型言語の話」ではなく「Haskellの話」である
そこを引いてあくまでHaskellの話だと割りきって見たとしても、「たとえばモナドを知っていれば、30分程度でパーサー(解析機)を理解することができて」? モナドはそんな限定的用途のものではないし、パーサの理解とは無関係だ(単にライブラリの設計の問題)。それにApplicativeスタイルのほうがパーサが書きやすいという人もいるだろう、パーサの理解にモナドの知識はあまり関係がないと言っても差し支えないのではないか
「書きやすい」に関してはこれはもう「主観の問題だよね」以上の言い様がない、僕自身はC++とHaskellの両方を書く人間で、確かにC++Hakellの方が「短く書ける」と「感じる」ことは多い、がしかしそれはあくまで個人の主観であり、更にはなにか明確な基準を取ったとして、やはりこれは「関数型言語」ではなく「Haskell」の話である、わかりやすく言えば「関数型言語であるLispを僕は読み書きできない」、特定言語の、主観に大きく左右される特徴を関数型言語一般の話であるかのように敷衍して話すのは感心できない
「静的型付け」云々もこれはもう完全にHaskellやOCamlの話である、LispやErlangとは何だったのか
多くの数値計算アルゴリズムは逐次的に定義されている、関数型言語で扱いやすいものではない、簡単にいえば「それFortranの前でも言えるの?」である
遅延評価はこれまたHaskellの特徴であり関数型言語一般の特徴ではないし、別に他の非関数型言語でエミュレートできないものでもない、更に言えばこれが何か数値計算に対して有利な何かをもたらすかといえばそういうわけでもない
「分数や虚数が扱えます」、に至ってはむしろ近頃の言語で扱えない言語何かあるんですか、である、大抵の言語にはその手のライブラリはある、関数型言語に限った話ではない
お前それShellやPerl、RubyやPythonの前でも言えるの?
この手の話は「ライブラリ」の話になり、言語パラダイムにより議論されるべき問題ではない、もちろん自動並列化などの問題で数学モデルに基づいていることが多いHaskellなどは有利かもしれない、が、やはりそれは特定言語や特定のライブラリの話になり、関数型言語一般の話ではない、並行処理の扱いにくい関数型言語の設計など容易だろう
言語の話でも言語パラダイムの話でもライブラリの話でもない、個人の技量の話だろう、関数型言語でも下手にしか書けない人は上手には書けない
GUIライブラリの設計にもよるけど、GUIってOOPの強い分野だと認識していたのだけれど、さてはて
最後に要点をまとめると
近年、関数型プログラミングの重要性はいろんなところで叫ばれています。 Javaの最新バージョンに関数型プログラミングに関する新機能が加わりました。 Rubyも昨今、関数型プログラミ...
いくつかまとめて反論したい まず最初に言っておきたいけれども、僕自身はHaskellが大好きな関数型言語大好き人間である、ということを先に述べておきたい、それを踏まえた上で以下を...
id:minamiyama1994 さん、反論してくださってありがとうございます。 Haskellファンのご意見がいただけて嬉しいです。元増田です。 記事全体で「関数型言語」と呼ばれているものは「関数型...
君数値計算やったことないでしょ? なんか「金融でHaskell使われてる」って聞いた!金融!数字の計算!数値計算だ!!!お金の計算だから厳密だ!!! くらいの中学生的なノリを感じ...
すごいわかる。会計スタートアップのエンジニアが凄いみたいな謎の説とかも同じ。
えへへ。
キミさ、大きなプログラム完成させたことある? プログラムに行き詰まって 「自分に作れないのはオブジェクト指向が駄目なせいだ、関数型ならできるはず」 って言ってる人に見える...
大きなってどれくらいを指してるのか分からないけど、実際、ざっくり汚いコードで書いても関数型はコード量半分で済むよ。 1万行書くのは無理って感じても、5千行なら届かなくは...
コード量でプログラムを測るなとあれほどお母さんに叱られたの、まだ分かってないの!?
もちろんですとも。 オブジェクト指向が駄目なせい ところでご意見を聞きたいのですが、私自身は記事でオブジェクト指向をディスったつもりは無いんですが、そのように読めました...
うん。 オブジェクト指向は初心者向け、複雑じゃないシステム向けって書いてあるじゃん。 複雑な問題をプログラムにすっきり落としこむのはスキルの問題であって、関数型とオブジ...
あ、短く書ける云々での「C++」は「Haskell」のtypoです(たまにこの手のアホなtypoやらかす)、失礼しました
なんだよ。 ガチの人はC++で短いコード書けるのかと思って驚いてたのに。
元増田です。 確かに文脈をよく読むと、C++では不自然ですね。 こちらこそ読めていなくて、失礼しました。
だから数値計算が得意とか適当こいてんじゃねーよ。 金融で使われてるのはデリバティブの合成が記述しやすいからだろうが。 数値計算が得意とか言うならゲーム機でも動く高速・高効...
関数型言語ユーザは「信者」なんだってことはよくわかりました
だな。Emacs Lispの頃からこんな奴らばかり。
オブジェクト指向 v.s. 関数型プログラミング http://anond.hatelabo.jp/20140409010816 数値計算が得意とか言うならゲーム機でも動く高速・高効率なGIレンダラとか流体シミュレータとかの実用的...
Haskellの話を関数型言語一般の話みたいに敷衍して話すのやめてもらえませんかねぇ(困惑)
ベースはオブジェクト指向で書いて、 ちょっと便利になるところだけ関数型にするのがプログラマにとっては理想なんじゃないかなぁ・・・
F#!
内容読んでないけど、とりあえずオブジェクト指向と関数型プログラミングが両方そなわり最強に見えるScalaを使えばいいと思う。
どうぞ 関数型料理 http://blog.practical-scheme.net/shiro/20140129-functional-cooking プログラミング言語の基礎知識 http://d.hatena.ne.jp/lemniscus/20100701/1277990423 関数型とオブジェクト指向という一見相...
オブジェクト指向って、オブジェクト内部にミュータブルな状態を保持してる、ってのが本質の1つなんじゃないのかなー。 内部状態がイミュータブルなオブジェクトだけ使ってたら、...
コストを気にしなければオブジェクトを変更する代わりにそのつど新しいオブジェクトを生成するという手があるので オブジェクト指向の「本質」とまでは言えないのでは。 オブジェク...
できるだけイミュータブルにすべき、だと関数型でいいじゃんってなるよね。 多態とかはHaskellでもClojureでもできるし。
元増田です。読んでくださってありがとうございます。 2つ目の記事は初見です。面白そうですね…あとでじっくり読みます。 実は元記事の「レシピ」の項は、「関数型料理」にインス...