- ベストアンサー
関数型プログラミングの利点は何ですか?
よく「副作用がない」ということが関数型プログラミングのメリットとして挙げられます。 しかし、手続き型プログラミングにおいても、副作用をもたらすモジュール設計は推奨されないと思います。 具体的に何がいいのかわかりません。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
#1 ですが、あなたの補足について言わせてください。 >他の言語の流儀だけを不利な前提で貶めて、それを関数型言語の利点たらしめるという理屈を私は認めることができません。 私自身はそのようなつもりで回答したのではありません。 私は、「よく『副作用がない』ということが関数型プログラミングのメリットとして挙げられ」ることに対して、なぜそれがメリットとされるかという点を答えたつもりでした。 ただ、それが相対的にほかのパラダイムのプログラミング手法を貶めるような書き方になってしまったことは少々反省しております。 また、私は副作用がないことは関数型プログラミングの「メリット」ではなくメリットもデメリットもある「特徴」と考えております。 > というか、大抵のプログラミング言語では、柔軟性を持たせるという意味で非推奨な処理の記述を許しているのが一般的なのではないでしょうか。 > そして、非推奨な記述がなされることを前提にすれば、どんな言語でもメチャクチャになるのは至極当然です。 こちらは全くその通りだと考えます。 ただし、ある記述が禁止されているか非推奨か何でもないかは言語によって変わっております。 それゆえ、ある言語でコーディングするからにはその言語のパラダイムにあったコーディングをすべきであると私は考えます。 今回の場合は、関数型言語では副作用がない以上それを受け入れるべきであり、手続き型言語では副作用がありうる以上それを意識したコーディングをすべきでしょう。
その他の回答 (1)
- hitomura
- ベストアンサー率48% (325/664)
あなたの質問にその答が隠れています。 > 手続き型プログラミングにおいても、副作用をもたらすモジュール設計は推奨されない の「推奨されない」の一文が問題で、副作用がないように設計・コーディングすると決めたとしてもそれを簡単に破ることができます。これは意図的なものとも限らず、またチームで開発し互いにソースレビューを行うとしてもレビューでの見逃しは起こりえます。 したがって、言語仕様として > 「副作用がない」ということ を保障/強制されることが > 関数型プログラミングのメリット の一つとなります。
補足
手続き型言語で一般に推奨されないコーディングをなされることがあるのは確かです。 しかし、それは関数型言語でも同様でしょう。 というか、大抵のプログラミング言語では、柔軟性を持たせるという意味で非推奨な処理の記述を許しているのが一般的なのではないでしょうか。 そして、非推奨な記述がなされることを前提にすれば、どんな言語でもメチャクチャになるのは至極当然です。 他の言語の流儀だけを不利な前提で貶めて、それを関数型言語の利点たらしめるという理屈を私は認めることができません。
お礼
関数型言語は特徴的であるというだけで、他と比べて明確なメリットがあるわけではなさそうですね。 まあ、場合によっては強力ということになるのは確かですが。 一部で異様に人気のある言語ですが、私はそこまで魅力を感じません。 関数型言語を盲目的にべた褒めする連中はカルトでしょう。