2010-06-02 17 views
9

प्रोग्रामिंग का अधिक उचित तरीका कौन सा है, यदि कोई वैरिएबल एन मान ले सकता है तो हम मानों की वैधता की जांच कर सकते हैं या मान लें कि यदि सभी एन-आई चेक विफल हो जाते हैं तो यह एनएच वैल्यू होगा।प्रोग्रामिंग

उदाहरण के लिए अगर हम एक चर के रूप में एम या एफ इस प्रयोग लिंग संग्रहीत करता है:

If gender = "M" 
    do male_processing 
else 
    do female_processing 
endif 

या इस:

If gender = "M" 
    do male_processing 
else 
    if gender = "F" 
    do female_processing 
    else 
    print "Something has gone wrong Gender has a value " Gender 
    endif 

endif 
+2

यहां पोस्ट करते समय, अपना कोड ठीक से इंडेंट करें और टेक्स्ट प्रविष्टि क्षेत्र के ऊपर 1010 बटन के साथ प्रारूपित करें। –

+0

क्षमा करें मुझे एहसास हुआ कि सबमिट करने के बाद। आपका बहुत बहुत धन्यवाद! – Raju

+1

इस बीच, असली दुनिया में, लिंग एक बुलियन मूल्य नहीं है। वहाँ बहुत सारे लिंगकर्मी लोग हैं। – TRiG

उत्तर

1

निर्माण के इस प्रकार के लिए, मैं स्विच बयान का उपयोग करना चाहते। यह कम है (यह नहीं है), लेकिन यह अधिक पठनीय (IMHO) है इसलिए नहीं कि:

switch(gender) { 
    case "M": 
    doMaleSpecificStuff(); 
    break; 
    case "F": 
    doFemaleSpecificStuff(); 
    break; 
    default: 
    throw AnyError; 
} 
4

कुछ ही समय - कि किस प्रकार चर रहा है पर निर्भर करता है। यदि यह एक बूलियन या किसी प्रकार की गणना है और इसमें कोई अन्य मूल्य नहीं है (null सहित), एक साधारण else खंड पर्याप्त होगा।

तुम भी तो जैसे एक साधारण टिप्पणी जोड़ सकते हैं:

if male: 
    do_male_stuff() 
else: #obviously female 
    do_female_stuff() 

कुछ इस तरह होने सिर्फ गलत लगता है:

bool = SOME_BOOLEAN_VALUE 
if bool: 
    do1() 
elif not bool: 
    do2() 
else: 
    huh() #?!?! 

निष्कर्ष: किसी प्रत्येक के लिए एक if/else/else if खंड है संभावित परिदृश्य, लेकिन से अधिक नहीं, और इसे पठनीय रखें।

0

यदि एम या एफ के अलावा कोई तीसरा मान संभव है, तो आपको दूसरे फॉर्म का उपयोग करना चाहिए। यदि परीक्षण किया जा रहा चर एक प्रकार का है जो केवल एम और एफ मान ले सकता है, तो आपको पहले उपयोग करना चाहिए।

+0

जरूरी नहीं है। यदि एम (एफ) के अलावा कुछ (कोई भी) मूल्य संभव है, तो हो सकता है कि वे "do_female_stuff()" को डिफ़ॉल्ट कार्रवाई के रूप में चाहते हैं - इस मामले में, आप शायद अभी भी केवल दो विकल्प ("एम" या * अन्य चाहते हैं *)। हालांकि, आप निश्चित रूप से टिप्पणी करना चाहते हैं कि यह एक जानबूझकर डिफ़ॉल्ट है। – hemp

+0

मुझे बहुत खुशी है कि आपने इसका एक उदाहरण शामिल नहीं किया है। –

+0

@hemp यह ओपी के दूसरे उदाहरण से स्पष्ट है, जिसे पहले के साथ संगत माना जाता है, यह मामला नहीं है। –

2

... या, ओओ दुनिया में आप बेस क्लास बना सकते हैं, Gender कहें और इसे Male और Female कक्षाओं के साथ बढ़ाएं। एक चर के लिए मूल्य 'एम' या 'एफ' असाइन करने के बजाय, आप पुरुष या महिला वर्ग का एक उदाहरण असाइन कर सकते हैं। फिर बस बेस क्लास में निर्दिष्ट विधि को कॉल करें, उदाहरण के लिए doGenderSpecificStuff()। वहां if-elses की कोई ज़रूरत नहीं है।

+1

ओपी विशेष रूप से अगर-अन्य खंडों के बारे में पूछ रहा है। बेशक यह एक ओओ तरीके से किया जा सकता है, लेकिन यह सवाल नहीं है। –

+0

फिर क्या होने का मुद्दा क्या है ?? – VoodooChild

