なぜ関数型プログラミングなのか


38

関数型プログラミングとは何ですか?私はそれについて多くのことを話しますが、正直なところ、私はそれらがまったく有用だとは思いませんでした。なぜこれほど多くの大学が彼らに教えているのでしょうか?


6
AIプログラミングで非常に大きい。
アクア

3
@aqua-それはなぜそうなのかという答えではないでしょうか?
マーティンベケット

5
また、従来のオブジェクト指向言語でさえ関数型プログラミングの概念を取り入れ始めていることを指摘したいと思います。Linq(.NETの場合)。
apoorv020

関数型プログラミングはあなたの脳をより運動させ、本当に簡潔なコードにつながる可能性があると思います。とてもクールです。
アデル

2
@ apoorv020:ジェネリック、タプル、ガベージコレクション、...はすべて関数型言語に由来します。
ジョンハロップ

回答:


60

なぜ関数型プログラミングが重要なのかから始めましょう。次に、なぜ関数プログラミングが重要なのかという理由に移ります。いくつかの箇条書き:

  • 関数型プログラミングを使用すると、問題について異なる方法で推論できます
  • 機能の抽象化は非常に強力であり、他のパラダイムでは利用できない方法でコードを乾燥させることができます
  • マルチコアの将来では、関数型言語は同時タスクに分割しやすくなるかもしれません(厳密に関数型ではない言語も問題に懸命に取り組んでいますが)。
  • 純粋な関数型言語(副作用なし)で書かれたプログラムが数学的に正しいことを証明するのは簡単です。

5
+1-これらはすべて優れた点であり、私がやろうとしたことよりも簡潔かつ詳細に説明されています。
jmort253

1
4番目のポイントで、言語が正しいことを証明できる、またはプログラムその言語で書かているということですか?とにかく、不純な言語と不純な言語で書かれたプログラムの両方が正しいことを証明することができます。
ヨルグWミットタグ

1
@JörgW Mittag、言語自体のプロパティについても簡単に推論できます。表示的意味論は関数型言語にとっては取るに足らないものであり、命令型にとっては非常に複雑です。
SKロジック

2番目のリンクが「明示的な」引数をどのように提供するか、1番目のリンクも読んでいないことを知っているのは面白いです。
jokoon

+1:すばらしい答え。箇条書き#1と#2を言葉に付ける方法が特に好きです。
ジムG.

9

関数型プログラミングの概念は、考え方を変え、現実世界の問題を解決するのに役立つ基盤を構築します。

概念は、多変量計算、代数、および/または工学物理学をコンピューターサイエンスの専攻として学ぶ理由に似ていますが、私たちのキャリアではその特定の知識は必要ないかもしれません。

これが、ロースクールが数学の学士号を持つ候補者を愛する理由です。数学を学ぶことは、複数の概念を論理的に考えることを教え、関数型プログラミングは、問題を分解して異なる視点で見るのに役立つ抽象化や他の多くの重要な概念を教えます。

要約すると、関数型プログラミングは学習方法を教えるのに役立ちます。


たぶんそれは本当に名前を必要としませんか?それは単に「正しい」プログラム設計ではありませんか?

4

あなたが始めているとき、関数型プログラミングは最高の思考モデルです。ほとんどのプログラムはオブジェクト指向を必要としないためです。少なくともそれは私の経験でした。

ただし、表示とロジックの分離を必要とするいくつかのアプリにアクセスできるようになったので、すべてのロジックと表示コードの分離を開始し、それぞれが得意なことを簡単に行えるようにしました。

ただし、Functionalを最初にマスターしない限り、なぜそうするのかわかりません。私がオブジェクト指向を私に押しつけるのは好きではありませんでした。使用するアプローチが何であれ、あなたが取り組んでいるものにとって理にかなっており、報酬を得る仕事からあまりにも多くの時間を割くほど学習曲線が急すぎないことを確認してください。


1
+1-仕事に最適なテクニックを使用して指摘することが好きです。それが理にかなっていることを確認してください。
jmort253

1
残念ながら、業界では常識はまれです。私たちはそれぞれまったく異なる経験を持っているため、私たちが犯す間違いが異なるため、私たちはそれぞれ異なる習慣を身に付け、なぜそうするのか...ソース管理を適応させるなど、常に彼ら自身。
crosenblum

「常識は世界で最も公平に分散しているものであり、それぞれが自分に非常に恵まれていると考えているので、他のすべての事項で満足するのが最も難しい人でも、それ以上にそれを望んでいる習慣はありません持ってる。" -デカルト

3

名詞ではなく動詞を強調するからです。重要なのは動詞です。


OOPは名詞を強調します。重要なのは名詞である場合があります。どのように知るのですか?– 偽のジレンマ。システムが停止

3

一般に、同じタスクを実行するために使用するコードが少ないためです。記述するコードが少なく、維持するコードも少なくなります。コードが少ないことに加えて、状態が少ない傾向があるため、(慣れていると)推論するのが少し簡単になります。


だから、それは単に「より良い」の定義ではありませんか?なぜあなたが説明した以外のことをしたいのですか?

2

おそらく大学はすべてのプログラミングパラダイムから何かを教えたいと思っているので、特定の事柄については関数型プログラミングの方が優れています(ゲームキャラクターの動きの説明やアニメーションの説明など)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.