2016-02-09 12 views

उत्तर

6

क्योंकि यह आसान है।

विशेष रूप से इस भाग 2009 में Erlang मेलिंग सूची के लिए तैनात this question पर एक नज़र डालें:


मैं अधिकांश मामलों में पैटर्न मिलान पसंद है, लेकिन मुझे लगता है मैं पर्याप्त लिखना कोड जहां मुझे डेटा संरचना को क्रमशः अद्यतन करने की आवश्यकता है, और उस कोड को बनाए रखना एक दर्द है जब मेरे पास कोड है:

X = foo(), 
X1 = bar(X), 
X2 = xyzzy(X1), 
blah(X2). 

और बाद में करने के लिए इसे बदलना चाहते हैं:

X = foo(), 
X1 = whee(X), 
X2 = bar(X1), 
X3 = xyzzy(X2), 
blah(X3). 

संपादक की टिप्पणी - यह उस प्रश्न का उत्तर है।

यह आईआरसी के माध्यम से बहुत कुछ जाता है। यह खराब चर नामकरण अभ्यास का परिणाम है, और इसे "ठीक करने" के लिए पुन: उपयोग करने की आवश्यकता नहीं है; केवल अक्षरों और काउंटरों को चर नामों के रूप में उपयोग करना बंद करें।

कि

FooStateX = foo(), 
PostBarX  = bar(FooStateX), 
OnceXyzziedX = xyzzy(PostBarX), 
blah(OnceXyzziedX). 

कोड लिखा गया था, उदाहरण के लिए प्रदर्शन किया वहाँ सब Erlang में असामान्य नहीं है (टिप्पणी "इस एक बहुत आईआरसी के माध्यम से चला जाता है" ध्यान दें)। इलीक्सिर की आसानी से नामों को पुनर्निर्मित करने की क्षमता हमें हर समय चीजों के लिए नए डमी नाम उत्पन्न करने से बचाती है। बस इतना ही। यह ध्यान में रखना बुद्धिमानी है कि एरलांग के मूल निर्माता एक कार्यात्मक भाषा बनाने की कोशिश नहीं कर रहे थे। वे केवल व्यावहारिक डेवलपर्स थे जिन्हें हल करने में कोई समस्या थी। Elixir का दृष्टिकोण सरल व्यवहारवाद है।

+0

हां, लेकिन रीबंडिंग का मतलब है कि मैं एक चर का अद्वितीय अर्थ खो देता हूं। अब मुझे यह पता लगाने के लिए वास्तव में सभी कोडों को स्कैन करना होगा कि अब एक चर का मतलब क्या है। यह चीजों को जटिल बनाता है। यह मुझे लगता है कि नए नाम उत्पन्न करने से भी बदतर है। इसके अलावा वास्तविक ** अर्थ ** के माध्यम से डेटा पास करते समय एक परिवर्तनीय नाम का पुन: उपयोग करने का अर्थ बदल सकता है इसका मतलब है कि यह सिर्फ एक डमी नाम बन गया है। – rvirding

+0

यह एक दिलचस्प बातचीत रॉबर्ट है और निश्चित रूप से एक ऐसा मंच है जिसमें हमारे पास एक मंच है जहां हमारे पास इस पर हमारी सोच का जादू करने के लिए और अधिक जगह है। मैं समझता हूं कि आप वास्तव में क्या प्राप्त कर रहे हैं लेकिन व्यावहारिक मुद्दे भी हैं; ऐसी जगहें जहां रिबंडिंग की अनुमति कार्यात्मक शुद्धता से अधिक व्यावहारिक दृष्टिकोण है। –

+0

ऑनोरियो इलीक्सिर मेलिंग सूची पर इसके बारे में एक चर्चा शुरू करता है और मैं इसमें शामिल हो जाऊंगा। – rvirding

10

सबसे कार्यात्मक भाषाओं में एक ही दायरे में चर के rebinding अनुमति नहीं है। तो इलीक्सिर यह अनुमति देता है कि यह निश्चित रूप से इसे एक गैर-कार्यात्मक, अनिवार्य अनुभव देता है। Erlang की समस्या स्कोप की कमी है, या अधिक सटीक होने के लिए कि पूरे समारोह खंड में केवल एक गुंजाइश है। हमने गंभीर चर्चा की थी कि क्या स्कोप पेश करना है, लेकिन अंत में हमने इसके खिलाफ फैसला किया क्योंकि यह मौजूदा प्रणाली के साथ पिछड़ा असंगत था। और डेवलपर्स पीछे असंगत परिवर्तन से नफरत करते हैं।

एरलांग मार्ग का एक गंभीर लाभ है: जब आपको यह गलत लगता है तो आपको आम तौर पर त्रुटि मिलती है ताकि आप गलती देख सकें।इसकी तुलना में अजीब व्यवहार होने की तुलना में जब एक चर के पास वह मान नहीं है जो आपको लगता है कि बहुत पता लगाने और सही करने के लिए कठिन है।

व्यक्तिगत रूप से मुझे लगता है कि नए चर नामों की समस्या, उदाहरण के लिए संख्या योजना का उपयोग करना बहुत अधिक है। उस समय की तुलना में मुझे पर काम करने के लिए लगता है मैं परिवर्तनीय परिवर्तनीय नाम बदलने जा रहा हूं। और थोड़ी देर के बाद आप इसे इसके बारे में प्रतिबिंबित किए बिना देखते हैं। ईमानदारी से।

संपादित करें:

इसके अलावा जब कार्यों डेटा का वास्तविक अर्थ तो एक ही चर नाम पुन: उपयोग परिवर्तन के क्रम के माध्यम डेटा चेनिंग बहुत भ्रामक हो सकता है। यह सिर्फ एक सामान्य "डेटा जो मैं एक समारोह से दूसरे में गुज़र रहा हूं" का अर्थ समाप्त कर सकता हूं।

+2

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

+1

@ स्टेविविनोस्की या यह पाइपलाइनिंग के लिए रोता है जो एक विचार है कि कुछ एफपी भाषाओं ने अपनाया है। –

+1

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

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