2011-08-25 9 views
29

मुझे आश्चर्य है ... मैंने कुछ समय पहले जाने के बारे में पढ़ा है और मैंने इसमें कुछ प्रोग्राम करने की कोशिश की है। मुझे काफी रोचक लगता है। लेकिन मैं handling "exceptions" in this language पर पहुंच गया हूं। मैंने उनके दृष्टिकोण के बारे में पढ़ा है और यह उचित लगता है। मैं जानना चाहता हूं कि गो की शैली पर मानक असाधारण दृष्टिकोण के क्या फायदे हैं? पक्ष और विपक्ष क्या होते हैं?Google गो भाषा में अपवाद हैंडलिंग

संपादित करें सीधे होने के लिए: मैं अपवादों के बारे में कोई पवित्र युद्ध नहीं करना चाहता हूं। मुझे आश्चर्य है कि क्या हैंडलिंग त्रुटियों की इस शैली के कोई फायदे हैं? मानक अपवादों पर इस शैली के वास्तविक फायदे क्या हैं? क्या यह आश्चर्यजनक है?

उत्तर

50

आतंक/पुनर्प्राप्ति प्रयास/पकड़ अपवादों के नैतिक समकक्ष है। सतही अंतर (वाक्यविन्यास) और एक सूक्ष्म, लेकिन महत्वपूर्ण, इच्छित उपयोग का अंतर है।

सामान्य रूप से अपवादों के साथ समस्याओं का सबसे अच्छा स्पष्टीकरण "Cleaner, more elegant, wrong" है और यह अपवाद बनाम त्रुटि कोडों के पेशेवरों/विपक्ष का एक अच्छा अवलोकन है।

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

अपवादों को उजागर करने वाली अन्य भाषाएं उनके उपयोग को बढ़ावा देती हैं और अभ्यास में उन्हें अक्सर उपयोग किया जाता है (कभी-कभी दुरुपयोग भी किया जाता है)।

घबराहट/पुनर्प्राप्ति के उपयोग को हतोत्साहित करें। आप इसे कर सकते हैं लेकिन आपको केवल सीमित परिदृश्यों में ऐसा करना है।

यदि आप गो की अपनी मानक लाइब्रेरी देखते हैं, तो अधिकांश uses of panic घातक त्रुटियों को सिग्नल करने के लिए हैं, या तो लाइब्रेरी कोड में आंतरिक त्रुटि (यानी बग) या पुस्तकालय को गलत डेटा के साथ कॉल करना (उदाहरण के लिए जेसन को गैर-जेसन डेटा पास करना डिकोडिंग फ़ंक्शन)।

लेकिन जैसा लेख आपने इंगित किया है: "गो पुस्तकालयों में सम्मेलन यह है कि जब भी एक पैकेज आंतरिक रूप से आतंक का उपयोग करता है, तब भी इसकी बाहरी एपीआई स्पष्ट त्रुटि वापसी मान प्रस्तुत करती है।"

यह सी #, जावा, पायथन या सी ++ जैसी भाषाओं से अलग है, जहां बहुत से मानक लाइब्रेरी कोड सिग्नल त्रुटियों के लिए अपवाद फेंक सकते हैं। वे भाषाएं आप अपवादों का उपयोग करना चाहते हैं। घबराहट/पुनर्प्राप्ति के उपयोग को हतोत्साहित करें।

संक्षेप में:

  • को "गिरावट" के अपने कार्यक्रम:

    • मुहावरेदार जाओ शैली त्रुटि कोड का उपयोग करने के त्रुटियों के बारे में फोन करने वाले
    • उपयोग आतंक/ठीक हो केवल दुर्लभ मामलों में बताने के लिए है जब आंतरिक असंगतता का सामना करना पड़ता है तो आपके कोड में बग का संकेत मिलता है। यह मूल रूप से एक डीबगिंग सहायता है। (लेकिन यदि कोड दूसरों के द्वारा इस्तेमाल किया जा रहा है, कॉल करने के लिए इस तरह घबरा बेनकाब कभी नहीं)
    • अगर यह नाटकीय रूप से अपने कोड में त्रुटि हैंडलिंग सरल

व्यवहार में महत्वपूर्ण बात यह है भाषा का मुहावरेदार उपयोग करने के लिए है अंदाज। जाओ में त्रुटि कोड लौट रहा है और आतंक/पुनर्प्राप्ति से परहेज कर रहा है। सी # में कुछ त्रुटियों को सिग्नल करने के लिए अपवादों का उपयोग कर रहा है।

+0

धन्यवाद, यह मेरा उत्तर है। – Archie

+0

जाओ लेखक पैनिक्स का उपयोग करके बिल्कुल हतोत्साहित नहीं करते हैं (कम से कम अब नहीं)। उदाहरण के लिए, जाओ विकी गहराई से नेस्टेड कॉल के लिए पैकेज स्तर पर पैनिक्स का उपयोग करके स्पष्ट रूप से समर्थन करता है। https://code.google.com/p/go-wiki/wiki/PanicAndRecover#Usage_in_a_Package –

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