+1

@ युवाल: यदि ओपी को यह उत्तर अनुचित लगता है, तो मैं इसे हटा दूंगा। लेकिन कृपया ओपी तय करें। – fish

10

कि उदाहरण के लिए, मैं अगर सब पर प्रयोग नहीं करेंगे, मैं या तो अपने दूसरे उदाहरण के लिए स्विच का उपयोग करेंगे

switch (gender) 
    case "M": 
     do male_processing 
     break 
    case "F": 
     do female_processing 
     break 
    default: 
     print "Something has gone wrong Gender has a value " Gender 
endswitch 

या अपने पहले उदाहरण के लिए, मैं बस अपवाद एक त्रुटि के रूप में प्रयोग का इलाज होता है ASSERT

assert (gender = "M" or gender = "F") 
+0

सभी भाषाएं सभी परिवर्तनीय प्रकारों पर 'स्विच' नहीं कर सकती हैं ... हालांकि अधिकांश भाषाओं में अगर-और संरचना होती है। –

+3

+1 - स्विच के लिए नहीं, बल्कि तीसरे मामले के इलाज के लिए। आप - ** तीसरे मामले का इलाज करना चाहिए - इससे कोई फर्क नहीं पड़ता कि यह 'ईएलएसई', 'डिफॉल्ट', 'एसएसएसईआरटी' है या फिर भी आप इसे करते हैं। इसके लिए जाँच करें। आपका अनुयायी/भविष्य का आत्म आपको धन्यवाद देगा। – Konerak

1

gendre के मूल्यों केवल 'एम' या 'एफ' हो सकता है, तो आप एक ज़ोर करने के लिए इस्तेमाल कर सकते हैं इस स्पष्ट कर दूं:

Assert(gender = "M" OR gender = "F") 
If gender = "M" 
    do male_processing 
else 
    do female_processing 
endif 
0

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

दुर्भाग्यवश ऐसे लाभों को अनदेखा करते हैं, इसलिए अधिकांश स्थितियों में आपको सभी ज्ञात संभावनाओं को स्पष्ट रूप से समझा जाना चाहिए।

0

यदि 'एफ' या 'एम' के लिए कोई उपयोगकर्ता इनपुट है तो आपको 3 परिदृश्यों का खतरा होना चाहिए। एफ, एम और अन्य। यदि कोई उपयोगकर्ता इनपुट नहीं है, तो आप दो का उपयोग कर सकते हैं और एक बूल वैल्यू यानी कर सकते हैं। अगर कथन के लिए है तो यह बहुत अधिक पठनीय होगा।

1

यदि आप गणित प्रकार का उपयोग करते हैं तो उसके पास केवल आपके द्वारा अपेक्षित मूल्य होंगे और आपको केवल असाइनमेंट पर IF में अप्रत्याशित मानों से निपटने की आवश्यकता नहीं है।

0

इनपुट जांचने और जितनी जल्दी हो सके सामान्य करने की कोशिश करें, फिर आप सुरक्षित रूप से पहले विकल्प का उपयोग कर सकते हैं।

यदि आपका उपयोगकर्ता इंटरफ़ेस इस चर को इनपुट (जैसे एक टेक्स्ट बॉक्स) करने की अनुमति देता है, तो आपके उदाहरण में, आप "एम", "पुरुष", "मैन", "बॉय" या "मैनलिन "पुरुष के लिए संभव ईमानदार इनपुट के रूप में, यह भी विचार करने से पहले कि कोई बेवकूफ जवाब का दावा कर सकता है। इन मूल्यों की जांच करने से पहले इन मानों की जांच करके (और सामान्यीकरण) करके, आप उपयोगकर्ता को अधिक प्रतिक्रियाशील प्रतिक्रिया प्रदान कर सकते हैं।

यदि आपका उपयोगकर्ता इंटरफ़ेस इसे रेडियो बटन पर रोकता है, तो यह पहले भी सामान्यीकृत होता है।

यदि मूल्य किसी प्रकार के डेटा स्टोर से प्राप्त किया जाता है, तो आवेदन के आधार पर, और उस डेटास्टोर की अखंडता के बारे में आपका ज्ञान, पहले रिकॉर्ड की वैधता की जांच करने में कोई मूल्य हो सकता है या नहीं भीतर रखे मूल्यों पर अभिनय।

यदि अधिकांश रिकॉर्ड अनुरूप होने की संभावना है, और विभिन्न मूल्यों को लागू करने वाले कार्यों को सस्ता और उलटा कर दिया जाता है, तो मैं दूसरा विकल्प उपयोग करता हूं, और यदि कोई मान अनुपयुक्त है तो अपवाद फेंक दें।

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