2013-02-26 120 views
7

क्या किसी के पास स्कैला मोनैड का पूर्ण काम किया गया उदाहरण है जो वास्तविक दुनिया की समस्या का सामना करता है और जावा में लिखे गए कोड से तुलना करता है?स्कैला मोनाड - पूर्ण काम किया गया उदाहरण

+0

स्कैला उदाहरण नहीं होने पर, यह जावा में शायद मोनैड का गहराई से अध्ययन है (कुछ हास्केल नो के साथ यह देखने के लिए कि कितनी सक्षम भाषाएं इससे निपट सकती हैं): http://logicaltypes.blogspot.com/2011/09/monads-in-java.html –

+5

क्या कोई नहीं करता है? –

+3

मोनाड की अवधारणा उतनी अजीब नहीं है जितनी लगता है (या इसका नाम ऐसा लगता है)। बेहतर या बदतर के लिए, श्रेणी सिद्धांत से यह शब्दावली बेहद व्यावहारिक है, लेकिन आज प्रोग्रामिंग का उत्साही सिद्धांत दृढ़ता से जोर देना (यहां तक ​​कि अपमानित) सिद्धांत है। मेरे दिमाग में, यह "इंजीनियरिंग" के क्षेत्र से एक अपमान और अयोग्यता सॉफ्टवेयर है –

उत्तर

11

सभी संग्रह मोनैड हैं (यह सामान्य विवरण है, स्कैला-विशिष्ट नहीं है), या "मोनैड है" इस पर निर्भर करता है कि आप इसके बारे में कितना सख्त होना चाहते हैं। स्कैला में Option एक मोनड के रूप में भी है, और Either के दाएं और बाएं अनुमान भी हैं। जब भी आप उनके साथ समझदारी देखते हैं तो आप काम पर अपने monadic पहलुओं को देख सकते हैं।

स्कैला में मोनैड का एक और सूक्ष्म उदाहरण पार्सर संयोजक है। यह अधिक सूक्ष्म है क्योंकि ऑपरेटर समानार्थियों के पीछे monadic संचालन छुपाते हैं जो व्याकरण में बेहतर दिखते हैं।

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 किया था। लिंक में उदाहरण मूल रूप से क्या कर रहा है optionAdd असीम रूप से कम संक्षिप्त तरीके से करता है।

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

Futues monadic कर रहे हैं और comprehensions के लिए अच्छी तरह से जावा में एसिंक्रोनस कोड

रचना के लिए इस्तेमाल किया जा सकता ... शुरुआत: