9

関数型プログラミングは初めてです。モナドのチュートリアルをたどっているうちに、OOPのデコレータパターンのアナロジーだと思うようになりました。私は正しいですか、それともモナドによく似たデザインパターンがありますか?

4

3 に答える 3

6

モナドは間違いなくデコレータではありません。モナドに直接類似した、一般的に使用されている標準のOOPパターンはありません。OOPでモナドをうまく実装できますが、例を参照してください。

私が知っている最高のClojureベースのモナドチュートリアルは、BrianMarickによるこのビデオシリーズです。

これをよく見てみることをお勧めします。これは、多くの例を含むかなり良い入門書です。

于 2012-09-04T13:17:08.127 に答える
2

Haskellの既知のシンタックスシュガーにより、モナドを「オーバーライド可能なセミコロン」として考えることができます。

一般に、これは、現在使用されているモナドに応じて、同じ制御構造(コードブロック)で異なる処理を実行できることを意味します。

Haskellのqickの例

import Data.Maybe
import Data.List


funcMaybe x = do
  z <- x
  return $ z * z

funcList x = do
  z <- x
  return $ z * z

runMaybe = funcMaybe ( Just 5 )

runList = funcList [ 5, 6 ]

GHCIで実行されると、プロンプトが表示されます

ghci> runMaybe 
Just 25
ghci> runList 
[25, 36]

ご覧のとおり、同じコードブロックは異なる結果を生成します-ある場合にはリストし、別の場合には適切なデータ構造にラップされます

于 2012-09-04T13:28:45.737 に答える
-2

モナドはのようfunction composition on steroidsなものであり、OOの世界には同様の強力な概念はありません。

于 2012-09-04T09:31:47.760 に答える