मेरे पास एक switch
संरचना है जिसे संभालने के लिए कई मामले हैं। switch
एक से अधिक चल रही है enum
जो संयुक्त मूल्यों के माध्यम से डुप्लिकेट कोड के मुद्दे बन गया है:
// All possible combinations of One - Eight.
public enum ExampleEnum {
One,
Two, TwoOne,
Three, ThreeOne, ThreeTwo, ThreeOneTwo,
Four, FourOne, FourTwo, FourThree, FourOneTwo, FourOneThree,
FourTwoThree, FourOneTwoThree
// ETC.
}
वर्तमान में switch
संरचना प्रत्येक मूल्य को अलग से संभालती है:
// All possible combinations of One - Eight.
switch (enumValue) {
case One: DrawOne; break;
case Two: DrawTwo; break;
case TwoOne:
DrawOne;
DrawTwo;
break;
case Three: DrawThree; break;
...
}
आपको वहां विचार मिलता है। मैंने वर्तमान में if
इसके बजाय एक एकल पंक्ति के साथ संयोजन को संभालने के लिए एक खड़ी संरचना में तोड़ दिया है :
// All possible combinations of One - Eight.
if (One || TwoOne || ThreeOne || ThreeOneTwo)
DrawOne;
if (Two || TwoOne || ThreeTwo || ThreeOneTwo)
DrawTwo;
if (Three || ThreeOne || ThreeTwo || ThreeOneTwo)
DrawThree;
यह अविश्वसनीय रूप से लंबे तार्किक मूल्यांकन के मुद्दे को प्रस्तुत करता है जो पढ़ने के लिए भ्रमित कर रहे हैं और बनाए रखने में मुश्किल हैं। इसे बाहर करने के बाद मैंने विकल्पों के बारे में सोचना शुरू किया और switch
मामलों के बीच में एक संरचना के विचार के बारे में सोचा ।
मुझे goto
उस मामले में उपयोग करना होगा क्योंकि C#
गिरावट की अनुमति नहीं है। हालाँकि, यह switch
संरचना में इधर-उधर कूदने के बावजूद अविश्वसनीय रूप से लंबी तर्क श्रृंखला को रोकता है , और यह अभी भी कोड दोहराव में लाता है।
switch (enumVal) {
case ThreeOneTwo: DrawThree; goto case TwoOne;
case ThreeTwo: DrawThree; goto case Two;
case ThreeOne: DrawThree; goto default;
case TwoOne: DrawTwo; goto default;
case Two: DrawTwo; break;
default: DrawOne; break;
}
यह अभी भी एक साफ पर्याप्त समाधान नहीं है और उस goto
कीवर्ड से जुड़ा एक कलंक है जिससे मैं बचना चाहूंगा। मुझे यकीन है कि इसे साफ करने का एक बेहतर तरीका होना चाहिए।
मेरा प्रश्न
क्या पठनीयता और स्थिरता को प्रभावित किए बिना इस विशिष्ट मामले को संभालने का एक बेहतर तरीका है?
goto
तब करते हैं जब आपकी भाषा में उच्च स्तरीय संरचना मौजूद नहीं होती है। मैं कभी-कभी चाहता था कि ए fallthru
; कीवर्ड goto
लेकिन ओह अच्छी तरह से उस विशेष उपयोग से छुटकारा पाने के लिए ।
goto
C # जैसी उच्च-स्तरीय भाषा में एक का उपयोग करने की आवश्यकता महसूस होती है , तो संभवतः आपने कई अन्य (और बेहतर) डिज़ाइन और / या कार्यान्वयन विकल्पों की अनदेखी की है। अति हतोत्साहित।