लूप एक कंट्रोल स्ट्रक्चर है, जिससे कोड को किसी दी गई शर्त के आधार पर बार-बार चलाया जा सकता है।
while लूप एक कंट्रोल स्ट्रक्चर है, जिससे कोड को किसी दी गई शर्त के आधार पर बार-बार चलाया जा सकता है। while लूप के अंदर का कोड तब तक चलता रहता है, जब तक शर्त की वैल्यू सही होती है। while लूप का इस्तेमाल अक्सर तब किया जाता है, जब पहले से पता न हो कि लूप कितनी बार चलेगा। जहाँ भी किसी लूप की ज़रूरत हो, वहाँ इसका इस्तेमाल किया जा सकता है।
लूप के अंदर का कोड चलने से पहले शर्त जाँची जाती है। इसका मतलब है कि अगर शर्त गलत है, तो लूप के अंदर का कोड कभी नहीं चलेगा।
i = 0
while i < 3
puts i
i += 1
end
# Output:
# 0
# 1
# 2
किसी स्ट्रिंग पर इटरेशन करना हो, तो आप स्ट्रिंग की लंबाई तक लूप चला सकते हैं।
str = "Hello"
i = 0
while i < str.size
puts str[i]
i += 1
end
# Output:
# H
# e
# l
# l
# o
until लूप while लूप की तरह ही काम करते हैं, बस फर्क यह है कि लूप के अंदर का कोड तब तक चलता रहता है, जब तक शर्त की वैल्यू सही न हो जाए।
यह वही अंतर है जो if और unless के बीच होता है।
i = 0
until i == 3
puts i
i += 1
end
while लूप के साथ एक आम गलती है "अनंत लूप" में फँस जाना, जो कभी खत्म नहीं होता। अनंत लूप तब हो सकता है, जब किसी शर्त की वैल्यू कभी सही या गलत न हो। ऐसा अक्सर प्रोग्रामर की गलती से होता है। उदाहरण के लिए, लूप वाले वेरिएबल को बढ़ाना भूल जाना। लेकिन कभी-कभी किसी प्रोग्राम का लॉजिक लिखने का सबसे साफ तरीका अनंत लूप ही होता है। या फिर हमेशा के लिए लूप चलाना ज़रूरी होता है। उदाहरण के लिए, एक HTTP सर्वर किसी आने वाले कनेक्शन का इंतज़ार करता है, उसे संभालता है, और फिर अगले कनेक्शन का इंतज़ार करता है।
break कीवर्ड की मदद से लूप से जल्दी बाहर निकला जा सकता है।
यह तब काम आता है, जब आप कुछ खास शर्तों के तहत लूप से जल्दी बाहर निकलना चाहते हों।
i = 0
while i <= 3
puts i
i += 1
if i == 2
break
end
end
# Output:
# 0
# 1
next कीवर्ड की मदद से लूप के अगले इटरेशन पर पहुँचा जा सकता है।
यह तब काम आता है, जब आप लूप के कुछ खास इटरेशन छोड़ना चाहते हों।
i = 0
while i <= 3
i += 1
if i == 2
next
end
puts i
end
# Output:
# 1
# 3
लूप चलने के दौरान वेरिएबल का टाइप बदल सकता है।
नीचे दिए गए उदाहरण में a का टाइप Int32 | String है, क्योंकि लूप के पहले हिस्से में यह Int32 या String हो सकता है।
लूप शुरू होते समय a में Int32 रहता है और दूसरे इटरेशन में उसमें String रहता है, इसलिए लूप के पहले हिस्से में वेरिएबल a पर सिर्फ Int32 | String टाइप ही रहेगा।
इस मल्टीपल टाइप सिस्टम को आगे विस्तार से समझाया जाएगा।
लेकिन चूँकि हमें पक्का पता है कि लूप के दूसरे हिस्से में सिर्फ String ही रहेगा, इसलिए लूप के दूसरे हिस्से में a का टाइप String है।
कोड चलते समय यह एक साथ कभी Int32 और String नहीं रखेगा।
i = 0
a = 4
while i < 3
p typeof(a)
# => Int32 | String
a = "4"
p typeof(a)
# => String
i += 1
end
while को एक्सप्रेशन की तरह इस्तेमाल किया जा सकता है, यानी इसे किसी वेरिएबल की वैल्यू के रूप में इस्तेमाल किया जा सकता है।
जो वैल्यू लौटती है, वह break कीवर्ड के साथ दी गई वैल्यू होती है।
यह लूप के अंतिम एक्सप्रेशन की वैल्यू नहीं लौटाता।
a = while true
break 1
end
p a
# => 1
i = 0
a = while i == 0
i += 1
1
end
p a
# => nil