2009-06-23 13 views
9

अन्य प्रकार के लूपों पर बेहतर विकल्प कब होता है? कुछ सामान्य परिदृश्य क्या हैं जहां यह दूसरों की तुलना में बेहतर है?एक समय-समय पर उचित कब होता है?

मैं थोड़ी देर के कार्य को समझता हूं, लेकिन इसका उपयोग कब नहीं करता।

+3

होमवर्क प्रश्न? – Hardwareguy

+0

मुझे यकीन है कि मैंने पहले यह प्रश्न देखा है। हालांकि, एक डुप्ली नहीं मिल रहा है। – Nosredna

+1

@ हार्डवेयरगू बिल्कुल नहीं। यह सिर्फ तब हुआ जब मैं किसी ऐसी चीज़ पर काम कर रहा था जिसे मैंने अपनी पूरी परियोजना में उपयोग नहीं किया है। –

उत्तर

52

आप कुछ में कम से कम एक बार किया की जरूरत है, लेकिन पाश शुरू करने से पहले समय की संख्या पता नहीं है जब।

+0

यह आसान नहीं कहा जा सका। +1 –

+0

लेकिन ऐसे समय होते हैं जब आपको ऐसा करने की आवश्यकता नहीं होती है ... ऐसा करने के दौरान, जैसे कुछ (input.hasNext()), इसलिए यह एक कठिन नियम नहीं है। –

+1

@ थॉमस ओवेन्स: ठीक है, आप हर तरह के लूप को कथन के लिए सरल के साथ कर सकते हैं, इसलिए आपको प्रति करने की आवश्यकता नहीं है, लेकिन मैं कहूंगा कि यदि आप इरादा व्यक्त करना चाहते हैं तो यह स्थिति है करो/जबकि पूरी तरह से फिट बैठता है। –

3

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

do { 
    //do something 
} while (condition); 
0

जब इसे और अधिक कुछ करने के लिए उपयुक्त है और फिर बूलियन अभिव्यक्ति का मूल्यांकन ... या ब्रायन के रूप में कहा ... जब आप कुछ में कम से कम एक बार किया की जरूरत है। यह वाक्यविन्यास लूप से पहले लूप के बाद बूलियन अभिव्यक्ति के मूल्यांकन को स्थानांतरित करता है।

1

यह उचित है जब आप लूप निष्पादन के अंत में अपनी स्थिति जांचना चाहते हैं। इसलिए लूप हमेशा कम से कम एक बार चलाएगा और फिर यह सत्यापित करेगा कि इसे आगे फिर से चालू करना चाहिए या नहीं।

0

जब भी लूप में होता है तो कम से कम एक बार निष्पादित करने की आवश्यकता होती है।

0

मैंने लंबे समय से यह माना है कि सी-आधारित भाषाओं में ऐसा नहीं किया जाता है जितना होना चाहिए क्योंकि "जबकि" कीवर्ड का पुन: उपयोग अजीब और भ्रमित है। पास्कल की दोहराना-जब तक किसी भी कीवर्ड को इसकी शुरुआत-अंत-अंत संरचना के साथ साझा नहीं करती है।

मैं किसी दिन कोड का एक बड़ा ढेर का विश्लेषण करें और देखें कि क्या जबकि अन्य भाषाओं में समान निर्माणों की तुलना में सी कोड में underrepresented है अच्छा लगेगा।

2

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

do { 
    if (field1_is_invalid) { 
     $err_msg = "field1 is invalid"; break; 
    } 

    if (field2_is_invalid) { 
     $err_msg = "field2 is invalid"; break; 
    } 

    .. check half a dozen more things .. 

    // Only executes if all checks succeed. 
    do_some_updates(); 

} while (false) 

, मुझे लगता है यह तकनीकी रूप से एक पाश नहीं है: शायद नहीं सबसे अच्छा अभ्यास है, लेकिन यह कई विकल्पों की तुलना में अधिक पठनीय है। अधिक गोटो :)

+1

सिर्फ एक ही तर्क को एक फ़ंक्शन में लपेटना नहीं होगा और रिटर्न के साथ ब्रेक को प्रतिस्थापित करना अधिक पठनीय होगा? आप संकेत दे सकते हैं कि आपके रिटर्न वैल्यू में कौन सी चेक गलत हो गई है। – shylent

+0

@ शिलेंट - हाँ यह होगा, यही कारण है कि मैंने उल्लेख किया कि यह शायद सबसे अच्छा अभ्यास नहीं है। लेकिन यह समय-समय पर उपयोगी हो सकता है। –

0

do while() छोरों का उपयोग करते समय एक शर्त सच है, लेकिन दूसरी ओर, पास्कल repeat until छोरों एक शर्त है, जबकि झूठी (दोनों कम से कम एक बार चलेगा) है से बचने का एक तरीका है।

जब मैं पास्कल I में प्रोग्राम लगभग हमेशा repeat until का उपयोग करता हूं।
जब मैं सी में कार्यक्रम ++ मैं लगभग हमेशा while() {} का उपयोग करें।

मैं क्यों की व्याख्या नहीं कर सकते हैं, लेकिन मुझे लगता है यह सामान्य है। अजीब?

2

मैं आमतौर पर कुछ समय होने पर एक डू-टाइम का उपयोग करता हूं, लेकिन यह पहली बार "सही" नहीं होगा। उदाहरण के लिए:

int x; 
do 
{ 
    x = random.next(100); 
    cout << x << endl; 
} while (x != 13); 

इस मामले में, जिस एक्स के साथ आप शुरू करते हैं, इससे कोई फर्क नहीं पड़ता, क्योंकि यह ओवरराइट किया गया है।

0

किसी फ़ाइल से पढ़ने या कनेक्शन स्थापित करने के लिए प्रतीक्षा करने के लिए इंतजार कर रहा है (अन्य मानव संपर्क भी), पुनरावृत्ति की संख्या को प्राथमिकता (उदाहरण के लिए एक एसक्यूएल क्वेरी द्वारा लौटाए गए रिकॉर्ड की संख्या) के बारे में कुछ भी नहीं पता है, या जब आप अलग-अलग आकार के चरणों को करते हैं (उदाहरण के लिए फ़ाइल के 1 या 5 लाइनों को अंतिम पढ़ने के आधार पर पढ़ें), जब ऑब्जेक्ट्स के सभी संयोजन/क्रमपरिवर्तनों पर जा रहे हों, जब भी 'लूप की स्थिति' बोझिल हो जाती है

3

कोई भी नहीं अभी तक सी मैक्रो में इसके उपयोग ... उल्लेख किया

#define do_all(x) do{ foo(x); bar(x); baz(x); } while(0) 

तो कोड में आप

01 हो सकता है
do_all(a); 
  • बिंदु जा रहा है कि यह वास्तव में एक बार निष्पादित हो जाता है और मैक्रो कॉल के अंत पर सेमी-कोलन (0) जबकि पूरा करता है; बयान।
0

एक और अपवाद जब आप कुछ पुनरावर्ती कर रहे हैं, भीतरी अपवाद पढ़ने के साथ निम्नलिखित की तरह:

catch(Exception exc) 
{ 
    Exception currentException = exc; 
    do 
    { 
     Console.WriteLine(string.Format("{0}: {1}", currentException.GetType().Name, currentException.Message)); 
    } while((currentException = currentException.InnerException) != null); 
} 
संबंधित मुद्दे