"यदि कोई कर्मचारी अपना काम अच्छी तरह से करना चाहता है, तो उसे पहले अपने औजारों को तेज करना होगा।" - कन्फ्यूशियस, "द एनालेक्ट्स ऑफ कन्फ्यूशियस। लू लिंगगोंग"
मुखपृष्ठ > प्रोग्रामिंग > गो के टाइप स्विच में फॉलथ्रू की अनुमति क्यों नहीं है?

गो के टाइप स्विच में फॉलथ्रू की अनुमति क्यों नहीं है?

2024-11-17 को प्रकाशित
ब्राउज़ करें:654

Why is Fallthrough Disallowed in Go's Type Switch?

टाइप स्विच में गिरावट: एक गहन स्पष्टीकरण

गो में टाइप स्विचिंग उनके ठोस प्रकारों के आधार पर मूल्यों के कुशल प्रबंधन की अनुमति देता है। हालाँकि, मानक स्विच-केस स्टेटमेंट के विपरीत, टाइप स्विच में फॉलथ्रू की स्पष्ट रूप से अनुमति नहीं है। यह डिज़ाइन विकल्प इसके औचित्य पर सवाल उठाता है।

कारणों को समझना

गो विनिर्देश में कहा गया है कि टाइप स्विच में "फ़ॉलथ्रू" की अनुमति नहीं है। यह निषेध कई कारकों से उत्पन्न होता है:

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

स्पष्टीकरण समस्या, निम्नलिखित कोड पर विचार करें:switch i := x.(type) { केस इंट: fmt.Printf("%T\n", i) // "int" प्रिंट करता है केस बूल: fmt.Printf("%T\n", i) // "बूल" प्रिंट करता है असफल केस स्ट्रिंग: fmt.Printf("%T\n", i) }

यदि फ़ॉलथ्रू की अनुमति दी गई, तो यह स्पष्ट नहीं है कि स्ट्रिंग केस के लिए किस प्रकार को मुद्रित किया जाएगा। यह अस्पष्ट होगा कि क्या मुझे बूलियन रहना चाहिए या एक इंटरफ़ेस बनना चाहिए {} जिसमें बूलियन और स्ट्रिंग दोनों हों। प्रकार स्विच, समान व्यवहार प्राप्त करने के वैकल्पिक तरीके हैं:

switch i := x.(type) {
case int:
    fmt.Printf("%T\n", i) // prints "int"
case bool:
    fmt.Printf("%T\n", i) // prints "bool"
    fallthrough
case string:
    fmt.Printf("%T\n", i)
}

यह दृष्टिकोण प्रकार बेमेल या अस्पष्टता पेश किए बिना विभिन्न प्रकारों के अधिक विशिष्ट प्रबंधन की अनुमति देता है।

नवीनतम ट्यूटोरियल अधिक>

चीनी भाषा का अध्ययन करें

अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।

Copyright© 2022 湘ICP备2022001581号-3