आप इस नए के बारे में क्या सोचते हैं अगर-तब वाक्य रचना [बंद]


11

मैं बस कुछ सोच रहा था, जो मेरे इफ़-इलीफ़-बाकी नियंत्रणों के लिए वास्तव में अच्छा होगा।


if condition:
    stuff()
elif condition:
    otherstuff()
then:
    stuff_that_applies_to_both()
else:
    stuff_that_doesnt_aply_to_either()

तो मूल रूप thenसे चलाया जा सकता है जब किसी भी स्थिति को चलाया जाता है और किसी अन्य स्थिति से बाहर निकलता है। क्या आपको लगता है कि यह उपयोगी है? यह अजवायन के अलावा-और-के समान है।

मुझे लगता है कि आप में से कुछ बहुत प्रारंभिक कार्यान्वयन कर रहे हैं। thenब्लॉक की तरह ही होगा elseएक में ब्लॉक try-exceptअजगर में ब्लॉक। मैं जो असली कारण बताता हूं, वह इस तरह की स्थितियों के लिए है।


m = {}
if condition == '1':
    m['condition'] = condition
elif condition2 == '3':
    m['condition2'] = condition2
elif condition3 == 'False':
    m['condition3'] = True
then:
    run_test_that_relies_on_one_of_the_conditions_being_true()

return m

thenब्लॉक पहले के दायरे वाला जैसे अगर है elseहै। इसलिए घोंसला ठीक काम करता है। और अगर आपको स्टेटमेंट्स से पहले एक विधि को चलाने की आवश्यकता है, जिसका वास्तव में इस उपयोग के मामले से कोई लेना-देना नहीं है।


यह कैसे हो सकता है?
aggietech

6
बॉक्स के बाहर सोचने के लिए +1, लेकिन मैं वास्तव में इसे लागू करने के लिए मतदान नहीं करूंगा। मेरा उत्तर नीचे क्यों देखें।
साने ऑक्ट

1
finallyजावा में 'तो' कार्य करता है ?
एलेक्स फीमैन

1
मुझे thenथोड़ा भ्रमित करने वाला लगता है। आमतौर पर thenएक के बाद होने के लिए निहित है if। मेरा मतलब है, आप कह रहे हैं, if condition, then stuff()लेकिन फिर कहने के लिए आगे बढ़ेंthen stuff that applies to both
मैट ओलेनिक

2
एक दिलचस्प विचार अभ्यास के लिए +1, लेकिन मैं बैड आइडिया के तहत इसे दाखिल करने वाले उत्तरों से सहमत हूं। यह सिर्फ सहज नहीं है, और मैं वास्तव में कुछ कोडर्स को ट्रिपिंग करते हुए देख सकता हूं।
ब्लेयरहिपो

जवाबों:


17

मुझे लगता है कि यह भयानक लग रहा है। यदि आप कोड को विभिन्न स्थितियों के बाद चलाना चाहते हैं तो या तो (ए) उन शर्तों को पुन: जाँचें या (बी) संकेतित सफलता की स्थिति के लिए एक चर सेट करें।


2
मैं सहमत हूं - बिना स्पष्टीकरण के इसका मतलब निकालने में बहुत मुश्किल है जैसे आपने दिया।
tcrosley

किसी चीज़ की व्याख्या की आवश्यकता क्यों होती है?
फाल्मारी

5
क्योंकि यह कोड को पढ़ने में कठिन बनाता है।
अत्तन

मुझे यकीन नहीं है कि यह उचित है। कोड में हर निर्माण को एक बार समझाया जाना है।
मगस

14

आम तौर पर आप पहले से ही एक स्विच / केस के साथ कर सकते हैं और एक स्विच / केस जो आप प्रस्ताव कर रहे हैं उस पर अधिक ठीक ट्यून नियंत्रण प्रदान करता है।

यह भी तार्किक रूप से ठीक से नहीं पढ़ता है। यदि A और यदि B है तो C. किसी को यह नहीं बताता है कि C को निष्पादित किया जाएगा यदि A या B सत्य का मूल्यांकन करते हैं।


2
अजगर के पास स्विच / केस स्टेटमेंट नहीं है
फल्म्रीरी

2
मुझे नहीं लगता कि इस प्रश्न का उत्तर सीधे पायथन की ओर ही दिया गया था, लेकिन यदि यह इरादा था तो कृपया पायथन को भी टैग करें।
ब्रायन आर। बॉन्डी

खैर, यह सीधे तौर पर अजगर की ओर नहीं है। उदाहरण अजगर में था। लेकिन अगर आपकी प्रतिक्रिया इस बात की आवश्यकता नहीं है कि "स्विच स्टेटमेंट" है, तो अजगर के पास नहीं है।
फाल्मरी

