2013-02-26 21 views
7

実世界の問題に取り組み、Javaで書かれた同じコードとの比較をしているScalaモナドの完全な例を持っている人はいますか?Scala Monad - 完全に動作する例

+0

これはスケーラの例ではありませんが、これはJavaのMaybeモナドのかなり深い研究です(いくつかのHaskell noどのようにより多くの言語がこれに対処することができるかを見てください):http://logicaltypes.blogspot.com/2011/09/monads-in-java.html –

+5

誰かがしていませんか? –

+3

モナドのコンセプトは、それが見えるほど奇妙ではありません。より良いか悪いかにかかわらず、カテゴリー理論からのこの用語は非常に実用的ですが、今日のプログラミングの精神的思考師は、理論を強く強調しない(さらには説得する)ことです。私の考えでは、これは恥となり、ソフトウェアは「エンジニアリング」の領域から失格になります。 –

答えて

11

すべてのコレクションは、モナドです(これは一般的なステートメントであり、Scala固有のものではありません)。 ScalaのモナドはOption、右と左の投影はEitherです。あなたは彼らとの理解を見るときはいつでも、仕事中のモナドの側面を見ることができます。

Scalaのモナドのより微妙な例は、パーサーコンバイナです。演算子は、モナド演算を文法的に見栄えの良い同義語の後ろに隠すので、より微妙です。

9
def optionAdd(x:Option[Int], y:Option[Int]):Option[Int] = 
    for(xx <- x; yy <- y) yield xx+yy 

私は私よりも大幅に賢く誰かがすでにhttp://functionaljava.org/examples/1.5/#Option.bindをした特別なので、Javaのバージョンとの時間を無駄にあえてしません。リンクの例では、基本的にはoptionAddの処理が無限に簡潔になります。

2

は、4つのクライアントにモナドを使ってhttp://jazzy.id.au/default/2012/11/02/scaling_scala_vs_java.html

例えば非同期呼び出しを参照してください。

for { 
    user <- getUserById(id) 
    orders <- getOrdersForUser(user.email) 
    products <- getProductsForOrders(orders) 
    stock <- getStockForProducts(products) 
} yield stock 

Futuesはモナドと内包が良く、Javaで非同期コード

を構成するために使用することができますのためのものです...スタート待機中Monads with Java 8

関連する問題