`f

`for` লুপ মধ্যে JavaScript

30টি অনুশীলনী

`for` লুপ সম্পর্কে

সাধারণ সিনট্যাক্স

for লুপ হলো একই লজিক বারবার চালানোর জন্য সবচেয়ে বেশি ব্যবহৃত স্টেটমেন্টগুলোর একটি। JavaScript-এ এটি গঠিত হয় for কিওয়ার্ড, প্রথম বন্ধনীতে মোড়া একটি হেডার, আর দ্বিতীয় বন্ধনীতে মোড়া লুপের বডি ধারণ করা একটি কোড ব্লক নিয়ে।

for (initialization; condition; step) {
  // code that is executed repeatedly as long as the condition is
  // true
}

হেডার

ইনিশিয়ালাইজেশন সাধারণত একটি কাউন্টার ভ্যারিয়েবল তৈরি করে, শর্ত পরীক্ষা করে লুপটি চালিয়ে যাওয়া হবে না থামানো হবে, আর স্টেপ প্রতিটি পুনরাবৃত্তির শেষে কাউন্টারটি বাড়ায়। হেডারের প্রতিটি অংশ সেমিকোলন দিয়ে আলাদা করা হয়।

const list = ['a', 'b', 'c'];
for (let i = 0; i < list.length; i++) {
  // code that should be executed for each item in the array
}

হেডারের তিনটি অংশই ঐচ্ছিক। বাস্তবে এটি খুব কমই ব্যবহার করা হয়। এ সম্পর্কে আরও জানতে MDN ডকুমেন্টেশন দেখুন।

নেস্টেড for লুপ

for লুপ একটির ভেতরে আরেকটি বসানো যায়, যেমন নেস্টেড (বহুমাত্রিক) অ্যারে-এর উপর ইটারেট করতে। প্রতিটি লুপের জন্য আলাদা কাউন্টার ভ্যারিয়েবল তৈরি করতে ভুলবেন না।

const coords = [
  [1, 2],
  [4, 7],
  [10, -3],
];

for (let i = 0; i < coords.length; i++) {
  for (let j = 0; j < coords[i].length; j++) {
    // do something with coords[i][j]
  }
}

break, continue এবং লেবেল

লুপের বডির ভেতরে আপনি break কিওয়ার্ড দিয়ে লুপটি পুরোপুরি চালানো বন্ধ করতে পারেন। এর বিপরীতে, continue কিওয়ার্ড কেবল বর্তমান ইটারেশনটি চালানো থামায় এবং পরেরটিতে চালিয়ে যায়।

নেস্টেড লুপ নিয়ে কাজ করার সময় break এবং continue ডিফল্টভাবে সবসময় একেবারে ভেতরের লুপের উপরেই কাজ করে। লেবেল ব্যবহার করে এই আচরণ বদলাতে পারেন। লেবেল হলো একটি আইডেন্টিফায়ারের নাম, যার শেষে একটি কোলন থাকে। এটি লুপের সামনে (বা উপরে) বসানো হয়। এরপর এমন একটি লেবেল break বা continue-এর সাথে মিলিয়ে বলা যায়, স্টেটমেন্টটি কোন লুপের ক্ষেত্রে কাজ করবে।

outer: for (let i = 0; i < 10; i++) {
  for (let j = 0; j < 10; j++) {
    // ...
    if (j > 5) {
      continue outer;
    }
    // ...
  }
}

লুপ কাউন্টার এবং অ্যাসিনক্রোনাস কোড

অ্যাসিনক্রোনাস কোড নিয়ে কাজ করার সময় কাউন্টার ভ্যারিয়েবলটি সঠিকভাবে ডিক্লেয়ার করতে সতর্ক থাকতে হবে। চলুন একটি উদাহরণ দেখি, যেখানে ১ সেকেন্ড অপেক্ষা করার পর setTimeout দিয়ে কাউন্টার ভ্যারিয়েবলটি অ্যাসিনক্রোনাসভাবে যোগ করা হয়। কাউন্টারটি var দিয়ে বা হেডারের বাইরে let দিয়ে ডিক্লেয়ার করলে কোডটি প্রত্যাশিত ফলাফল দেয় না।

let sum = 0;
for (var i = 1; i < 4; i++) {
  setTimeout(function () { sum += i; }, 1000);
}
// eventually sum will be 12 instead of 6 (1+2+3)
let sum = 0;
let i;
for (i = 1; i < 4; i++) {
  setTimeout(function () { sum += i; }, 1000);
}
// same here, eventually sum will be 12 instead of 6 (1+2+3)

এই দুটি ক্ষেত্রেই i কোনো নির্দিষ্ট লুপ ইটারেশনে স্কোপড নয়। যোগফল হিসাব করার সময় i ইতিমধ্যেই তার শেষ মান 4-এ পৌঁছে যায়, ফলে যোগফল দাঁড়ায় 4 + 4 + 4 = 12।

হেডারের ভেতরে let দিয়ে কাউন্টার ডিক্লেয়ার করলে এই সমস্যা এড়ানো যায়। এর বিশেষ প্রভাব হলো, প্রতিটি ইটারেশন নিজস্ব আলাদা let i ভ্যারিয়েবল পায়, যা কেবল লুপ বডির ওই একটি নির্দিষ্ট চালানোর মধ্যেই সীমাবদ্ধ থাকে। তাই পরে যোগফল হিসাব করার সময় প্রতিটি কলব্যাক ফাংশন তার নিজের i ভ্যারিয়েবলকেই নির্দেশ করে, যেখানে তখনও সঠিক মানটিই থাকে।

let sum = 0;
for (let i = 1; i < 4; i++) {
  setTimeout(function () { sum += i; }, 1000);
}
// eventually sum will be 6 (1+2+3) as expected
GitHub-এর মাধ্যমে সম্পাদনা করুন লিংকটি নতুন একটি উইন্ডো বা ট্যাবে খুলবে

`for` লুপ শিখুন