লুপ এক্সপ্লোরেশন

:arrows_counterclockwise: Loop কি?

আমার এক খাদক ফ্রেন্ড আছে। তার কাছে গোটা এক প্যাকেট বিস্কুট শেষ করা কোনো ব্যপারই না। ধরে নিচ্ছি, এক প্যাকেট বিস্কুটে আনুমানিক ৫০+ বিস্কুট থাকে। সে একই স্টাইলে বারবার বিস্কুটগুলো চায়ের মধ্যে ডুবিয়ে খেতে থাকে। এটি এক অভূতপূর্ব দৃশ্য!

আমাদের জীবনেও এমন অনেক ঘটনা ঘটে, যেখানে একই কাজ বারবার করতে হয়ঃ

:white_check_mark: ক্লাসে কান ধরে উঠবসঃ একইভাবে কানে ধরে বারবার উঠবস করতে হয়। এটাকে বলা যেতে পারে “উঠবস লুপ”

:white_check_mark: ভাত খাওয়াঃ প্রতিবার প্লেট থেকে সমান পরিমাণ ভাত মুখে তোলা হয়। এটাকে বলা যেতে পারে “ভাত খাওয়ার লুপ”

সংক্ষেপে, একই কাজ বারবার করার পদ্ধতিকে প্রোগ্রামিং ভাষায় Loop বলা হয়।

এতটুকু বুঝতে পারলে কোডের ভাষাও বুঝতে পারবেন ইন-শা-আল্লাহ!


:question: Loop কেন ব্যবহার করবো?

  • সময় বাঁচায় → একবার কোড লিখলেই সেটা হাজারবার কাজ করতে পারে।

  • কোড ছোট ও সহজ হয় → কম লাইনে বেশি কাজ করা যায়।

  • ডাটা প্রসেসিং সহজ হয় → লিস্ট, অ্যারে বা অবজেক্টের ভেতরে সহজে ঘোরাঘুরি করা যায় (সামনে এসব নিয়ে লিখার চেষ্টা করবো ইন-শা-আল্লাহ)।


বেশ কয়েক ধরনের লুপ রয়েছে। চলুন এগুলো ইকটু এক্সপ্লোর করে আসি-


:arrows_counterclockwise: 1. while Loop:

আপনার কি condition এর কথা মনে আছে? শর্ত মিলে গেলে তখন কীভাবে কাজ করতো? একটি if condition দেখে আসি:

const numbers = 8;

if (numbers < 8) {
  console.log(numbers);
} else {
  console.log("Number is bigger");
}

জাভাস্ক্রিপ্টে while Loop প্রায় একই রকম। এখানে প্রথমে একটি ভেরিয়েবল নিতে হবে। এরপর শর্ত দিতে হবে। শর্তের সাথে মিলে গেলেই কেল্লা ফতে!

let number = 0; //declaring a variable

while (number < 8) {
  console.log("This is my loop", number);  
  number++; // number= number +1;
}

:pushpin: while Loop-এর সিনট্যাক্স

  • ভেরিয়েবল ডিক্লেয়ার করা → let number = 0;

  • শর্ত দেওয়া → (number < 8)

  • শর্ত মিলে গেলে নির্দিষ্ট কাজ করা

কোডটি কিভাবে কাজ করে?

প্রথমে number = 0 দেওয়া হয়েছে।

শর্ত অনুযায়ী, যতক্ষণ number < 8 থাকবে, ততক্ষণ লুপ চলবে।

প্রতিবার number++ দিয়ে মান ১ করে বাড়ানো হয়েছে, যাতে লুপ শেষ পর্যন্ত পৌঁছাতে পারে।

বিঃদ্রঃ যদি number++ লাইনটি স্কিপ করি, তখন কি হবে বলুন তো?


:cyclone: 2. for Loop:

for এবং while Loop প্রায় একই রকম। while Loop-এ আমরা লাইনগুলো আলাদা লিখতাম। কিন্তু for Loop-এ সবগুলো এক লাইনে লিখবো। যেমনঃ

while Loop-এর ক্ষেত্রে-

let number = 0; //declaring a variable

while (number < 8) {
  console.log("This is my loop", number);
  number++;   // number= number +1;
}

সে অনুযায়ী for Loop হবে-

for (let number = 0; number <= 10; number++) {
    console.log(number);
  }

সহজ ভাষায়,

  1. প্রথমে ভেরিয়েবল ডিক্লেয়ার করা
  2. কন্ডিশন দেওয়া
  3. number-এর মান পরিবর্তন করা

এই তিনটি কাজ আমরা এক লাইনে করেছি।

:cyclone: 3. for of Loop [in case of Array]:

প্রথমে আমরা একটি Array নিচ্ছি। যেমনঃ

const numbers = [22, 33, 44, 55];
console.log(numbers);

এতটুকু আমরা পারি। কিন্তু, যদি প্রতিটি উপাদান আলাদাভাবে দেখতে চাই, তাহলে কীভাবে করবো?

:x: index দিয়ে ম্যানুয়ালি বের করা ঝামেলাপূর্ণ!

:white_check_mark: for of Loop দিয়ে সহজেই করা যায়:

for (number of numbers) {
    console.log(number);
  }

এখানে আপনি মাত্র ২ লাইনে সবগুলো নাম্বারকে আলাদা আলাদা করে দেখতে পারবেন।

:point_right: যদি সংখ্যাগুলো আরও বেশি হয়, যেমন:

const numbers = [22, 33, 44, 55,22, 33, 44, 55];

