मैंने इस बारे में पढ़ा है कि एरलांग जैसी भाषाओं में प्रोग्रामिंग की विफल-तेज शैली कैसे अधिकांश अन्य भाषाओं में रक्षात्मक शैली की तुलना में बहुत कम कार्यक्रमों के साथ समाप्त होती है। क्या यह सभी प्रकार के कार्यक्रमों के लिए सही है और इसके लिए तर्क क्या है?रक्षात्मक शैली कार्यक्रमों की तुलना में असफल फास्ट स्टाइल प्रोग्राम क्यों कम हैं?
उत्तर
विफल-फास्ट प्रोग्राम रक्षात्मक शैली कार्यक्रमों से जरूरी नहीं हैं: यह आपके रक्षात्मक कोड को सुरक्षित करने के लिए आवश्यक कार्यान्वयन और उपायों पर निर्भर करता है।
एरलांग के मामले में, विफल-गति कार्यक्रम आम तौर पर घोषणात्मक शैली के कारण कम होते हैं और वीएम आपके लिए त्रुटि मामलों को उत्पन्न करने के लिए कैसे सुनिश्चित करता है।
day(1) -> sunday;
day(2) -> monday;
day(3) -> tuesday;
day(4) -> wednesday;
day(5) -> thursday;
day(6) -> friday;
day(7) -> saturday;
किसी भी अप्रत्याशित मूल्य समारोह के लिए पारित एक त्रुटि है कि पकड़ा और एक अन्य प्रक्रिया (यानी .: एक पर्यवेक्षक) द्वारा नियंत्रित किया जा सकता है में परिणाम होगा: एक उदाहरण है, समारोह में के रूप में। ऐसी त्रुटियां पूरी तरह से सिस्टम को कभी भी खतरे में नहीं डालती हैं और फ़ंक्शन में कोड जोड़ने की आवश्यकता नहीं होती है - यह सब पूर्व निर्धारित व्यवहार द्वारा सामान्य निष्पादन पथ के बाहर किया जाता है।
एक गतिशील भाषा में जहां असफलता मानक नहीं है, आपको सीमाओं को मैन्युअल रूप से जांचना होगा और स्वयं को अपवाद फेंकना होगा। फिर आपको स्थानीय रूप से अपवाद को पकड़ना होगा (शीर्ष-स्तरीय प्रयास ... कैच शामिल हैं) यदि आप पूरी प्रणाली को नीचे नहीं जाना चाहते हैं। त्रुटि प्रबंधन कोड आमतौर पर सामान्य निष्पादन पथ में डालना पड़ता है।
एक स्थिर भाषा में जहां असफलता मानक नहीं है, तो आपका कोड कितना समय होगा आपके सिस्टम प्रकार पर निर्भर करेगा। यदि भाषा उन प्रकारों को परिभाषित करने की अनुमति देती है जहां कंपाइलर द्वारा किनारे के मामलों को आपके लिए चेक किया गया है, तो आपको आमतौर पर कोड के अंदर इसे संभालने की ज़रूरत नहीं है, नोडेटर्मेनिस्टिक घटनाओं (फाइलें काम नहीं कर रही हैं, अप्रत्याशित उपयोगकर्ता इनपुट इत्यादि) के बाहर इस तरह के सिस्टम के साथ भाषाएं, रनटाइम से पहले कई त्रुटियां पकड़ी जाएंगी और इसलिए आपके पास कई रक्षात्मक मामले नहीं होंगे।
जब त्रुटि प्रबंधन से बचा नहीं जा सकता है, असफल असफल मुहावरे (जैसे एरलांग) का समर्थन करने वाली भाषाएं उन भाषाओं की तुलना में स्पष्ट रूप से स्पष्ट कोड की अनुमति देगी जो (स्थिर या नहीं) हैं, मुख्य रूप से क्योंकि विशेष मामलों के लिए कोड ' आदर्श निष्पादन पथ के लिए कोड के साथ मिश्रित टी।
प्रोग्रामिंग की असफल-तेज शैली बेहतर कोड पठनीयता और डिबगिंग पर केंद्रित है। उपयोगकर्ता अनुभव एक द्वितीयक लक्ष्य है: उपयोगकर्ता को अजीब त्रुटि संदेश या प्रोग्राम विफलताओं का अनुभव हो सकता है, लेकिन कोड की अधिक गुणवत्ता प्रोग्रामर को आसानी से बग ढूंढने और समस्या को ठीक करने की अनुमति देती है।
रक्षात्मक शैली प्रोग्रामिंग, इसके बजाय, उपयोगकर्ता से और कोड के अन्य हिस्सों से सत्यापन इनपुट पर केंद्रित है। कोड अधिक वर्बोज़ है, क्योंकि प्रोग्रामर को सावधानीपूर्वक इनपुट सत्यापित करना है और त्रुटि के मामले में गहराई से विफल होना है। इससे अधिक कोड (प्रोग्रामर के दृष्टिकोण से) और अधिक मजबूत एप्लिकेशन (उपयोगकर्ताओं के दृष्टिकोण से) तक पहुंच जाता है।
सही नहीं है। आप बिना किसी त्रुटि-हैंडलिंग शैली के असफल-तेज शैली को भ्रमित कर रहे हैं।विफल-तेज शैली अभी भी आपके प्रोग्राम को त्रुटियों को पकड़ने और उपयोगकर्ता को परेशान किए बिना उनसे पुनर्प्राप्त करने की अनुमति देती है। – Deestan
जाहिर है, उपयोगकर्ता असफल शैली के साथ कम छोटी गाड़ी सॉफ्टवेयर के लाभ भी प्राप्त करता है। मैं कहूंगा कि असफलता सही इनपुट क्या है और गलत इनपुट क्या है, और वास्तव में इसे लागू करने में स्पष्टता के बारे में है। स्पष्टता हमेशा बेहतर प्रोग्रामिंग पैदा करती है। इनपुट में त्रुटियों को इस तरह से ध्वजांकित किया जाना चाहिए (ऐप को अपरिभाषित भूमि में सीमित करने के बजाय), लेकिन यह ऐप को इस त्रुटि को सुंदर और सहजता से संभालने से नहीं रोकता है। मुझे लगता है कि आप झूठी डिचोटोमी स्थापित कर रहे हैं। – harms
गलत जवाब। Erlang के संदर्भ में, जिसके लिए सवाल पूछा गया था, रक्षात्मक प्रोग्रामिंग से बचने के लिए और अधिक मजबूत दृष्टिकोण है और केवल अपमानजनक प्रक्रिया "दुर्घटना" दें। एक और प्रक्रिया उचित कार्यों को ठीक करने के लिए ले जाएगी। जावा में, जिसे आप अनुभव करते हैं, आपके पास रक्षात्मक होने के अलावा कोई विकल्प नहीं है क्योंकि यह एक साझा-राज्य समरूपता मॉडल के साथ एक अनिवार्य भाषा है। चूंकि एरलांग संदेश-पासिंग समेकन के साथ एक कार्यात्मक भाषा है, और क्योंकि प्रक्रियाओं के बीच दोषों को संवाद करने के लिए तंत्र हैं, यह पूरी तरह ठीक है और असफल होने के लिए बेहतर है। – dsmith
जो आर्मस्ट्रांग के thesis के अनुभाग 4.3 और 4.4 देखें।
लिंक टूटा हुआ है, लेकिन यहां काम करने वाला एक है: http://erlang.org/download/armstrong_thesis_2003.pdf –
धारा 4.5 भी मेरी राय में प्रासंगिक है। –
- 1. उद्देश्य-सी कार्यक्रमों में बहुत अधिक सी-स्टाइल?
- 2. में समारोह की तुलना में कम बाध्य
- 3. बच्चे मरने में असफल क्यों हैं?
- 4. गिट रिबेस में अक्सर मर्ज की तुलना में कम विलय विवाद क्यों होते हैं?
- 5. रक्षात्मक प्रोग्रामिंग
- 6. से कम की तुलना में ग्रेटर, पायथन
- 7. कार्यक्रमों की तरह शॉर्टकट निष्पादित
- 8. संपत्तियों की तुलना में सार्वजनिक क्षेत्र तेजी से क्यों हैं?
- 9. चिनाई शैली स्टाइल केवल सीएसएस
- 10. प्रोग्राम के रूप में की तुलना शब्द दस्तावेजों
- 11. पायथन एकाधिक तुलना शैली?
- 12. प्रोग्राम शैली ट्रिगर जोड़ने
- 13. सी ++ कार्यक्रमों में आकार
- 14. मेरी .jar फ़ाइल ग्रहण में प्रोग्राम की तुलना में धीमी गति से क्यों चल रही है?
- 15. पिपिंग प्रोग्राम आउटपुट कम से कम आउटपुट
- 16. 2^एन एक्सपोनेंट गणना बिट-शिफ्ट की तुलना में वास्तव में कम कुशल हैं?
- 17. क्या साइटपॉइंट्स की तुलना में शेयरपॉइंट साइट टेम्पलेट्स वास्तव में कम कुशल हैं?
- 18. क्यों अतिभारित विधियाँ उदाहरण विधि की तुलना में कम प्राथमिकता दी जाती है
- 19. UITableViewCell सेट शैली प्रोग्राम के रूप में
- 20. मूल सी/सी ++ की तुलना में जेआईटी-एड भाषाएं अभी भी धीमी और कम मेमोरी कुशल क्यों हैं?
- 21. एसवीएन? वीएसएस? दूसरे की तुलना में बेहतर क्यों है?
- 22. दो स्ट्रिंग्स '=' का उपयोग करके बराबर तुलना करते हैं लेकिन 'पसंद' में असफल
- 23. क्लोजर हैलो वर्ल्ड प्रोग्राम जावा और पायथन की तुलना में इतना धीमा क्यों है?
- 24. विंडोज के लिए गितब - असफल त्रुटि की तलाश में असफल
- 25. रचनाकारों और रक्षात्मक प्रतिलिपि
- 26. अपरिवर्तनीय कक्षाओं के अंदर गेटर्स में रक्षात्मक प्रतियां क्यों बनाते हैं?
- 27. सी स्टाइल स्ट्रिंग को सी ++ स्टाइल स्ट्रिंग में परिवर्तित करना
- 28. इतने कम संस्करण फ़ाइल सिस्टम क्यों हैं?
- 29. स्टाइल
- 30. जावा प्रोग्राम प्रोग्राम लॉन्चर के रूप में .bat फ़ाइल का उपयोग क्यों करते हैं?
मैं परंपरा के साथ तोड़ने जा रहा हूं और पूछता हूं कि इसे समुदाय विकी क्यों बनाया गया था। :) –
क्या मुझे इसे एक समुदाय विकी नहीं बनना चाहिए? मुझे यकीन नहीं है कि कौन सी चीज एक समुदाय विकी है और जो नहीं है। – Zubair
सामुदायिक विकी के बारे में बड़ी बात यह है कि लोग इसे ठीक करने के लिए किसी भी उत्तर को संपादित कर सकते हैं और उत्तर देने वाले उपयोगकर्ता को कोई अपवर्तित बिंदु नहीं है, जबकि सामान्य मोड अंक देता है और केवल न्यूनतम संख्या वाले उपयोगकर्ता उत्तर संपादित कर सकते हैं। –