एलीक्सिर में चर के पुनर्विक्रय की अनुमति देने के पीछे तर्क क्या है, जब एरलांग इसे अनुमति नहीं देता है?इलीक्सिर: चर के रीबंडिंग की अनुमति देने के पीछे तर्क
उत्तर
क्योंकि यह आसान है।
विशेष रूप से इस भाग 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 का दृष्टिकोण सरल व्यवहारवाद है।
यहाँ सीधे घोड़े के मुंह से तर्क दिया गया है:
http://blog.plataformatec.com.br/2016/01/comparing-elixir-and-erlang-variables/
सबसे कार्यात्मक भाषाओं में एक ही दायरे में चर के rebinding अनुमति नहीं है। तो इलीक्सिर यह अनुमति देता है कि यह निश्चित रूप से इसे एक गैर-कार्यात्मक, अनिवार्य अनुभव देता है। Erlang की समस्या स्कोप की कमी है, या अधिक सटीक होने के लिए कि पूरे समारोह खंड में केवल एक गुंजाइश है। हमने गंभीर चर्चा की थी कि क्या स्कोप पेश करना है, लेकिन अंत में हमने इसके खिलाफ फैसला किया क्योंकि यह मौजूदा प्रणाली के साथ पिछड़ा असंगत था। और डेवलपर्स पीछे असंगत परिवर्तन से नफरत करते हैं।
एरलांग मार्ग का एक गंभीर लाभ है: जब आपको यह गलत लगता है तो आपको आम तौर पर त्रुटि मिलती है ताकि आप गलती देख सकें।इसकी तुलना में अजीब व्यवहार होने की तुलना में जब एक चर के पास वह मान नहीं है जो आपको लगता है कि बहुत पता लगाने और सही करने के लिए कठिन है।
व्यक्तिगत रूप से मुझे लगता है कि नए चर नामों की समस्या, उदाहरण के लिए संख्या योजना का उपयोग करना बहुत अधिक है। उस समय की तुलना में मुझे पर काम करने के लिए लगता है मैं परिवर्तनीय परिवर्तनीय नाम बदलने जा रहा हूं। और थोड़ी देर के बाद आप इसे इसके बारे में प्रतिबिंबित किए बिना देखते हैं। ईमानदारी से।
संपादित करें:
इसके अलावा जब कार्यों डेटा का वास्तविक अर्थ तो एक ही चर नाम पुन: उपयोग परिवर्तन के क्रम के माध्यम डेटा चेनिंग बहुत भ्रामक हो सकता है। यह सिर्फ एक सामान्य "डेटा जो मैं एक समारोह से दूसरे में गुज़र रहा हूं" का अर्थ समाप्त कर सकता हूं।
सहमत हुए। मुझे लगता है कि क्रमांकित चर वाले उदाहरण या तो विकसित होते हैं या केवल खराब कोडिंग दिखाते हैं। एक समारोह से बार-बार परिणाम गुजरने के रूप में अगले फ़ंक्शन के तर्कों को फोल्डिंग के लिए रोता है, परिवर्तनीय पुनर्विक्रय नहीं। –
@ स्टेविविनोस्की या यह पाइपलाइनिंग के लिए रोता है जो एक विचार है कि कुछ एफपी भाषाओं ने अपनाया है। –
@OnorioCatenacci मुझे "पाइपलाइनिंग" शब्द के साथ समस्या है और इसका क्या अर्थ है। मेरे लिए एक पुराने यूनिक्स उपयोगकर्ता और समवर्ती प्रोग्रामर के रूप में शब्द "पाइप" समरूपता और समांतरता को चिल्लाता है जबकि कुछ कार्यात्मक भाषाओं में इसे परिभाषित किया गया है, इसके साथ कुछ भी नहीं करना है। यह सिर्फ नेस्टेड फ़ंक्शन कॉल के लिए सिंटैक्टिक चीनी के रूप में उपयोग किया जाता है। हालांकि यह स्वयं में उपयोगी हो सकता है, इसे कुछ और कहा जाना चाहिए, यह शब्द सभी अर्थ खो देगा। – rvirding
- 1. '?' से बचने की अनुमति देने में तर्क क्या है?
- 2. सामाजिक लॉगिन के पीछे तर्क
- 3. बैक बटन के पीछे तर्क
- 4. सी ++: छिपाने के नियम के पीछे तर्क
- 5. पहुँच चर के पीछे जावास्क्रिप्ट
- 6. इलीक्सिर
- 7. टिनीएमसीई: केवल गोलियों की अनुमति देने के लिए सीमित है?
- 8. एएसएमएक्स वेब सेवा अज्ञात पहुंच की अनुमति देने के लिए
- 9. पासवर्ड सत्यापन की अनुमति देने के लिए preg_match बनाएं (! @ # $%)
- 10. अन्य उपयोगकर्ताओं के लिए S3FS बाल्टी निर्देशिका का उपयोग करने की अनुमति देने की अनुमति
- 11. एंड्रॉइड - फ्लैश - पीयर-समर्थित नेटवर्किंग को अनुमति देने की अनुमति
- 12. संपर्कों तक पहुंच की अनुमति देने के लिए अनुमति के लिए पूछें आईओएस
- 13. हेडर के पीछे तर्क क्या है?
- 14. शून्य एमक्यू संदर्भ के पीछे तर्क क्या है?
- 15. इलीक्सिर
- 16. क्यों डिफ़ॉल्ट तर्क पीछे पीछे हैं?
- 17. सीक्यूआरएस - घटनाओं और सूचना के अन्य स्रोतों का उपयोग करके पढ़ने के मॉडल के निर्माण की अनुमति देने की अनुमति
- 18. एकाधिक पैरामीटर की अनुमति देने के लिए शेबैंग की चाल कैसे करें?
- 19. इलीक्सिर
- 20. रीबोन रीबंडिंग इवेंट्स
- 21. पीसीआरई: पीछे की ओर देखने की अनुमति नहीं है?
- 22. नॉकआउटजेएस - रीबंडिंग व्यूमोडेल
- 23. एंड्रॉइड टैबविड्ज के लिए मौजूदा पैच बाएं हाथ की तरफ टैब की अनुमति देने के लिए?
- 24. रेल पर रूबी, चर या पीछे चर के सामने कोलन
- 25. जावास्क्रिप्ट सत्यापन अनुमति देने के लिए 3 के लिए अल्पविराम
- 26. स्टोरीबोर्ड: नेविगेशन बार के पीछे दिखाई देने वाली तालिका दृश्य
- 27. पूर्ण तर्क sscanf करने की अनुमति दी?
- 28. बढ़ावा देने के साथ और बिना तर्क के पैरामीटर्स :: program_options
- 29. तैनात अनुप्रयोगों को हॉटफिक्स करने की अनुमति देने के लिए कुछ अच्छी रणनीतियां क्या हैं?
- 30. डिबगिंग पीछे की ओर
हां, लेकिन रीबंडिंग का मतलब है कि मैं एक चर का अद्वितीय अर्थ खो देता हूं। अब मुझे यह पता लगाने के लिए वास्तव में सभी कोडों को स्कैन करना होगा कि अब एक चर का मतलब क्या है। यह चीजों को जटिल बनाता है। यह मुझे लगता है कि नए नाम उत्पन्न करने से भी बदतर है। इसके अलावा वास्तविक ** अर्थ ** के माध्यम से डेटा पास करते समय एक परिवर्तनीय नाम का पुन: उपयोग करने का अर्थ बदल सकता है इसका मतलब है कि यह सिर्फ एक डमी नाम बन गया है। – rvirding
यह एक दिलचस्प बातचीत रॉबर्ट है और निश्चित रूप से एक ऐसा मंच है जिसमें हमारे पास एक मंच है जहां हमारे पास इस पर हमारी सोच का जादू करने के लिए और अधिक जगह है। मैं समझता हूं कि आप वास्तव में क्या प्राप्त कर रहे हैं लेकिन व्यावहारिक मुद्दे भी हैं; ऐसी जगहें जहां रिबंडिंग की अनुमति कार्यात्मक शुद्धता से अधिक व्यावहारिक दृष्टिकोण है। –
ऑनोरियो इलीक्सिर मेलिंग सूची पर इसके बारे में एक चर्चा शुरू करता है और मैं इसमें शामिल हो जाऊंगा। – rvirding