1
@Falmarri: काफी साफ है, इसलिए मुझे लगता है कि मेरा जवाब यह होगा कि क्लासिक स्विच स्टेटमेंट का समर्थन करने के लिए पायथन बेहतर होगा।
ब्रायन आर। बॉन्डी

प्रश्न में कोड पायथन में है इसका मतलब यह नहीं है कि प्रश्न पायथन के बारे में है, क्योंकि यह स्यूडोकोड भी हो सकता है। यदि यह केवल पायथन के बारे में है तो इसे इस तरह टैग किया जाना चाहिए
phuclv

8

दिलचस्प है, लेकिन मुझे लगता है (पठनीयता, तर्क और वाक्यविन्यास समस्याओं के लिए निमंत्रण)

संपादित करें: आपका if-elif बहुत सरल है - क्या होगा अगर 10 elif थे? 20? क्या सभी स्थितियों को सही होना चाहिए? इस के बदलाव क्या हैं?
आपका if-elif बहुत सरल है - क्या होगा अगर 10 elif थे? 20? कि यह काफी अपठनीय नहीं होगा?

इसके अलावा, आसानी से कोशिश की गई और सच स्थापित पद्धति द्वारा प्राप्त किया जा सकता है:

if (thisCondition or thatCondition)
{
  if (thisCondition)
     stuff();
  else
     otherstuff();

    stuff_that_applies_to_both();
}
else
{
    stuff_that_doesn't_aply_sic_to_either();
}

क्या होता है अगर "stuff_that_applies_to_both" को व्यक्तिगत चरणों से पहले होना चाहिए? आपका कोड इस मामले को संभालता नहीं है:

if (thisCondition or thatCondition)
{
  stuff_that_applies_to_both();

  if (thisCondition)
     stuff();
  else
     otherstuff();
}
else
{
    stuff_that_doesn't_aply_sic_to_either();
}

अंत में, यह सिंटैक्स अधिक शर्तों के साथ अधिक से अधिक लचीलेपन की अनुमति देता है: यदि (यह कॉन्डिशन या कि कॉडिशन या कोई अन्य कॉंडिशन) {stuff_that_applies_to_all ();

  // Any combination of the three conditions using 
  // whichever logical syntax you'd like here
  if (thisCondition and anotherCondition)
     stuff();
  else if (thisCondition or thatCondition)
     stuff_number_2();
  else
     otherstuff();
}
else
{
    stuff_that_doesn't_aply_sic_to_either();
}

मैं / अगर का उपयोग कर रहा हूँ, लेकिन आसानी से एक झंडे के साथ एक स्विच स्टेटमेंट का उपयोग कर सकता है:

Boolean conditionApplies = true;

switch (someConditionToCheck)
{
    case thisCondition:
      stuff();
      break;

    case thatCondition:
        otherStuff();
        break;

    default:
        stuff_that_doesnt_aply_sic_to_either();
        conditionApplies = false;
        break;
}

if (conditionApplies)
    stuff_that_applies_to_both();

ध्यान दें कि मुझे वास्तव में conditionApplies ध्वज की आवश्यकता नहीं थी - मैं दोनों गैर-डिफ़ॉल्ट स्थितियों के लिए "stuff_that_applies_to_both ()" फ़ंक्शन जोड़ सकता था - मैंने ऐसा सिर्फ इसलिए किया था कि यह ऊपर परिभाषित सिंटैक्स की तरह दिखता है, फिर भी " इसके बजाय "और"।

इसलिए, यह मुझे एक बहुत ही विशेष वाक्यविन्यास लगता है, जहां एक अधिक सामान्य वाक्यविन्यास बिल और अधिक भरता है।

एक संभावित सुविधा के बारे में सोचने के लिए +1 (ऐसा करते रहें!), लेकिन मैं इसे लागू करने के लिए मतदान नहीं करूंगा।


1
+1 के लिए "आजमाया हुआ और सच्चा स्थापित कार्यप्रणाली" - अगर किसी समस्या का एक उचित समाधान है, तो आमतौर पर इसका उपयोग करना सबसे अच्छा है :)
शयनकक्ष

what if there were 10 elifs? 20? Would all conditions need to be true?यह संभव नहीं है। केवल 1 एलीफ सच हो सकता है क्योंकि यह अधिक मूल्यांकन करना बंद कर देता है।
फाल्मरी

मेरी गलती - मैंने इसे "और" जब आपका मतलब था "या" पढ़ा। हालाँकि, मैं अपने उत्तर के साथ खड़ा हूँ - आपने जो इंगित किया था, उससे इसे अपडेट करूँगा।
1955 को

क्या आपको वास्तव में लगता है कि आपने जो वाक्यविन्यास यहाँ पोस्ट किया है वह मेरे द्वारा सुझाए गए से अधिक स्पष्ट है। न केवल आप दो बार अपनी शर्तों की जाँच कर रहे हैं, बल्कि नॉन-नेस्टिंग हमेशा घोंसले से बेहतर है
फल्मरी

