यह एक अप्रत्यक्ष उत्तर की तरह है, लेकिन इस सवाल ने मुझे इसके पीछे के तर्क के बारे में सोचने पर मजबूर कर दिया, और मुझे लगा कि यह साझा करने के लायक हो सकता है।
जैसा कि बाकी सभी ने कहा है, आप एक do ... while
लूप का उपयोग करते हैं जब आप कम से कम एक बार शरीर को निष्पादित करना चाहते हैं। लेकिन आप किन परिस्थितियों में ऐसा करना चाहेंगे?
खैर, स्थितियों का सबसे स्पष्ट वर्ग मैं सोच सकता हूं कि चेक हालत का प्रारंभिक ("अप्रयुक्त") मूल्य वैसा ही होगा जब आप बाहर निकलना चाहते हैं । इसका मतलब यह है कि आपको लूप बॉडी को एक बार गैर-एक्साइटिंग वैल्यू पर प्राइम को प्राइम करने के लिए निष्पादित करने की आवश्यकता है, और फिर उस स्थिति के आधार पर वास्तविक पुनरावृत्ति करें। क्या प्रोग्रामर इतने आलसी होने के साथ, किसी ने इसे एक नियंत्रण संरचना में लपेटने का फैसला किया।
इसलिए, उदाहरण के लिए, एक टाइमआउट के साथ धारावाहिक पोर्ट से पात्रों को पढ़कर रूप ले सकते हैं (पायथन में):
response_buffer = []
char_read = port.read(1)
while char_read:
response_buffer.append(char_read)
char_read = port.read(1)
# When there's nothing to read after 1s, there is no more data
response = ''.join(response_buffer)
कोड के दोहराव पर ध्यान दें char_read = port.read(1)
:। यदि पायथन में एक do ... while
लूप था, तो मैं इस्तेमाल कर सकता था:
do:
char_read = port.read(1)
response_buffer.append(char_read)
while char_read
उन भाषाओं के लिए अतिरिक्त लाभ जो लूप के लिए एक नया स्कोप बनाते हैं: char_read
फ़ंक्शन नेमस्पेस को प्रदूषित नहीं करता है। लेकिन यह भी ध्यान दें कि ऐसा करने का एक बेहतर तरीका है, और यह पायथन के None
मूल्य का उपयोग करके है :
response_buffer = []
char_read = None
while char_read != '':
char_read = port.read(1)
response_buffer.append(char_read)
response = ''.join(response_buffer)
तो यहाँ मेरी बात की जड़ है: नल प्रकार के साथ भाषाओं में, स्थिति initial_value == exit_value
अब तक कम अक्सर उठता है, और है कि तुम क्यों यह मुठभेड़ नहीं है हो सकता है। मैं यह नहीं कह रहा हूं कि ऐसा कभी नहीं होता है, क्योंकि अभी भी कई बार ऐसा होता है जब कोई फ़ंक्शन None
वैध स्थिति का संकेत देने के लिए वापस आ जाएगा । लेकिन मेरी हड़बड़ी और संक्षेप में मानी जाने वाली राय में, यह बहुत अधिक होगा यदि आपने जिन भाषाओं का उपयोग किया है, वे उस मूल्य के लिए अनुमति नहीं देते हैं जो यह दर्शाता है: यह चर अभी तक आरंभ नहीं किया गया है।
यह बिल्कुल सही तर्क नहीं है: वास्तव में, अब जब अशक्त-मूल्य आम हैं, वे बस वैध मूल्यों के सेट का एक और तत्व बनाते हैं जो एक चर ले सकता है। लेकिन व्यावहारिक रूप से, प्रोग्रामर के पास एक चर को समझदार राज्य में अंतर करने का एक तरीका है, जिसमें लूप से बाहर निकलने की स्थिति शामिल हो सकती है, और यह एक असंक्रमित राज्य में हो सकता है।