फ्लैटमैप के बारे में इतना शक्तिशाली क्या है कि यह स्काला लोकगीत में ऐसी जगह के योग्य है?
for
भाषा के संदर्भ में संकलक कैसे भावों को संभालता है, इसके बारे में अनुभाग पढ़ें । यह कुछ संकेत दे सकता है।
फ्लैटमैप के बारे में इतना शक्तिशाली क्या है कि यह स्काला लोकगीत में ऐसी जगह के योग्य है?
for
भाषा के संदर्भ में संकलक कैसे भावों को संभालता है, इसके बारे में अनुभाग पढ़ें । यह कुछ संकेत दे सकता है।
जवाबों:
इस वाक्यांश के पीछे तर्क यह है कि आप बहुत थकाऊ की जगह ले सकते हैं अगर / फिर / अन्यथा कोड आप फ्लैटपॉल (और अन्य उच्च आदेश कार्यों) को कॉल के साथ लिखेंगे।
यह विकल्पों के लिए विशेष रूप से सच है (देखें http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/ )
लेकिन यह अन्य साधुओं पर भी लागू होता है (हालांकि मुझे मानना होगा, मैं अभी तक स्वयं विवरणों को नहीं समझता हूं)
उस स्थिति की कल्पना करें जहां आपके पास एक संग्रह है जिसके लिए आप एक फ़ंक्शन (या फ़ंक्शन की एक श्रृंखला) लागू करना चाहते हैं जहां प्रत्येक फ़ंक्शन शून्य वापस आ सकता है। जब आप वास्तव में null का उपयोग करते हैं तो आपको null चेक के साथ कोड को रिडल्ड किया जाएगा। लेकिन यदि आप मानों के बजाय विकल्पों का उपयोग करते हैं, तो आप केवल वांछित कार्यों के साथ मूल्यों को सपाट कर सकते हैं, कई कार्यों के मामले में कार्यों का पीछा कर सकते हैं और केवल उन परिणामों के साथ एक संग्रह प्राप्त कर सकते हैं जो शून्य नहीं हैं, जो कि कई मामलों में ठीक है तुम्हें चाहिए।
चूँकि वह विवरण बल्कि छोटी-छोटी सलाह "बस सपाट कि बकवास" को स्थापित किया गया था।
मैंने जो कहानी सुनी वह यह थी कि दो पूर्ववर्ती स्काला प्रोग्रामर जोड़ी बना रहे थे जब उनमें से एक ने कुछ कोड इस तरह लिखना शुरू किया:
option match {
case Some ...
किस बिंदु पर दूसरे ने कहा "यह क्या है? शौकिया घंटे? फ्लैट नक्शा जो बकवास है!"
जैसा कि इसके बारे में बहुत शक्तिशाली है flatMap
, ठीक है ... सबसे पहले, यह मौलिक मौद्रिक ऑपरेटर है। इसका मतलब है कि यह एक साझा ऑपरेशन है, उदाहरण के लिए, कंटेनर (जैसे Option
, संग्रह, आदि), निरंतरता, स्थिति, आदि, दूसरा, जबकि आप डी का निर्माण कर सकते हैं Option
, जो कि विरोध के रूप में flatMap
, एक अकर्मण्य ऑपरेशन नहीं है , तो यह व्यापक रूप से लागू नहीं किया जा सकता है। साथ ही, यह उस डेटा के बारे में बहुत अधिक ज्ञान की आवश्यकता है जिसे आप जोड़ तोड़ कर रहे हैं।
नोट: पहले मैंने कहा था कि मिलान की तुलना में धीमी थी flatMap
- इस तथ्य के रूप में विपरीत सच है, इस लेखन के समय स्कैला के सबसे हाल के संस्करण तक, 2.10.1।)
val res = for (a <- ma; b <- mb; c <- mc; d <- md) yield f(a,b,c,d)
। मैं अधिक मठों को जोड़ सकता हूं, साधुओं को हटा सकता हूं, और यह वही रहता है। इसके अलावा, ध्यान दें कि यह में String
, लेकिन में विघटित नहीं करता है Option[String]
। हालांकि, वास्तव में, यह बिल्कुल भी विघटित नहीं होता है। कुछ कारणों में से कुछ लोगों को कंटेनरों का उपयोग करना पसंद नहीं है, जैसे कि मोनाड्स के लिए उदाहरण यह है कि आप कंटेनरों से चीजें ले सकते हैं, लेकिन सभी मोनाड्स आपको ऐसा करने नहीं देते हैं।
इसके बारे flatMap
में महत्वपूर्ण बात यह है कि यह स्काला की मोनडिक बाइंड ऑपरेशन का प्रतिनिधित्व है। वेब पर भिक्षुओं के उद्देश्य के बारे में कई ट्यूटोरियल हैं और वास्तव में वे इतने उपयोगी क्यों हैं; जेम्स इरी में एक है जो कुछ विस्तार में जाता है।
Option
कई flatMap
उपयोग मामलों में से एक है। बेशक, यदि आप अपने "प्राकृतिक आवास" में भिक्षुओं का निरीक्षण करना चाहते हैं, तो आपको हास्केल की जांच करनी चाहिए। फर्क सिर्फ इतना है कि हास्केलर कहते हैं: "बस >> = वह बकवास!"
रनर बजरसन वह व्यक्ति है जिसे आप मूल के लिए देख रहे हैं।
एहसास क्यों यह इतना शक्तिशाली है कि कुछ ही समय के साथ आ सकता है ईमानदार हो। विकल्प वर्ग यह देखने के लिए शुरू करने के लिए सबसे अच्छी जगह है कि आप अंतिम परिणामों में बार-बार लुकअप की श्रृंखला (उदाहरण के लिए) को कैसे फ्लैट करेंगे।