कई उत्तर कथन की आवश्यकता के कारण गिरने की क्षमता पर ध्यान केंद्रित करने लगते हैं break
।
मेरा मानना है कि यह केवल एक गलती थी, बड़े पैमाने पर क्योंकि जब सी डिजाइन किया गया था तो लगभग अनुभव नहीं था कि इन निर्माणों का उपयोग कैसे किया जाएगा।
पीटर वान डेर लिंडेन अपनी पुस्तक "विशेषज्ञ सी प्रोग्रामिंग" में इस मामले को बनाते हैं:
हमने Sun C कंपाइलर स्रोतों का विश्लेषण करके देखा कि कितनी बार डिफ़ॉल्ट गिरावट का उपयोग किया गया था। सन एएनएसआई सी कंपाइलर फ्रंट एंड में 244 स्विच स्टेटमेंट हैं, जिनमें से प्रत्येक में औसतन सात केस हैं। इन सभी मामलों में से केवल 3% में होता है।
दूसरे शब्दों में, 97% समय में सामान्य स्विच व्यवहार गलत है । यह सिर्फ एक संकलक में नहीं है - इसके विपरीत, जहां के माध्यम से गिरना इस विश्लेषण में इस्तेमाल किया गया था यह अक्सर उन परिस्थितियों के लिए होता था जो अन्य सॉफ़्टवेयर की तुलना में एक कंपाइलर में अधिक बार होते हैं, उदाहरण के लिए, जब संचालक संचालक जो एक या दो ऑपरेटर हो सकते हैं। :
switch (operator->num_of_operands) {
case 2: process_operand( operator->operand_2);
/* FALLTHRU */
case 1: process_operand( operator->operand_1);
break;
}
केस फ़ॉल के माध्यम से इतनी व्यापक रूप से एक दोष के रूप में पहचाना जाता है कि एक विशेष टिप्पणी सम्मेलन भी है, जो ऊपर दिखाया गया है, जो बताता है कि "यह वास्तव में उन 3% मामलों में से एक है जहां से गुजरना वांछित था।"
मुझे लगता है कि प्रत्येक केस ब्लॉक के अंत में एक स्पष्ट कूद स्टेटमेंट की आवश्यकता के लिए C # के लिए यह एक अच्छा विचार था (जबकि अभी भी कई केस लेबल को स्टैक करने की अनुमति है - जब तक कि बयानों का केवल एक ही ब्लॉक है)। C # में आपके पास अभी भी एक मामला दूसरे के माध्यम से गिर सकता है - आपको बस एक का उपयोग करके अगले मामले में कूदकर गिरावट को स्पष्ट करना होगा goto
।
यह बहुत बुरा है जावा ने सी शब्दार्थ से तोड़ने का अवसर नहीं लिया।