लूप मुख्य रूप से दो तरह के होते हैं:
Julia में दोनों संभव हैं, हालाँकि दूसरा ज़्यादा आम हो सकता है।
while लूपजिन समस्याओं का कोई तय अंत नहीं होता और जिनमें पहले से पता नहीं होता कि लूप कितनी बार चलाना है, उनके लिए Julia में while लूप है।
इसका मूल रूप काफी आसान है:
while condition
do_something()
end
इस स्थिति में प्रोग्राम तब तक लूप में चलता रहता है जब तक condition का मान true न रहे।
लूप से समय से पहले बाहर निकलने के दो तरीके हैं:
break से लूप तुरंत खत्म हो जाता है, और कोड लूप के end के बाद वाली अगली लाइन से चलना शुरू कर देता है।return x मौजूदा फंक्शन को वहीं रोक देता है और रिटर्न वैल्यू x को उस कोड को लौटा देता है जिसने इस फंक्शन को कॉल किया था।इन दोनों विकल्पों के होते हुए कभी-कभी while true ... end से एक "अनंत" लूप बनाना सुविधाजनक रहता है। फिर भरोसा इस बात पर रहता है कि लूप के अंदर कोई रुकने की शर्त मिलेगी जो break या return चला देगी।
सबसे आसान उदाहरण किसी रेंज पर लूप चलाना है।
अगर हमें कोई काम 10 बार करना है:
for n in 1:10
do_something(n)
end
अगर मौजूदा इटरेशन कोई शर्त पूरी नहीं करता, तो continue की मदद से सीधे अगले इटरेशन पर पहुँचा जा सकता है:
for n in 1:10
if is_useless(n)
continue
end
# we decided this iteration could be useful
do_something_slow(n)
end
इसे छोटे रूप में लिखना हो तो पूरे if ब्लॉक की जगह सिर्फ is_useless(n) && continue लिखा जा सकता है।
और भी कई तरह के संग्रहों पर लूप चलाया जा सकता है: किसी ऐरे के एलिमेंट, किसी स्ट्रिंग के अक्षर, किसी डिक्शनरी की चाबियाँ...
अब तक के सभी उदाहरण 1:10 रेंज पर लूप चलाते हैं, जहाँ वैल्यू ही लूप का इंडेक्स भी होती है।
लेकिन आम तौर पर कई बार सिर्फ वैल्यू नहीं, इंडेक्स की भी ज़रूरत पड़ती है।
इसके लिए eachindex() फंक्शन इस्तेमाल किया जाता है, जैसे for i in eachindex(my_array) ... end.
आपकी दोस्त ली मेई एक जूस बार चलाती हैं, जहाँ वे स्वादिष्ट मिश्रित फलों के जूस बेचती हैं। आप उनकी दुकान के नियमित ग्राहक हैं और आपको लगा कि आप अपनी दोस्त का काम आसान बना सकते हैं। आप तय करते हैं कि अपने कोडिंग कौशल से ली मेई की मदद करेंगे।
ली मेई अपने ग्राहकों को पहले से बताना पसंद करती हैं कि मेन्यू से ऑर्डर किए गए जूस के लिए उन्हें कितनी देर रुकना पड़ेगा। उन्हें सही संख्याएँ याद रखना मुश्किल होता है, क्योंकि अलग-अलग जूस मिलाने में अलग-अलग समय लगता है।
"Pure Strawberry Joy" मिलाने में 0.5 मिनट लगते हैं, "Energizer" और "Green Garden" दोनों में 1.5 मिनट, "Tropical Island" में 3 मिनट और "All or Nothing" में 5 मिनट लगते हैं।
बाकी सभी पेयों (जैसे विशेष ऑफर) के लिए आप मान सकते हैं कि तैयार करने में 2.5 मिनट लगते हैं।
अपनी दोस्त की मदद के लिए एक फंक्शन time_to_mix_juice लिखिए, जो मेन्यू से किसी जूस को आर्गुमेंट के रूप में लेता है और उस पेय को मिलाने में लगने वाले मिनटों की संख्या लौटाता है।
julia> time_to_mix_juice("Tropical Island")
3
julia> time_to_mix_juice("Berries & Lime")
2.5
ली मेई की बहुत सी रचनाओं में नींबू की फाँकें होती हैं, कभी सामग्री के रूप में और कभी सजावट के लिए। इसलिए सुबह अपनी शिफ्ट शुरू करते समय उन्हें यह सुनिश्चित करना होता है कि आने वाले दिन के लिए नींबू की फाँकों का डिब्बा भरा हुआ हो।
limes_to_cut फंक्शन बनाइए, जो नींबू की फाँकों की वह संख्या लेता है जितनी ली मेई को काटनी हैं, और एक ऐरे लेता है जो उनके पास मौजूद साबुत नींबुओं के भंडार को दर्शाता है।
एक "small" नींबू से उन्हें 6 फाँकें मिल सकती हैं, एक "medium" नींबू से 8 फाँकें और एक "large" नींबू से 10 फाँकें।
वे हमेशा नींबुओं को उसी क्रम में काटती हैं जिस क्रम में वे ऐरे में दिए हैं, पहले एलिमेंट से शुरू करके।
वे तब तक काटती रहती हैं जब तक कि ज़रूरत की फाँकों की संख्या पूरी न हो जाए या नींबू खत्म न हो जाएँ।
ली मेई पहले से जानना चाहती हैं कि उन्हें कितने नींबू काटने हैं।
limes_to_cut फंक्शन को काटने वाले नींबुओं की संख्या लौटानी चाहिए।
julia> limes_to_cut(25, ["small", "small", "large", "medium", "small"])
4
ली मेई यह हिसाब रखना पसंद करती हैं कि ग्राहक जिन ऑर्डरों का इंतज़ार कर रहे हैं, उन्हें मिलाने में कितना समय लगेगा।
order_times फंक्शन बनाइए, जो ऑर्डरों की एक कतार लेता है और मिलाने के समय का एक वेक्टर लौटाता है।
julia> order_times(["Energizer", "Tropical Island"])
[1.5, 3.0]
ली मेई हमेशा दोपहर 3 बजे तक काम करती हैं। इसके बाद उनके कर्मचारी दिमित्री काम संभाल लेते हैं। अक्सर ऐसा होता है कि ली मेई की शिफ्ट खत्म होने तक कुछ पेय ऑर्डर हो चुके होते हैं, पर तैयार नहीं हुए होते। तब दिमित्री बाकी बचे जूस तैयार करते हैं।
काम सौंपना आसान बनाने के लिए एक फंक्शन remaining_orders बनाइए, जो ली मेई की शिफ्ट में बचे मिनटों की संख्या और उन जूसों का एक ऐरे लेता है जो ऑर्डर हो चुके हैं पर अभी तैयार नहीं हुए हैं।
फंक्शन को वे ऑर्डर लौटाने चाहिए जिन्हें ली मेई अपने काम के दिन के अंत से पहले तैयार करना शुरू नहीं कर सकतीं।
शिफ्ट में बचा समय हमेशा 0 से अधिक होगा। तैयार करने वाले जूसों का ऐरे कभी खाली नहीं होगा। साथ ही, ऑर्डर उसी क्रम में तैयार किए जाते हैं जिस क्रम में वे ऐरे में आते हैं। अगर ली मेई किसी जूस को मिलाना शुरू करती हैं, तो वे उसे हमेशा पूरा करती हैं, भले ही उन्हें थोड़ी देर और काम करना पड़े। अगर दिमित्री को संभालने के लिए कोई ऑर्डर बचा ही न हो, तो खाली वेक्टर लौटाया जाना चाहिए।
julia> remaining_orders(5, ["Energizer", "All or Nothing", "Green Garden"])
["Green Garden"]
Exercism पर साइन अप कीजिए और Julia को 35 कॉन्सेप्ट128 अभ्यास तथा असली इंसानों से मिलने वाली मेंटरिंग के साथ सीखिए और उसमें महारत हासिल कीजिए, वह भी बिल्कुल मुफ्त।