2011-12-19 12 views
89

फ्लैटमैप के बारे में इतना शक्तिशाली क्या है कि यह स्कैला लोकगीत में ऐसी जगह का हकदार है?स्कैला में "फ्लैटमैप जो *** ***" idiomatic अभिव्यक्ति कहां से आती है?

+24

[उद्धरण वांछित] – tstenner

+1

कंपाइलर भाषा संदर्भ में अभिव्यक्तियों के लिए 'कैसे संभालता है इस बारे में अनुभाग पढ़ें। यह कुछ संकेत दे सकता है। – Dirk

+0

@tstenner: जब तक हम tese memes पर झुका रहे हैं: Google आपका मित्र है। – Chuck

उत्तर

43

इस वाक्यांश के पीछे तर्क यह है कि यदि आप फ्लैटमैप (और अन्य उच्च ऑर्डर फ़ंक्शंस) पर कॉल के साथ लिखेंगे तो आप बहुत कष्टप्रद प्रतिस्थापित कर सकते हैं।

इस विकल्प के लिए विशेष रूप से सच है (देखें http://tonymorris.github.io/blog/posts/scalaoption-cheat-sheet/)

लेकिन यह अन्य monads पर भी लागू होती

कल्पना कीजिए (हालांकि मैं स्वीकार करना होगा, मैं वास्तव में विवरण अभी तक अपने आप को समझ में नहीं आता) स्थिति जहां आपके पास एक संग्रह है जिसके लिए आप एक फ़ंक्शन (या फ़ंक्शन की श्रृंखला) लागू करना चाहते हैं, जहां प्रत्येक फ़ंक्शन शून्य हो सकता है। जब आप वास्तव में शून्य का उपयोग करते हैं तो कोड शून्य जांच के साथ riddled जाएगा। लेकिन यदि आप मूल्यों के बजाय विकल्प का उपयोग करते हैं, तो आप केवल वांछित कार्यों के साथ मूल्यों को फ्लैटमैप कर सकते हैं, कई कार्यों के मामले में फ़ंक्शंस को चेन कर सकते हैं और केवल उन परिणामों के साथ संग्रह प्राप्त कर सकते हैं जो शून्य नहीं हैं, जो कि कई मामलों में बिल्कुल ठीक है तुम्हें चाहिए।

चूंकि उस वर्णन को कम सलाह दी गई है, "केवल फ्लैटमैप उस छल" ने खुद को स्थापित किया है।

+0

मैं संयोजनों से निपटने के लिए कभी-कभी सूची मोनड का उपयोग करता हूं। –

9

रूनर बजरनासन वह व्यक्ति है जिसे आप मूल के लिए ढूंढ रहे हैं।

यह समझना क्यों कि यह इतना शक्तिशाली है कि कुछ समय के साथ ईमानदार होने के लिए आ सकता है। ऑप्शन क्लास यह देखने के लिए शुरू करने के लिए सबसे अच्छी जगह है कि आप बार-बार कैसे फ्लैट करेंगे, लुकअप की एक श्रृंखला (उदाहरण के लिए) अंतिम परिणाम में मैप करें।

11

flatMap के बारे में महत्वपूर्ण बात यह है कि यह स्काला का मोनैडिक बाइंड ऑपरेशन का प्रतिनिधित्व है। वेब पर मोनैड के उद्देश्य को समझाते हुए कई ट्यूटोरियल हैं और वास्तव में वे इतने उपयोगी क्यों हैं; James Iry has one जो कुछ विस्तार में जाता है।

+3

मुझे लगता है कि यह सही जवाब है, 'विकल्प' कई' फ्लैटमैप 'उपयोग मामलों में से एक है। बेशक, यदि आप अपने "प्राकृतिक आवास" में मोनैड देखना चाहते हैं, तो आपको हास्केल की जांच करनी चाहिए। केवल अंतर यह है कि हास्केलर्स कहते हैं: "बस >> = वह बकवास!" – Landei

+0

लेख के लिंक के लिए धन्यवाद, मुझे यह बहुत उपयोगी लगता है। मैं स्कैला में प्रोग्रामिंग में "अभिव्यक्तियों के लिए पुनरीक्षित" अध्याय में वापस गया, जो लूप के लिए कुछ प्रकाश डालता है और फ़िल्टर, मानचित्र, फ्लैटमैप और फ़्लैटन का उपयोग करता है। –

92

कहानी मैंने सुना था कि दो preeminent स्काला प्रोग्रामर थे युग्मन हो जब उनमें से एक इस तरह की कुछ कोड लिखना शुरू किया?

option match { 
    case Some ... 

जो पर अन्य ने कहा, "क्या इस शौकिया घंटे की है इंगित फ्लैट नक्शा वह बकवास! "

flatMap के बारे में इतना शक्तिशाली क्या है, ठीक है ... सबसे पहले, यह मौलिक monadic ऑपरेटर है। इसका मतलब है कि यह एक आम ऑपरेशन है, उदाहरण के लिए, कंटेनर (जैसे Option, संग्रह, आदि), निरंतरता, राज्य इत्यादि। दूसरा, जबकि आप Option का निर्माण कर सकते हैं, कि flatMap के विपरीत, यह नहीं है एक monadic ऑपरेशन, तो यह व्यापक रूप से लागू नहीं किया जा सकता है। साथ ही, आपके द्वारा छेड़छाड़ किए जा रहे डेटा के बारे में बहुत अधिक जानकारी की आवश्यकता है।

नोट:। पहले मैंने कहा था मिलान धीमी गति से flatMap - ठीक विपरीत स्थिति तथ्य की बात के रूप में, स्काला का नवीनतम संस्करण अप करने के लिए इस लेखन के समय में, है 2.10.1)

+3

मुझे लगता है कि मैं अभी भी शौकिया घंटे में हूं :-) –

+54

उन दो प्रोग्रामर स्वयं और पॉल चियसैनो थे। – Apocalisp

+0

@Apocalisp मैंने यही सोचा, लेकिन मैं इसे किसी के लिए गलत-विशेषता नहीं देना चाहता था। –

संबंधित मुद्दे