3

私は Java を教えられて育ち、人気のあるオープンソース CMS を使用して、ここ数年で多くの PHP を学び始めました。私は OOP の自然な感じがとても好きですが、最近になって関数型プログラミングの概念を発見しました。

関数型プログラミング、宣言型プログラミング、命令型プログラミングとは何ですか? [非公開] 」という質問に対するrtpersonの優れた回答の中で、彼は次のように述べています。 "

彼の言いたいことは理解できると思いますが、それは厳密には本当ですか? OOP は関数型プログラミングと共存できますか?

4

3 に答える 3

1

はい、「オブジェクト関数型プログラミング」という用語があります。基本的にこれらの言語では、関数は「第一級市民」、つまりオブジェクトです。

関数型、オブジェクト指向型、命令型など、すべての概念を理解しなければならないという理由だけで、そこにたどり着くのはそれほど簡単ではないことにほとんどの人が同意していると思います。

そのような言語の例は次のとおりです。

  • Scala (とても気に入っています)
  • Boost::function 、Boost::bind in C++
  • .NET F#
  • javascript (別名 ECMAScript)
于 2015-06-26T07:20:08.677 に答える
1

はい、互換性があります。どの言語でも関数型にプログラミングできます。例としては、大文字と小文字の変更などのメソッドを変更すると、不変で新しいオブジェクトを返す Java String が挙げられます。

あなたがそれについて考えるなら、それはo.something(y)機能的です.osomething(o, y)o

于 2015-06-26T11:57:54.570 に答える
0

はい。「機能オブジェクト」と呼ばれるものがあります。これは基本的に、ミューテーター メソッドがオブジェクトの状態を変更する代わりに、変更された状態の新しいオブジェクトを返すオブジェクトです。Clean は、そのアイデアを一意性の型と組み合わせて、変更された状態をシングルスレッドに保ちます。これにより、コンパイラは、オブジェクトのストレージを舞台裏で変更することによってメソッドを実装できます。

さらに、それを「純粋に機能的ではない」ものにする可変状態については何もありません。不純なのは、通常の式の評価がプログラムに見える状態を変更する場合です。したがって、オブジェクトのメソッドが IO モナド (またはその他のステートフル モナド) でアクションを返すようにすることで、OO と純粋な関数型プログラミングを組み合わせることができます。このアクションは、基礎となる状態の共通セットを変更します (プログラムの残りの部分では利用できません)。

于 2015-06-26T14:26:51.097 に答える