1
जैसा कि आपका होगा, जब तक कि आपका "तब" वास्तव में सभी स्थितियों पर लागू होता है, जो, जैसा कि आप उनमें से अधिक जोड़ते हैं, कम और कम संभावना बन जाती है। और व्यक्तिगत रूप से, C / C ++ / C # बैकग्राउंड से आने पर, मुझे स्प्लिट सिंटैक्स की तुलना में काफी कम कंफ्यूजिंग लगता है (यानी यहाँ "अगर" या शायद "एल्सिफ़" में कुछ करना, और फिर नीचे कूदना और कुछ करना "तब" में। मैं, व्यक्तिगत रूप से, सभी स्थितियों को एक साथ करने के लिए वाक्यविन्यास को अधिक पठनीय पाता हूं। हो सकता है कि यह सही न हो, लेकिन यह मेरी दिन-प्रतिदिन की दुनिया में एक अधिक स्थापित अवधारणा है।
विंको द साने

2

मैं आज इस तरह से कुछ का उपयोग करने में बुरा नहीं मानूंगा। लेकिन, यह सुनिश्चित करने के लिए कि मैं इसका उपयोग तब तक करूंगा जब तक मैं बार-बार दोहराता हूं।

कोड कम से कम बेहतर प्रदर्शन के बिना बेहतर लगेगा। हालांकि मुझे पसंद Else Ifहै elif। मैं के Thenसाथ Doऔर अंतिम के Elseसाथ बदल देंगे Otherwise


अच्छी तरह से अजगर के रचनाकारों से बात करें, मुझसे नहीं =]
फाल्मरी

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

वैसे यह नई भाषा के लिए जरूरी नहीं है, लेकिन जरूरी नहीं कि यह अजगर के लिए भी हो। सामान्य रूप से वाक्य रचना नियम के लिए बस एक नया विचार। इसे अपेक्षाकृत कम दुष्प्रभावों के साथ किसी भी भाषा में लागू किया जा सकता है।
फाल्मरी

0

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

या आपके पास कई ifs हो सकते हैं, एक blah लिख सकते हैं और सभी ifs भूल सकते हैं लेकिन किसी को इसकी आवश्यकता होती है जो कुछ तोड़ देगा। इसके अलावा संभावना यह है कि अगर आपको उन्हें हर ब्लॉक का पालन करने की आवश्यकता है तो आप इसे ब्लॉक में डाल देंगे। संभवतः किसी अन्य में एक बूल सेट करना (NoUpdate = true) और बस एक if ((NoUpdate) {} को सीधे लिखें, जिसके अंतर्गत स्पष्ट है और यदि एक द्वारा सेट किया जा सकता है

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


Possibly setting a bool in else (NoUpdate=true) and just write a if(!NoUpdate) {} directly under which is clearer and can be set by an ifयह वास्तव में यह रोकने के लिए क्या माना जाता है। यह एक एलीफ बयान का पूरा बिंदु है। एलिफ आवश्यक नहीं है, अगर यह बयानों के साथ जांचा जा सकता है, लेकिन यह जटिल हो जाता है।
फाल्मरी

0

मुझे आपका वाक्यविन्यास भ्रमित लगता है, लेकिन मुझे अवधारणा में कुछ मूल्य दिखाई देता है। वैचारिक रूप से, जब मैंने इस मुद्दे पर विचार किया है, तो जो मैंने खुद को चाहा है, वह एक "अनलेश" है, जो मूल रूप से उन मामलों में निष्पादित करेगा जहां अंतिम elseआग नहीं लगी थी। इसे उस कोण से देखने पर, मैं सुझाव दूंगा कि कोई भी इसके माध्यम से समान परिणाम प्राप्त कर सकता है:

  करना
  {
    अगर (कंडीशन 1)
      ... केवल कंडीशन 1 के लिए सामान
    और अगर (कंडीशन 2)
      ... केवल कंडीशन 2 के लिए सामान
    अन्य
    {
      ... न तो हालत के लिए सामान
      टूटना;
    }
    ... दोनों स्थितियों के लिए सामान
  } जबकि (0); // विराम के लिए निरंतरता बिंदु

कुछ मामलों में एक और विकल्प हो सकता है:

  अगर (स्थिति 1 और& (क्रिया 1,1)) ||
       (कंडीशन 2 && (एक्शन 2,1)) ||
       (Action_for_neither, 0))
    action_for_either;

थोड़ा बुरा लग रहा है, लेकिन कुछ मामलों में कोड को डुप्लिकेट करने या उपयोग करने के अलावा घटनाओं के वांछित अनुक्रम को व्यक्त करने का कोई अच्छा तरीका gotoनहीं हो सकता है (जो कि इतना बुरा नहीं हो सकता है, कार्टून को छोड़कर कोई व्यक्ति यहां सम्मिलित कर सकता है)।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.