関数型プログラミングの利点は何だと思いますか?そして、彼らは今日のプログラマーにどのように適用しますか?
関数型プログラミングとOOPの最大の違いは何ですか?
関数型プログラミングの利点は何だと思いますか?そして、彼らは今日のプログラマーにどのように適用しますか?
関数型プログラミングとOOPの最大の違いは何ですか?
回答:
関数型プログラミングのスタイルは、取得する方法ではなく、必要なものを記述することです。つまり、イテレータ変数を使用してforループを作成し、配列を介して各セルに何かを行うのではなく、「このラベルは、この関数がすべての配列で実行されているこの配列のバージョンを指します。要素。」
関数型プログラミングは、より基本的なプログラミングのアイデア、リスト内包表記やキャッシングなどのアイデアをコンパイラに移します。
関数型プログラミングの最大の利点は、コードがより簡潔になるため、簡潔さです。関数型プログラムはループの中心となる反復子変数を作成しないので、これやその他の種類のオーバーヘッドはコードから排除されます。
他の主な利点は同時実行性です。これは、関数型プログラミングで実行するのが簡単です。これは、以前は手動で状態変数を設定する必要があった操作(ループ内の反復子など)のほとんどを処理するためです。
ほとんどの関数型言語と拡張機能は遅延評価をサポートしているため、プログラムの記述方法によっては、シングルプロセッサのコンテキストでもいくつかのパフォーマンス上の利点が見られます。Haskellでは、「このラベルはすべての偶数を含む配列を表します」と言うことができます。このような配列は無限に大きくなりますが、配列の初期化時に、必要な最大値が何であるかを知らなくても、いつでもその配列の100,000番目の要素を要求できます。値は必要なときにのみ計算され、それ以上は計算されません。
最大のメリットは、慣れていないことです。Schemeのような言語を選び、それを使って問題を解決する方法を学びます。そうすれば、すでに知っている言語でより優れたプログラマーになります。それは第二の人間の言語を学ぶようなものです。他と比較するものがないので、他の人は基本的に自分のバリエーションであると思います。他の人、あなたがすでに知っていることに関係のない特定の人への暴露は有益です。
関数型プログラミングが重要な理由
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf
概要
ソフトウェアがますます複雑になるにつれて、ソフトウェアを適切に構成することがますます重要になっています。適切に構造化されたソフトウェアは、作成とデバッグが簡単で、将来のプログラミングコストを削減するために再利用できるモジュールのコレクションを提供します。
このホワイトペーパーでは、特に関数型言語の2つの機能である高階関数と遅延評価がモジュール性に大きく貢献できることを示します。例として、リストとツリーを操作し、いくつかの数値アルゴリズムをプログラムし、アルファ-ベータヒューリスティック(ゲームプレイングプログラムで使用される人工知能のアルゴリズム)を実装します。モジュール化がプログラミングを成功させる鍵であるため、関数型プログラミングはソフトウェア開発に重要な利点を提供すると私たちは結論付けます。
C#3.0のような言語を使用すると、それぞれの最良の要素を組み合わせることができます。オブジェクト指向は、クラスレベル以上の大規模構造に使用できます。メソッドレベルの小規模構造の機能スタイル。
関数スタイルを使用すると、制御フローステートメントなどと混同することなく、意図を明確に宣言するコードを記述できます。副作用のないプログラミングなどの原則により、コードについて推論し、その正確性を確認することがはるかに容易になります。
プログラムが大きくなると、ボキャブラリー内のコマンドの数が多くなりすぎて、使用が非常に難しくなります。オブジェクト指向プログラミングを使用すると、コマンドをより適切に整理できるため、作業が楽になります。customerに関連するすべてのコマンドを何らかの顧客エンティティ(クラス)に関連付けることができるため、説明がより明確になります。ただし、プログラムはまだ、それがどのように進むべきかを指定する一連のコマンドです。
関数型プログラミングは、語彙を拡張するまったく異なる方法を提供します。新しいプリミティブコマンドの追加に限定されません。新しい制御構造を追加することもできます。これは、コマンドを組み合わせてプログラムを作成する方法を指定するプリミティブです。命令型言語では、コマンドをシーケンスで作成したり、ループなどの限られた数の組み込み構造を使用してコマンドを作成したりできましたが、一般的なプログラムを見ると、繰り返し発生する構造が多数あります。コマンドを組み合わせる一般的な方法
関数型プログラミングを「必要性」の観点から考えないでください。代わりに、OOP、テンプレート、アセンブリ言語などが、それらを学んだとき(もしあれば)の考え方を完全に変えたのと同じように、心を開く別のプログラミング手法と考えてください。最終的には、関数型プログラミングを学ぶことで、より優れたプログラマーになります。