হয় তাওলেও for of Loop ব্যবহার করে আপনি সবগুলোকে আলাদা আলাদা করে প্রিন্ট করা যাবে।


:cyclone: 4. for in Loop [in case of Object]:

ছোট বেলায় তিন গোয়েন্দা পড়েছেন? আমার অবশ্য পড়া হয় নি। যাইহোক, এই Loop অনেকটা ডিটেকটিভের মতন। সে সব সময় key খুঁজে বের করে। যেখানেই key পায়, সেখানেই তার কাজ শুরু হয়। এই Loop সব সময় Object এর ভিতরে কাজ করে। Object নিয়ে আমরা পরবর্তিতে বিস্তারিত জানবো ইন-শা-আল্লাহ।

আপাতত একটা Object দেখে নেইঃ এখানে একজন ছাত্র সম্পর্কে বিভিন্ন তথ্য দেওয়া হলো।

let student = {
  name: "Rabbi",
  age: 22,
  university: "ABC University",
  department: "Business Administration",
  Gender: "Male",
  isMarried: false,
  isGoodBoy: true,
};


for (let key in student) {
  console.log(key + ":" + student[key]);
}

এখানে গুরুত্বপূর্ণ একটি বিষয় হচ্ছে key এটি থাকার জন্যই আমরা সবগুলো মান দেখতে পেরেছি। যদি key না থাকতো তবে আমাদের রেজাল্ট Error আসতো।


Break কি গুরুত্বপূর্ণ?

কাজে বিরক্ত হয়ে গেলে আমরা Break নেই। আমাদের মস্তিষ্ক রিফ্রেশ হয়, এনার্জি ফিরে পাই, এবং নতুন উদ্যমে কাজ শুরু করতে পারি। ঠিক তেমনি JavaScript-এ break স্টেটমেন্টও একটি লুপ বা সুইচ স্টেটমেন্টকে থামিয়ে দেয়, যখন নির্দিষ্ট শর্ত
পূরণ হয়। এটি কোডকে অপ্রয়োজনীয় লুপিং থেকে বাঁচায় এবং কার্যকারিতা বাড়ায়।

for (let i = 1; i <= 10; i++) {
  console.log(i);
}

এই কোড দিলে আপনি ১ থেকে ১০ পর্যন্ত সবগুলো নাম্বার দেখতে পারবেন। কিন্তু যদি আপনার ১-৫ পর্যন্ত সংখ্যা প্রয়োজন হয় তখন আপনি চাইলে সহজেই Break ব্যবহার করতে পারেন।

for (let i = 1; i <= 10; i++) {
  if (i === 6) {
    break; //৬ এ আসলে কোড ব্রেক দিয়ে নিচে চলে যাবে। 
  }
  console.log(i);
}

এখানে নাম্বার যখন ৬ এর সমান হবে, তখন Break এর মাধ্যমে লুপটি শেষ হয়ে যাবে।

বিঃদ্রঃ শর্ত পরিবর্তন করলেই তো লুপ থেমে যায়। যেমনঃ আমি যদি i <= 10; এর স্থানে i <= 5; দেই তাহলেই তো লুপ আগে থেমে যাবে। অযথা Break কেনো দিবো?

:point_right: এই কোডের ক্ষেত্রে আপনি শর্ত জানেন। সেজন্য ব্রেক ব্যবহার করতে পারছেন। কিন্তু যদি আপনি ইউজারের ইনপুট নিয়ে কাজ করতে হয়, তখন তো আপনার শর্ত জানা থাকবে না। সেজন্য ব্রেক ব্যবহার করে কোড রান করতে হবে।

যেমনঃ আমরা সবাই সিম কোম্পানি থেকে কল পেয়েছি। তারা এটা-সেটা বলার পরে বলে,“আপনি রাজি থাকলে ০ চাপুন” এটি বলার মাধ্যমে সে আপনার ইনপুট নিচ্ছে। ইনপুট যদি তাদের সাথে মিলে যায়, তাহলে আপনাকে সিম কোম্পানির ওই অফার দেওয়া হবে। আর আপনি আমার মতো চালাক হয়ে যদি ০ এর পরিবর্তে অন্যকিছু চাপ দেন তাহলে কল কেটে যাবে।

এধরনের ইউজার কেস নিয়ে কাজ করার জন্য অনেকে ব্রেক ব্যবহার করে থাকেন।


Continue কি?

আমরা যখন কোনো কাজে ব্যস্ত থাকি, মাঝেমধ্যে কিছু জিনিস স্কিপ করে সামনে এগিয়ে যাই।

যেমন ধরে নিচ্ছি, ১০ জন বন্ধু চা খেতে গিয়েছে। কিন্তু একজন চা খায় না। এখন তাকে স্কিপ করে বাকিদের চা দিতে হবে। ঠিক তেমনি continue কোনো নির্দিষ্ট শর্ত মিলে গেলে লুপের সেই ধাপটা স্কিপ করে পরের ধাপে চলে যায়।

for (let i = 1; i <= 10; i++) {
  if (i === 6) {
    continue; // ৬ সংখ্যাটি স্কিপ করে পরের ধাপে যাবে
  }
  console.log(i);
}

যেহেতু এখানে ৬ এর সাথে মিলে যাওয়া শর্তের অংশ ছিলো, তাই আউটপুটে আপনি সব পাবেন কিন্তু ৬ পাবেন না।

এতো লুপের মধ্যে কি আপনি কনফিউজড হচ্ছেন? কখন কোন Loop ব্যবহার করবেন, জানতে চাচ্ছেন?

2 Likes