2012-06-19 21 views
6

यदि() {करना {}; जबकि();} है वास्तव में, जबकि तरह {}

if(a) 
{ 
    do 
    { 
     b(); 
    } 
    while(a); 
} 

बिल्कुल

while(a) 
{ 
    b(); 
} 

की तरह है?

+3

संभव डुप्लिकेट [शीर्ष या नीचे टेस्ट लूप? (जबकि बनाम करते समय)] (http://stackoverflow.com/questions/224059/test-loops-at-the-top-or-bottom-while-vs-do-while) – Niko

+0

इसका परीक्षण करें :-P http://jsfiddle.net/LvWtY/ –

+0

नहीं ... वे बिल्कुल वही नहीं हैं ... करें {..} जबकि (ए) ... सुनिश्चित करेगा कि जो भी हो, कम से कम एक बार किया जाता है और तब तक 'ए' सत्य नहीं है .... जबकि (ए) {} ... केवल 'ए' सत्य होने पर ही करेगा। – Brian

उत्तर

1

वे एक ही हैं और मैं एक उदाहरण प्रदान करेगा जहां आप वास्तव में उपयोग करने के लिए चाहते हो सकता है "क्या-जबकि" थोड़ी देर के पाश के बजाय।

do{ 
    x = superMathClass.performComplicatedCalculation(3.14); 
} 
while (x < 1000); 

के रूप में एक डो-जबकि का उपयोग करते हुए ऊपर दिखाया गया है के लिए

x = superMathClass.performComplicatedCalculation(3.14); 
while (x < 1000); 
{ 
     x = superMathClass.performComplicatedCalculation(3.14); 
} 

तर्क का विरोध किया। मान लें कि x = superMathClass.performComplicatedCalculation(3.14); कोड की केवल एक पंक्ति नहीं थी और इसके बजाय कोड की 25 पंक्तियां थीं। यदि आपको इसे बदलने की ज़रूरत है, तो आप इसे केवल एक बार बदल देंगे। जबकि लूप में आपको इसे दो बार बदलना होगा।

मैं सहमत हूं कि व्हेल बंद हैं और आपको उनसे बचना चाहिए, लेकिन उनके पक्ष में भी तर्क हैं।

0

हाँ, लेकिन यदि आप बाद एक को प्राथमिकता देनी चाहिए।

1

हां, वे वही हैं।
आप do-while पाश + if साथ while पाश उपहास करने के लिए एक बहुत ही अपठनीय रास्ता बना लिया है।

आप इस पढ़ना चाहिए:
Test loops at the top or bottom? (while vs. do while)

उपयोग जबकि छोरों जब आप पाश की पहली यात्रा से पहले एक शर्त परीक्षण करना चाहते हैं।

का उपयोग करें लूप के पहले पुनरावृत्ति को चलाने के बाद आप किसी शर्त का परीक्षण करना चाहते हैं।

1

हाँ, वे बराबर कर रहे हैं।
यदि afalse है, b बिल्कुल निष्पादित नहीं होगा।
यदि atrue है, bafalse बनने तक निष्पादित होगा।
यह दोनों संरचनाओं के लिए समान रूप से सच है।

1

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

 if (condition) { 
      LargeComplexObject object = new LargeComplexObject(); 
      do { 
       some action 
       ... 
       object.someMethod(); 
       ... 
       more actions 
      } 
      while (condition); 
     } 

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