লুপের break-আপ
লাইফে সব সময় যে উড়ে উড়ে লাফাতে লাফাতে চলতে হবে, তা কিন্তু না; মাঝেমধ্যে থেমেও যেতে হয়, ব্রেক নিতে হয়, রেস্ট নিতে হয়। গাড়ি চালানোর সময়ও গাড়ি আজীবন চলে না, থামাতে হয়। এভাবেই বিভিন্ন জায়গায় আমাদের থামতে হয়; প্রোগ্রামিংয়েও এর ব্যতিক্রম নয়।
যেমন, আমরা যদি কোনো লুপ লিখি, যা 0 থেকে 15 পর্যন্ত চলে এবং প্রতিবার 0 থেকে 15-এর আগ পর্যন্ত সংখ্যাগুলো প্রিন্ট করে, সেটা তুই অলরেডি জানস।
for(let i = 0; i < 15; i++) {
console.log(i);
}এখন ধর, এমন একটা প্রয়োজন পড়ল, যেখানে লুপ ভেরিয়েবলটা 7-এর থেকে বড় হওয়ার পর ডাইরেক্ট ব্রেক হবে। এ ক্ষেত্রে break মারবি। জাস্ট একটা কন্ডিশন সেট করবি। কন্ডিশন বা শর্ত সত্য হলেই শর্তের ভিতরে ঢুকে break হয়ে লুপটি থেমে যাবে:
for(let i = 0; i < 15; i++) {
console.log(i);
if(i > 7) {
break;
}
}
Output: 0 1 2 3 4 5 6 7 8 তুই বলতে পারস, 7 গেলে ব্রেক মারার কথা। 8 পর্যন্ত আউটপুট কেন দেখাচ্ছে? এইটার লজিক কিন্তু আছে। লজিক ছাড়া কোড কখনোই কাজ করে না এবং আরেকটু শক্তভাবে বললে, কোড কখনো ভুল করে না। যে কোড করে, সে ভুল করে বা ভুল বুঝে।
ওপরে সেই কাজটাই হয়েছে। কারণ ওপরের কোডে লেখা আছে if( i > 7) অর্থাৎ i-এর মান 7-এর বড় হলে অর্থাৎ 8 হলে ব্রেক হবে। সেজন্য ওপরে 8 আউটপুট হিসেবে দেখাইছে তারপর সেটা if( i > 7)-এর শর্ত সত্য হইছে। এরপর শর্তের ভিতরে গিয়ে লুপ ব্রেক করছে। তুই যদি চাস একজাক্টলি 7-এ গিয়ে ব্রেক করবে, তাহলে শর্ত একটু মোডিফাই করে দে। জাস্ট if( i > 7)-এর জায়গায় if( i >= 7) করে দে। তাহলে i-এর মান 7-এর সমান হওয়ার সাথে সাথে শর্ত সত্য হয়ে যাবে। আর শর্তের ভিতরে গিয়ে লুপ ব্রেক মেরে দিবে।
for(let i = 0; i < 15; i++) {
console.log(i);
if(i >= 7) {
break;
}
}
Output: 0 1 2 3 4 5 6 7এভাবে break আমাদের লুপ থামানোর জন্য ব্যবহার হয়। ব্রেকের কাছাকাছি আরেকটা জিনিস আছে। সেটার জন্য–
মাঝেমধ্যে দেখবি এক্সপ্রেস ট্রেন আছে। সেই ট্রেন সব স্টেশনে থামে না; বরং কিছু কিছু স্টেশন স্কিপ করে। আবার অনেক স্পেশাল দূরপাল্লার বাসও আছে, সব স্টেশনে থামে না; বরং স্কিপ করে। এই স্কিপ করার জন্য জাভাস্ক্রিপ্টে একটা স্পেশাল continue কী-ওয়ার্ড আছে। যদি কোনো নির্দিষ্ট সংখ্যা স্কিপ করতে হয়, তবে আমরা continue ব্যবহার করতে পারি। ধর, তুই 1 থেকে 10 পর্যন্ত প্রিন্ট করতে চাস, কিন্তু 6 সংখ্যাটি বাদ দিতে চাস:
for(let i = 1; i <= 10; i++) {
if(i == 6) {
continue;
}
console.log(i);
}
Output: 0 1 2 3 4 5 7 8 9 10এই কোডে 6 সংখ্যাটি স্কিপ হবে। একইভাবে আমরা জোড়সংখ্যা স্কিপ করতে চাইলে নিচের মতো করে কন্ডিশন দিয়ে তার ভিতরে continue কি-ওয়ার্ড বসিয়ে দিবি। তাহলে সে জোড়সংখ্যা আউটপুট হিসেবে দেখাবে না:
for(let i = 1; i < 10; i++) {
if(i % 2 == 0) {
continue;
}
console.log(i);
}
Output: 1 3 5 7 9এখানে সব জোড়সংখ্যা আউটপুট হবে। আবার বিজোড়সংখ্যা স্কিপ করতে চাইলে কন্ডিশন চেঞ্জ করলেই হবে:
for(let i = 1; i < 10; i++) {
if(i % 2 == 1) {
continue;
}
console.log(i);
}
Output: 2 4 6 8খেয়াল করলে দেখবি, আমরা continue-এর পরে console log লিখেছি। কারণ, continue হলে লুপের ভিতরে সেইবার চলার সময় বাকি যেসব কোড আছে, সেগুলা চলবে না। অর্থাৎ স্কিপ করবে। আর এই কন্টিনিউ কি-ওয়ার্ডের আগে যদি কনসোল লগ থাকে, তাহলে সেগুলা স্কিপ করার আগেই কাজ করে ফেলবে। তাই কন্টিনিউ বা স্কিপ করলে যে যে কোডের আউটপুট স্কিপ করতে হবে, সেগুলা continiue-এর শর্তের পরে লিখতে হবে। যাতে স্কিপ করলে সেগুলা স্কিপ হয়ে যায়।
JavaScript Break and Continue Statement Practice:
- ধর, তুই 1 থেকে 30 পর্যন্ত সংখ্যা প্রিন্ট করতে চাস, কিন্তু তোর ইচ্ছা হলো, 15-এর পরে প্রিন্ট করা বন্ধ হবে, থেমে যাবে।
- তুই 1 থেকে 40 পর্যন্ত সংখ্যা প্রিন্ট করতে চাস, কিন্তু এমনভাবে, যেন 7 দিয়ে বিভাজ্য সংখ্যাগুলো বাদ যায়। যেমন- 7, 14, 21, ইত্যাদি বাদ যাবে। একটা প্রোগ্রাম লিখ, যেখানে এই সংখ্যাগুলো স্কিপ হবে।
- তুই 1 থেকে 15 পর্যন্ত সংখ্যা প্রিন্ট করতে চাস, কিন্তু 9 বাদে। একটা প্রোগ্রাম লিখ, যেখানে 9 স্কিপ হয়ে যাবে আর বাকিসব সংখ্যা প্রিন্ট হবে।
- 1 থেকে 20 পর্যন্ত সংখ্যা প্রিন্ট কর, কিন্তু 12 বাদে। 12 স্কিপ হয়ে যাবে এবং বাকিসব সংখ্যা প্রিন্ট হবে।
- 1 থেকে 25 পর্যন্ত সংখ্যা প্রিন্ট কর, কিন্তু 3 দিয়ে বিভাজ্য সংখ্যা বাদ যাবে।
- 91 থেকে 120 পর্যন্ত সংখ্যা প্রিন্ট কর, কিন্তু 10 দিয়ে ভাগ যায়, এমন সংখ্যা পেলে প্রিন্ট করা বন্ধ হয়ে যাবে, থেমে যাবে।