C#/ OOPでは貧弱なドメインモデルが悪いと考えられますが、F#/ FPでは非常に重要なのはなぜですか?
あなたの質問には、あなたが得る答えの有用性を制限する大きな問題があります:あなたは、F#とFPが類似していることを暗示している/仮定しています。FPは、記号用語の書き換え、動的および静的を含む言語の巨大なファミリーです。静的に型付けされたFP言語の中でも、OCamlやSMLの高次モジュール(F#には存在しない)などのドメインモデルを表現するためのさまざまなテクノロジがあります。F#はこれらの関数型言語の1つですが、無駄のないことで特に注目に値し、特に高階のモジュールや高種類の型を提供しません。
実際、ドメインモデルがFPでどのように表現されるかを説明することはできませんでした。ここでのもう1つの答えは、Haskellでどのように行われるかについて非常に具体的に述べており、Lisp(すべてのFP言語の母)、ML言語ファミリ、またはその他の機能言語にはまったく適用できません。
なぜデータ/動作を分離するという考えを借りず、それを悪いと考えるのでしょうか?
ジェネリックは、データと動作を分離する方法と見なされる場合があります。ジェネリックは、関数型プログラミング言語のMLファミリーに由来し、OOPの一部ではありません。もちろん、C#にはジェネリックがあります。そのため、C#はデータと動作を分離するという考え方を徐々に取り入れていると主張することができます。
定義がOOPに適合しないというだけですか、
OOPは根本的に異なる前提に基づいているため、データと動作を分離するために必要なツールは提供されません。すべての実用的な目的のために、製品と合計のデータ型が必要で、それらを介してディスパッチします。MLでは、これはユニオンとレコードタイプ、およびパターンマッチングを意味します。
私がここで与えた例をチェックしてください。
または、C#で悪いのに、何らかの理由でF#に適用されない(実際には逆になる)という具体的な理由はありますか?
OOPからC#へのジャンプに注意してください。C#は、他の言語ほどOOPについて純粋ではありません。.NET Frameworkには、ジェネリック、静的メソッド、さらにはラムダがいっぱいになりました。
(注:私は、ブログ投稿のどちらかの意見に同意しない個人ではなく、善/悪の意見を変える可能性のあるC#/ F#の違いに特に興味があります)。
C#にはユニオン型とパターンマッチングがないため、ほとんど実行できません。あなたが持っているのはハンマーだけである場合、すべてが釘のように見えます...