2010-06-09 18 views
7

मैंने कभी नहीं समझा है कि का उपयोग क्यों करते हैं जबकि लूप आवश्यक है। मैं समझता हूं कि वे क्या करते हैं, जो कोड को निष्पादित करना है कि जबकि लूप में यह जांच किए बिना होता है कि स्थिति पहले सत्य है या नहीं।"थोड़ी देर" लूप का उपयोग क्यों करें?

do{ 
    document.write("ok"); 
} 
while(x == "10"); 

ठीक उसी रूप में:

document.write("ok"); 
while(x == "10"){ 
    document.write("ok"); 
} 

शायद मैं बहुत मूर्ख जा रहा हूँ और कुछ बाहर स्पष्ट याद आ रही है, लेकिन मैं नहीं दिख रहा है

लेकिन नीचे दिए गए कोड नहीं है का उपयोग करने का लाभ मेरे उपरोक्त उदाहरण पर पर करें।

+6

http://stackoverflow.com/questions/994905/is-there-ever-a-need-for-a-do-while-loop – sharptooth

उत्तर

14

आपका उदाहरण कोड गलत है:

do{ 
    document.write("ok"); 
}while(x == "10"){ 
    document.write("ok"); 
} 

do { 
    document.write("ok"); 
} while(x == "10"); 

आप सही है कि यह चेकइन से पहले आंतरिक कोड ब्लॉक कार्यान्वित कर रहे हैं:

यह वास्तविक रूप होगा जी शर्त है, लेकिन आपके पास आंतरिक कोड ब्लॉक को डुप्लिकेट करने की आवश्यकता नहीं है। ऐसा/समय निर्माण (जैसा कि आपने पहले ही कहा है) यह सुनिश्चित करने का एक तरीका है कि कोड का एक टुकड़ा 0 या अधिक बार (सशर्त के आधार पर) के बजाय 1 या अधिक बार निष्पादित किया जाता है।

+0

का डुप्पी अब मुझे लगता है, मुझे नहीं पता था कि यह आपको बचाता है आंतरिक कोड को डुप्लिकेट करने के लिए फॉर्म। सहायता के लिए धन्यवाद। – Stanni

6

कम से कम एक बार चलेगा, जबकि करते हैं - आप दे, ऐसा करते हुए ... जहां के रूप में, जबकि आवश्यकता हालत बिल्कुल शुरू करने के लिए मुलाकात की ..

var i = 6; 
do{ 
    alert(i); 
}while(i < 5) 

// alerts 6, but while criteria isn't met so it stops 

var i = 6; 
while(i < 5) { 
    alert(i); 
} 

// no output - while condition wasn't met 
2

अंतर सबसे महत्वपूर्ण है जब आपके पास कम से कम एक बार कोड की एक से अधिक पंक्ति निष्पादित की जाती है। थोड़ी देर लूप के साथ एक डू लूप को सिम्युलेट करने के परिणामस्वरूप पर्याप्त कोड डुप्लिकेशन होगा, जो हमेशा खराब होता है। अनुमोदित, एक कोड में उस कोड को दोबारा करने के लिए एक बेहतर समाधान है और उसके बाद बस लूप में पहले और उसी विधि में एक ही विधि कॉल है, लेकिन बहुत से लोग उस डुप्लिकेशंस को नापसंद करते हैं, और do कीवर्ड का उपयोग करके अनजाने में घोषित किया जाता है "यह एक पैर नियंत्रित है पाश "।

तो, मूल रूप से, पठनीयता और बुनियादी एसई सिद्धांत।

1

जो आप खो रहे हैं वह यह है कि do...while का उपयोग 100% WRONG है!

do { 
    //something you want to execute at least once 
} while (someBooleanCondition); 

वहाँ एक दूसरे खंड की है कि पूर्ण अभाव देखें:

