स्काला में "फ्लैटमैप दैट्स ***" मुहावरेदार अभिव्यक्ति कहाँ से आती है?


104

फ्लैटमैप के बारे में इतना शक्तिशाली क्या है कि यह स्काला लोकगीत में ऐसी जगह के योग्य है?


30
[उद्धरण वांछित]
टेंशनर

1
forभाषा के संदर्भ में संकलक कैसे भावों को संभालता है, इसके बारे में अनुभाग पढ़ें । यह कुछ संकेत दे सकता है।
डिर्क

@ टेंशनर: जब तक हम टेंट मेम पर झुक रहे हैं: Google आपका मित्र है।
चक

4
@ ऐश्वर्या यह "आपकी सूची / सरणी / विकल्प पर सिर्फ फ्लैटमैप का उपयोग करें" की तरह है, न कि "खराब" के रूप में "बकवास"
टेंटनर

1
दरअसल, वह विशिष्ट वाक्यांश (निश्चित रूप से) संदर्भ से बाहर था, जहां किसी ने मैनहट्टन में कहीं बार (रीडर) मोनड को याद किया ;-) जैसा कि इस तरह के मामलों में होता है, लघु संस्करण अटक गया।
रोलैंड कुह्न

जवाबों:


55

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

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

लेकिन यह अन्य साधुओं पर भी लागू होता है (हालांकि मुझे मानना ​​होगा, मैं अभी तक स्वयं विवरणों को नहीं समझता हूं)

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

चूँकि वह विवरण बल्कि छोटी-छोटी सलाह "बस सपाट कि बकवास" को स्थापित किया गया था।


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

103

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

option match {
    case Some ...

किस बिंदु पर दूसरे ने कहा "यह क्या है? शौकिया घंटे? फ्लैट नक्शा जो बकवास है!"

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

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


4
मुझे लगता है कि मैं अभी भी शौकिया घंटे में हूं, :-)
गिलाउम बेलरोज

69
वे दो प्रोग्रामर खुद और पॉल चिशानो थे।
Apocalisp

1
अगर मुझे सही तरीके से याद है, तो #legendofklang खुद को उसी समय के आसपास ट्विटर पर प्रदर्शित नहीं कर रहा था ... जो अक्सर फ्लैट-मीम की मिस-एट्रिब्यूशन की जड़ है जो मेमे को हिलाता है? हमें कुछ प्रकार के स्काला मेम विकी प्रविष्टि बनाने चाहिए; अब कुछ भयानक हैं!
टिमोथी

3
@IllSargent मुझे लगता है कि पेड़ों के लिए जंगल गायब है। फायदा यह है कि यह रचना करता है । यदि मेरे पास एक फ़ंक्शन है जो चार भिक्षुओं पर निर्भर करता है, तो मैं लिख सकता हूं val res = for (a <- ma; b <- mb; c <- mc; d <- md) yield f(a,b,c,d)। मैं अधिक मठों को जोड़ सकता हूं, साधुओं को हटा सकता हूं, और यह वही रहता है। इसके अलावा, ध्यान दें कि यह में String, लेकिन में विघटित नहीं करता है Option[String]। हालांकि, वास्तव में, यह बिल्कुल भी विघटित नहीं होता है। कुछ कारणों में से कुछ लोगों को कंटेनरों का उपयोग करना पसंद नहीं है, जैसे कि मोनाड्स के लिए उदाहरण यह है कि आप कंटेनरों से चीजें ले सकते हैं, लेकिन सभी मोनाड्स आपको ऐसा करने नहीं देते हैं।
डैनियल सी। सोबरल

1
आप यहाँ उद्धृत चर्चा का लिंक देख सकते हैं: web.archive.org/web/20130627111326/http://beust.com/weblog/2010/…
hawkeye

12

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


4
मुझे लगता है कि यह सही उत्तर है, Optionकई flatMapउपयोग मामलों में से एक है। बेशक, यदि आप अपने "प्राकृतिक आवास" में भिक्षुओं का निरीक्षण करना चाहते हैं, तो आपको हास्केल की जांच करनी चाहिए। फर्क सिर्फ इतना है कि हास्केलर कहते हैं: "बस >> = वह बकवास!"
लांडेई

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

10

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.