लूप एक कंट्रोल स्ट्रक्चर है जो किसी दी गई शर्त के आधार पर कोड को बार-बार चलाने देता है।
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 टाइप रखता है, क्योंकि लूप शुरू होते समय उसमें 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
Crystal में मेथड का आखिरी एक्सप्रेशन उसकी वैल्यू लौटाता है।
लेकिन कभी-कभी आपको आखिरी एक्सप्रेशन से पहले ही कोई वैल्यू लौटानी होती है।
इसके लिए आप return कीवर्ड का इस्तेमाल कर सकते हैं, जो उसके बाद वाले एक्सप्रेशन की वैल्यू लौटाता है।
return कीवर्ड के बाद लिखा कोड नहीं चलेगा।
def speed_limit(road_number)
if road_number == 1
return 50
puts "This will not be executed"
elsif road_number == 2
return 80
puts "This will not be executed"
end
100
end
p speed_limit(1) # => 50
p speed_limit(2) # => 80
p speed_limit(3) # => 100
जब मेथड का आखिरी एक्सप्रेशन ही वह वैल्यू हो जो लौटाई जानी चाहिए, तो return कीवर्ड लिखने की ज़रूरत नहीं है।
इस अभ्यास में आप बचत खातों के साथ काम करेंगे। हर साल आपके बचत खाते का बैलेंस उसकी ब्याज दर के आधार पर अपडेट होता है। आपका बैंक आपको जो ब्याज दर देता है, वह आपके खाते में मौजूद धन की मात्रा (यानी उसके बैलेंस) पर निर्भर करती है:
1000 डॉलर से कम धनात्मक बैलेंस पर 0.5%।1000 डॉलर या उससे अधिक और 5000 डॉलर से कम धनात्मक बैलेंस पर 1.621%।5000 डॉलर या उससे अधिक धनात्मक बैलेंस पर 2.475%।आपके पास चार कार्य हैं, और हर कार्य में आपके बैलेंस और उसकी ब्याज दर से जुड़ा काम करना है।
SavingsAccount.interest_rate() मेथड लागू कीजिए, जो आर्गुमेंट के रूप में एक बैलेंस लेता है।
यह मेथड दिए गए बैलेंस के लिए ब्याज दर लौटाता है।
SavingsAccount.interest_rate(200.75)
# => 0.5
SavingsAccount.interest() मेथड लागू कीजिए, जो आर्गुमेंट के रूप में एक बैलेंस लेता है।
यह मेथड दिए गए बैलेंस के लिए ब्याज लौटाता है।
SavingsAccount.interest(200.75)
# => 1.00375
SavingsAccount.annual_balance_update() मेथड लागू कीजिए, जो आर्गुमेंट के रूप में एक बैलेंस लेता है।
यह मेथड एक साल बाद का बैलेंस लौटाता है।
SavingsAccount.annual_balance_update(200.75)
# => 201.75375
SavingsAccount.years_before_desired_balance() मेथड लागू कीजिए, जो आर्गुमेंट के रूप में एक बैलेंस और एक लक्ष्य बैलेंस लेता है।
यह मेथड लौटाता है कि लक्ष्य बैलेंस तक पहुँचने में कितने साल लगेंगे।
balance = 200.75
target_balance = 214.88
SavingsAccount.years_before_desired_balance(balance, target_balance)
# => 14
जब किसी मूलधन पर साधारण ब्याज लगाया जाता है, तो बैलेंस को ब्याज दर से गुणा किया जाता है, और दोनों का गुणनफल ही ब्याज की राशि होती है।
दूसरी ओर, चक्रवृद्धि ब्याज में ब्याज को बार-बार लगाया जाता है। हर बार ब्याज की राशि निकालकर उसे मूलधन में जोड़ दिया जाता है, ताकि आगे की ब्याज गणना बड़े मूलधन पर हो।
Exercism पर साइन अप कीजिए और Crystal को 26 कॉन्सेप्ट142 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।