जावा में एक do...while पाश, उदाहरण के लिए, कुछ इस तरह लग रहा है? देखें कि whileपूरी तरह से बयान समाप्त होता है? तो अब क्या होता है कि {...} में कोड do और while के बीच जोड़ी निष्पादित हो जाएगी, फिरsomeBooleanCondition परीक्षण किया जाएगा और यदि यह सच है, तो कोड ब्लॉक फिर से निष्पादित हो जाएगा। और फिर। और फिर। someBooleanCondition तक गलत परीक्षण किया जाता है।

और इस बिंदु पर, शायद आप समझ जाएंगे कि हमारे पास दोनों प्रकार के लूप क्यों हैं।उपरोक्त कोड अनुवाद किया जा सकता करने के लिए:

//something you want to execute at least once 
while (someBooleanCondition) { 
    //something you want to execute at least once 
} 

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

1

आपके सभी do..while वाक्यविन्यास में से पहला गलत है। यह इस तरह है:

do 
{ 
    document.write("ok"); 
}while(x=="10"); 

यह उपयोगी होता है जब आप अपने teminating हालत का मूल्यांकन के बिना कम से कम एक बार पाश के शरीर पर अमल करना चाहते हैं। उदाहरण के लिए, मान लें कि आप एक लूप लिखना चाहते हैं जहां आप इनपुट के लिए उपयोगकर्ता को संकेत दे रहे हैं और इनपुट के आधार पर कुछ कोड निष्पादित करते हैं। आप इसे कम से कम एक बार निष्पादित करना चाहते हैं और फिर उपयोगकर्ता से पूछें कि वह जारी रखना चाहता है या नहीं। ऐसे मामलों में, do..while लूप while लूप की तुलना में कम और क्लीनर कोड में परिणाम देता है।

16
  • जैसा कि आप देख आप दूसरे उदाहरण में ही लाइन को दोहराने के लिए किया था। जब आप बनाए रखते हैं, तो संभवतः आप उन दो पंक्तियों को समान मानना ​​चाहते हैं, लेकिन आपके पास ने स्वयं को दोहराया है।

  • अब कल्पना कीजिए कि एक बड़ा ब्लॉक और नहीं एक पंक्ति थी, न केवल यह अनावश्यक कीमती दृश्य अंतरिक्ष ले जाएगा, लेकिन यह भी कठिन होगा को बनाए रखने और विसंगतियों आकर्षित करने के लिए।

0

इसका लेखन कोड का एक बेहतर तरीका:

int count = ReadDataFromStream(); 
while(count != 0) 
{ 
    count = ReadDataFromStream(); 
} 

करते-का उपयोग करते समय के रूप में लिखा जा सकता है:

int count = 0; 
do 
{ 
    count = ReadDataFromStream(); 
} while(count != 0); 

do-, जबकि के बेहतर उदाहरण हैं, लेकिन मैं नहीं कर सकता इस समय याद है।

2

के बारे में क्या:

do{ 

    //..... 
    // 100000 lines of code! 
    //..... 

} while(i%10); 




बेशक आप नहीं लिखेंगे कि:

//..... 
// 100000 lines of code! 
//..... 

while(i%10){ 

    //..... 
    // 100000 lines of code! 
    //..... 

} 



और फिर आपको का उपयोग करने के लिए मजबूर किया जाएगा जबकि लूप
ईश्वर इसे आशीर्वाद दे !!

संपादित करें:
या आप प्रक्रियाओं का उपयोग करेगा ..हालांकि

+0

क्या भाषाएं हैं-जबकि कोई प्रक्रिया नहीं है? –

+0

आप शायद 100,000 लाइनों को कोड में डाल सकते हैं ... लेकिन बिंदु ले लिया। –

0

do { 
    s1; 
    ... 
    sn; 
} while (p); 

रूप

boolean done = false; 
while (!done) { 
    s1; 
    ... 
    sn; 
    done = !p; 
} 

लिखा जा सकता है पूर्व अधिक सुबोध है।