8.6 for…of, for…in

প্রোগ্রামিং এ যখন আমাদের একি কাজ বারেবারে করার প্রয়োজন পরে তখন আমরা লুপ ব্যবহার করি।  মনে করি আমাদের  ১০০ টি নাম্বারের লিস্ট আছে।  এখন আমাদের প্রতিটি  নম্বরের সাথে ৫ গুন্ করতে হবে । প্রতিটি নম্বরের জন্য আমরা এক লাইন করে কোড লিখতে পারি । কিন্তু  যদি নম্বরে সংখ্যা আরো অনেক বেশি হয় তাহলে কোডের লাইন আরো বেশি হবে যা কখনই কোনো ভালো বিষয় হবে না । এই একই line of code/code block বারেবারে  execute করার জন্য  আমরা লুপ ব্যবহার করি । 

জাভাস্ক্রিপ্টে দুই ধরনের লুপ ব্যবহৃত হয় : for লুপ   এবং while লুপ .

বেসিক for loop এর পাশাপাশি জাভাস্ক্রিপ্টে আরো দুই ধরনের for লুপ রয়েছে: for…in  এবং for…of । আজকে আমরা for…in  এবং for…of নিয়ে আলোচনা করবো।

for…in:

for…in লুপ কোনো অবজেক্টের প্রোপার্টিজের  ভিতরে iterate করার জন্য ব্যবহৃত হয় । যদি কোনো অবজেক্টের attribute/properties  সমূহের ভিত্তিতে একটা কোড ব্লক রান করতে চাই তাহলে for…in খুবই উপকারী। মনে করি, আমাদের একটা অবজেক্ট আছে Employee নামের।  আমরা অবজেক্টের সবগুলো attribute এর নাম এবং value প্রিন্ট করতে চাই। for…in লুপ ব্যবহার করলে কোড নিচের অংশের মতো হবে:

const object = { a: 1, b: 2, c: 3 };
for (const property in object) {
  console.log(`Property : ${property} -- value: ${object[property]}`);
}

// Property : a -- value: 1
// Property : b -- value: 2
// Property : c -- value: 3

যখন আমরা কোনো অবজেক্টের property/attribute এর উপর iterate করি তখন for…in ব্যবহার করি কিন্তু যদি অবজেক্টের item এর উপর iterate করার প্রয়োজন পরে তাহলে for…of ব্যবহার করা উচিত। for…of লুপ String, Array, Set, Map এবং user-defined iterable এর উপর iterate করতে ব্যবহৃত হয়। 

for…of:

মনে করি আমাদের একটা Array আছে Employee Name এর। আমরা Employee Name গুলো প্রিন্ট করতে for…of লুপ ব্যবহার করবো।

const array1 = ['a', 'b', 'c'];

for (const element of array1) {
  console.log(element);
}

// expected output: "a"
// expected output: "b"
// expected output: "c"

আমাদের প্রোগ্রামটি Array এর প্রতিটি index এ iterate করেছে এবং letter গুলো আলাদা আলাদা ভাবে প্রিন্ট করেছে। for…of  for লুপ থেকে অনেক বেশি সহজবোদ্ধ ( readable ). তাই যেখানে সম্ভৰ  for…of ব্যবহার করা উচিত।

উদাহরন
  • for…of(),
    const iterable = 'boo';
    
    for (const value of iterable) {
      console.log(value);
    }
    
    // b
    // o
    // o
    const arr = ['a', 'b', 'c'];
    
    for (const element of arr) {
      console.log(element);
    }
    
    // a
    // b
    // c
    const set = new Set([0, 1, 2]);
    
    for (const i of set) {
      console.log(i);
    }
    
    // 0
    // 1
    // 2
  • for…in(),
    var obj = {a: 1, b: 2, c: 3};
    
    for (const prop in obj) {
      console.log(`obj.${prop} = ${obj[prop]}`);
    }
    
    // "obj.a = 1"
    // "obj.b = 2"
    // "obj.c = 3"
    const str = "exercise";
    
    for (const i in str) {
      console.log(str[i]);
    }
    
    // e
    // x
    // e
    // r
    // c
    // i
    // s
    // e
এসো নিজে করি
  • কখন for…of( ) এবং কখন for…in( ) ব্যবহার করা উচিত?
  • নিচের কোডের আউটপুট কি হবে?
    (function (arguments) {
      for (const argument in arguments) {
        console.log(argument);
      }
    })({ a: 1, b: 2, c: 3 });
  • নিচের কোডের আউটপুট কি হবে?
    const obj = { a: { x: 1 }, b: { y: 2 }, c: { z: 3 } };
    
    for (const prop in obj) {
      for(const innerProp in obj[prop]) {
        console.log(`prop.${innerProp} = ${obj[prop][innerProp]}`);
      }
    }
  • নিচের কোডের আউটপুট কি হবে?
    (function () {
      for (const argument of arguments) {
        console.log(argument);
      }
    })(1, 2, 3);
  • নিচের কোডের আউটপুট কি হবে?
    const arr = ["abc", "xyz"];
    for (const element of arr) {
      for (const innerElement of element) {
        console.log(innerElement);
      }
      console.log("");
    }
  • নিচের কোডের আউটপুট কি হবে?
    const map = new Map();
    
    map.set('name', 'sania');
    map.set('job', 'swe');
    
    for (let [key, value] of map) {
        console.log(key + ' - ' + value);
    }