[解決済み] 関数型プログラミングとオブジェクト指向プログラミングの比較【終了しました
質問
これまで主にOOプログラミングに触れてきたので、関数型言語を学びたいと思っています。質問は以下の通りです。
- オブジェクト指向ではなく、関数型プログラミングを選択するのはどのような場合ですか?
- 関数型プログラミングが有利な典型的な問題定義とは?
どのように解決するのか?
<ブロッククオートオブジェクト指向ではなく、関数型プログラミングを選択するのはどんなときか?
異なる種類のソフトウェアの進化が予想される場合。
-
オブジェクト指向言語が得意とするのは、「オブジェクトの集合」が決まっている場合です。 操作 について もの そして、コードが進化するにつれて、主に新しいものを追加していきます。 これは、既存のメソッドを実装した新しいクラスを追加し、既存のクラスはそのままにすることで実現できます。
-
関数型言語が得意とするのは、「関数型」「関数型」「関数型」「関数型」「関数型」「関数型」の固定セットです。 もの そして、コードが進化するにつれて、主に新しい 操作 を既存のものに適用します。これは、既存のデータ型を使って計算する新しい関数を追加し、既存の関数はそのままにしておくことで実現できます。
進化が間違った方向に進むと、問題が発生します。
-
オブジェクト指向のプログラムに新しい操作を追加する場合、新しいメソッドを追加するために多くのクラス定義を編集する必要がある場合があります。
-
関数型プログラムに新しい種類のものを追加するには、新しいケースを追加するために多くの関数定義を編集する必要があるかもしれません。
この問題は昔からよく知られており、1998年には Phil Wadlerは、これを「表現問題」と名付けました。 . 研究者の中には、Mixinなどの言語機能でこの問題を解決できると考えている人もいるが、広く受け入れられる解決策はまだ主流にはなっていない。
<ブロッククオート関数型プログラミングが有利な典型的な問題定義は何でしょうか?
関数型言語は、シンボリックデータをツリー形式で操作することを得意としています。 例えばコンパイラでは、ソース言語と中間言語が滅多に変わらない(ほとんど同じ もの しかし、コンパイラは常に新しい翻訳やコードの改善、最適化(新しい操作)を追加しています。) コンパイルと翻訳は、関数型言語のキラーアプリと言えるでしょう。
関連
-
[解決済み] 関数型プログラミング言語と命令型プログラミング言語の違いは何ですか?
-
[解決済み] なぜList<T>を継承しないのですか?
-
[解決済み] (関数型)リアクティブプログラミングとは?
-
[解決済み] リスコフ置換原理の例として、どのようなものがありますか?
-
[解決済み] JavaScriptでクラスを定義するために使用できるテクニックと、そのトレードオフとは?
-
[解決済み] Java のコア・ライブラリにおける GoF デザイン・パターンの例
-
[解決済み】関数型プログラミングはGoFデザインパターンに取って代わるか?
-
[解決済み】なぜ関数型プログラミングはまだ浸透していないのでしょうか?
-
[解決済み】Haskellの入門編
-
[解決済み] nullを返すのは設計ミス?[クローズド]
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] 抽象メソッドと仮想メソッドの違いは何ですか?
-
[解決済み] インターフェースと抽象クラス(一般的なOO)
-
[解決済み] リスコフ置換原理の例として、どのようなものがありますか?
-
[解決済み] インターフェースとベースクラス
-
[解決済み] ポリモーフィズムとは何か、何のためにあり、どのように使われるのか?
-
[解決済み】コンストラクターとファクトリーメソッドの比較【終了しました
-
[解決済み] 実装ではなくインターフェースにプログラムする」とはどういう意味ですか?
-
[解決済み] コンストラクタをprivateにするとどうなるのですか?
-
[解決済み] nullを返すのは設計ミス?[クローズド]
-
[解決済み] オブジェクト指向プログラミングにおける「インターフェイス」の定義とは?