জাভাস্ক্রিপ্টে পুনরাবৃত্তি প্রক্রিয়াকরণ

জাভাস্ক্রিপ্টে পুনরাবৃত্তি প্রক্রিয়াকরণ

এই প্রবন্ধে, আমরা জাভাস্ক্রিপ্টে পুনরাবৃত্তি প্রক্রিয়াকরণ ব্যাখ্যা করব।

YouTube Video

জাভাস্ক্রিপ্টে for বিবৃতি

মূল সিনট্যাক্স

1for (initialization; condition; update) {
2  // Code to repeat
3}

জাভাস্ক্রিপ্টে for বিবৃতি পুনরাবৃত্তি সম্পাদনের জন্য একটি গতিধারা। যতক্ষণ একটি নির্দিষ্ট শর্ত পূরণ হয়, এটি নির্দিষ্ট কোড ব্লককে বারবার সম্পাদন করে। for বিবৃতি ব্যবহার করে, একই প্রক্রিয়া কার্যকরভাবে একাধিকবার সম্পাদন করা যায়।

  • উদ্বোধন (initialization): লুপ শুরু করার আগে যে অংশটি কেবল একবার সম্পাদিত হয়। লুপ কাউন্টার মতো ভেরিয়েবলগুলি আরম্ভ করুন।
  • শর্ত (condition): যে শর্তটি নির্ধারণ করে লুপ চালিয়ে যাবে কি না। true হলে, লুপ চলতে থাকে; false হলে, এটি শেষ হয়।
  • আপডেট (update): প্রতিটি লুপের শেষে এটি লুপ কাউন্টার আপডেট করার জন্য সম্পাদিত হয়।

উদাহরণ

1for (let i = 0; i < 5; i++) {
2    console.log(i);
3}

এই ক্ষেত্রে, i শুরু হয় 0 থেকে, এবং লুপ চলতে থাকে যতক্ষণ i < 5 true থাকে। i++ লুপের প্রতিটি পুনরাবৃত্তিতে i-কে ১ করে বৃদ্ধি করে। ফলস্বরূপ, 0 থেকে 4 পর্যন্ত সংখ্যা প্রদর্শিত হয়।

লুপ কাউন্টার স্কোপ

for বিবৃতির উদ্বোধন অংশে ভেরিয়েবলগুলি ঘোষণা বা আরম্ভ করুন। এখানে ঘোষিত ভেরিয়েবলগুলি শুধুমাত্র লুপের ভেতরে বৈধ।

1for (let i = 0; i < 3; i++) {
2    console.log(i); // Outputs 0, 1, 2
3}
4console.log(i);  // ReferenceError
  • এই উদাহরণে দেখানো হয়েছে যে, for বিবৃতির বাইরে একটি ভেরিয়েবলের উল্লেখ করলে একটি ত্রুটি ঘটবে।

অসীম লুপ

একটি শর্ত সেট করা যা লুপটি শেষ করে না, একটি অসীম লুপ তৈরি করে। এটি ব্রাউজার বা সিস্টেমে চাপ সৃষ্টি করতে পারে, তাই সতর্কতা প্রয়োজন।

1for (;;) {
2    console.log("Infinite loop");
3    break; // Exits the infinite loop with break
4}

এরেগুলির সাথে for বিবৃতি

এরেগুলির সাথে for বিবৃতি একত্রে ব্যবহার করা সাধারণ। একটি অ্যারের প্রতিটি উপাদান প্রক্রিয়াকরণের জন্য এটি সুবিধাজনক।

উদাহরণ

1let fruits = ["apple", "banana", "cherry"];
2
3for (let i = 0; i < fruits.length; i++) {
4    console.log(fruits[i]);
5}
6// Outputs "apple", "banana", "cherry"

এই উপায়ে, আপনি সূচক ব্যবহার করে একটি অ্যারের প্রতিটি উপাদান প্রক্রিয়াকরণ করতে পারেন।

অন্য লুপ গঠন

for...of বিবৃতি

for...of বিবৃতি অ্যারে এবং স্ট্রিংয়ের মতো ইটারেবল অবজেক্টের জন্য ব্যবহৃত হয়।

1let fruits = ["apple", "banana", "cherry"];
2
3for (let fruit of fruits) {
4    console.log(fruit);
5}
6// Outputs "apple", "banana", "cherry"

এটি আপনাকে সূচকগুলি ব্যবহার না করেই প্রতিটি উপাদান প্রক্রিয়াকরণের সুযোগ দেয়।

for...in বিবৃতি

for...in বিবৃতি একটি অবজেক্টের বৈশিষ্ট্যগুলির উপর পুনরাবৃত্তি করতে ব্যবহৃত হয়।

1let person = { name: "John", age: 30, city: "Tokyo" };
2
3for (let key in person) {
4    console.log(key + ": " + person[key]);
5}
6// Outputs "name: John", "age: 30", "city: Tokyo"

এইভাবে, আপনি কী ব্যবহার করে প্রতিটি উপাদানে অপারেশন করতে পারেন।

সারসংক্ষেপ

  • for বিবৃতিটি একটি লুপ নির্মাণ যা তিনটি অংশ নিয়ে গঠিত: প্রাথমিককরণ, শর্ত এবং আপডেট।
  • break বা continue ব্যবহার করে আপনি লুপগুলোর আচরণ নিয়ন্ত্রণ করতে পারেন।
  • অ্যারে বা অবজেক্টের সাথে সংযুক্ত হলে, উপাদান বা বৈশিষ্ট্য দক্ষতার সাথে প্রক্রিয়া করা যায়।

জাভাস্ক্রিপ্টে while বিবৃতি

মূল সিনট্যাক্স

1while (condition) {
2    // Code that repeats while the condition is true
3}

জাভাস্ক্রিপ্টে while বিবৃতিটি একটি লুপ স্ট্রাকচার যা নির্দিষ্ট শর্ত true হওয়া পর্যন্ত পুনরাবৃত্ত অপারেশন সম্পন্ন করে। for বিবৃতির মতো, while বিবৃতিটি শুধুমাত্র শর্ত নির্দিষ্ট করে।

  • শর্ত: লুপ চালিয়ে যাবার জন্য শর্তগত প্রকাশটি লিখুন। লুপ true থাকার সময় চলতে থাকে এবং false হলে শেষ হয়।

উদাহরণ

1let i = 0;
2
3while (i < 5) {
4    console.log(i);
5    i++;
6}
7console.log(i);  // 5

এই উদাহরণে, লুপটি তথ্যধারক i এর মান 0 থেকে শুরু হয় এবং i < 5 true থাকা পর্যন্ত চলে। প্রত্যেক লুপের পুনরাবৃত্তিতে, i এর মান ১ করে বাড়ানো হয়, এবং যখন i এর মান 5 হয়, শর্ত false হয় এবং লুপ শেষ হয়। ফলস্বরূপ, while বিবৃতিটি 0 থেকে 4 পর্যন্ত প্রদর্শন করে।

for বিবৃতির বিপরীতে, while বিবৃতিতে তথ্যধারকের প্রাথমিককরণ এবং আপডেট পৃথক বিবৃতি হিসেবে লেখা হয়। আপনি while বিবৃতির পরে তথ্যধারকটি উল্লেখ করতে পারেন। এই ক্ষেত্রে, while বিবৃতি শেষ হওয়ার পরে 5 প্রদর্শন করা হয়।

অসীম লুপ

যদি শর্তটি সর্বদা true থাকে, তাহলে একটি অসীম লুপ হয় যা শেষ হয় না। অসীম লুপ এড়ানো উচিত, তবে ইচ্ছাকৃতভাবে ব্যবহার করা হলে, একটি break বিবৃতি দিয়ে লুপটি সমাপ্ত করা যেতে পারে।

উদাহরণ

1while (true) {
2    console.log("Infinite loop");
3    break;  // Ends the loop with `break`
4}

একটি while লুপ দিয়ে অ্যারে প্রক্রিয়াকরণ

একটি while বিবৃতি ব্যবহার করেও অ্যারে প্রক্রিয়াকরণ সম্ভব।

উদাহরণ

1let fruits = ["apple", "banana", "cherry"];
2let i = 0;
3
4while (i < fruits.length) {
5    console.log(fruits[i]);
6    i++;
7}
8// Outputs "apple", "banana", "cherry"

do...while বিবৃতি

মূল সিনট্যাক্স

1do {
2    // Code that is executed at least once
3} while (condition);

do...while বিবৃতি, যা একটি while বিবৃতির ভিন্ন রূপ, লুপটি অন্তত একবার সম্পন্ন করার পরে কন্ডিশন পরীক্ষা করে। while বিবৃতি আগে কন্ডিশন পরীক্ষা করে, কিন্তু do...while বিবৃতি প্রথমে একটি প্রক্রিয়া সম্পন্ন করে তারপর কন্ডিশন যাচাই করে।

উদাহরণ

1let i = 0;
2
3do {
4    console.log(i);
5    i++;
6} while (i < 5);

এ উদাহরণে, i কে 0 থেকে 4 পর্যন্ত দেখানো হয়েছে। do...while বিবৃতি while বিবৃতির থেকে আলাদা যেহেতু এটি সবসময় একবার সম্পন্ন হয়, এমনকি কন্ডিশন false থাকলেও।

সারসংক্ষেপ

  • while বিবৃতিটি পুনরায় কোড সম্পাদনের জন্য ব্যবহৃত হয় যতক্ষণ কন্ডিশন true থাকে।
  • অসীম লুপের জন্য সতর্ক থাকুন, তবে লুপের প্রবাহ break এবং continue ব্যবহার করে নিয়ন্ত্রণ করা যায়।
  • do...while বিবৃতিটি বেশ উপকারী যখন আপনি লুপটি অন্তত একবার সম্পাদনা করতে চান।

break এবং continue

আপনি লুপের ভিতরে break এবং continue ব্যবহার করতে পারেন।

  • break লুপটি পূর্বে সম্পন্ন করার জন্য ব্যবহৃত হয়।
  • continue বর্তমান পুনরাবৃত্তি এড়িয়ে যায় এবং পরবর্তী পুনরাবৃত্তিতে চলে যায়।

break এর উদাহরণ

 1for (let i = 0; i < 10; i++) {
 2    if (i === 5) {
 3        break;  // Exits the loop when i is 5
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 2, 3, 4
 8
 9let i = 0;
10
11while (i < 10) {
12    if (i === 5) {
13        break;  // Ends the loop when i is 5
14    }
15    console.log(i++);
16}
17// Outputs 0, 1, 2, 3, 4

এই ক্ষেত্রে, যখন i 5 হয় তখন break সম্পন্ন হয়। ফলস্বরূপ, 0 থেকে 4 পর্যন্ত সংখ্যা প্রদর্শিত হয়।

continue এর উদাহরণ

 1for (let i = 0; i < 5; i++) {
 2    if (i === 2) {
 3        continue;  // Skips when i is 2
 4    }
 5    console.log(i);
 6}
 7// Outputs 0, 1, 3, 4
 8
 9let i = 0;
10while (i < 5) {
11    i++;
12    if (i === 3) {
13        continue;  // Skips when i is 3
14    }
15    console.log(i);
16}
17// Outputs 1, 2, 4, 5

এই ক্ষেত্রে, যখন i 2 হয় তখন continue সম্পন্ন হয়। ফলস্বরূপ, 2 ছাড়া অন্য সংখ্যা প্রদর্শিত হয়।

জাভাস্ক্রিপ্টে নেস্টেড লুপ

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

এখানে আমরা নেস্টেড লুপের মৌলিক কাঠামো, ব্যবহারিক উদাহরণ, সতর্কতা এবং অপ্টিমাইজেশন বিবেচনা ব্যাখ্যা করব।

নেস্টেড লুপের মৌলিক কাঠামো

নেস্টেড লুপের মৌলিক গঠন এমন একটি ফর্ম যেখানে একটি বা একাধিক লুপ অন্য একটি লুপের মধ্যে থাকে। প্রতিবার যখন বাইরের লুপটি একবার সম্পাদিত হয়, তখন ভিতরের লুপটি ততবার সম্পাদিত হয়।

নীচে দুটি নেস্টেড লুপের একটি মৌলিক উদাহরণ দেওয়া হল।

 1for (let i = 0; i < 3; i++) {
 2    console.log(`Outer loop iteration: ${i}`);
 3
 4    for (let j = 0; j < 2; j++) {
 5        console.log(`  Inner loop iteration: ${j}`);
 6    }
 7}
 8// Output:
 9// Outer loop iteration: 0
10//   Inner loop iteration: 0
11//   Inner loop iteration: 1
12// Outer loop iteration: 1
13//   Inner loop iteration: 0
14//   Inner loop iteration: 1
15// Outer loop iteration: 2
16//   Inner loop iteration: 0
17//   Inner loop iteration: 1

উপরের কোডে, i বাইরের লুপে গণনা করা হয় এবং j ভিতরের লুপে গণনা করা হয়। প্রতিবার যখন বাইরের লুপটি একবার সম্পাদিত হয়, তখন ভিতরের লুপটি দুইবার সম্পাদিত হয়।

নেস্টেড লুপের ব্যবহারিক উদাহরণ

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

নিচের উদাহরণে, আমরা একটি দ্বিমাত্রিক অ্যারে পরিচালনা করি এবং প্রতিটি উপাদান প্রিন্ট করি।

 1const matrix = [
 2  [1, 2, 3],
 3  [4, 5, 6],
 4  [7, 8, 9]
 5];
 6
 7for (let row = 0; row < matrix.length; row++) {
 8    for (let col = 0; col < matrix[row].length; col++) {
 9        console.log(`Element at [${row}][${col}] is: ${matrix[row][col]}`);
10    }
11}
12// Output:
13// Element at [0][0] is: 1
14// Element at [0][1] is: 2
15// Element at [0][2] is: 3
16// Element at [1][0] is: 4
17// Element at [1][1] is: 5
18// Element at [1][2] is: 6
19// Element at [2][0] is: 7
20// Element at [2][1] is: 8
21// Element at [2][2] is: 9

এইভাবে, নেস্টেড লুপ ব্যবহার করে দুটি মাত্রার অ্যারের প্রতিটি উপাদানে অ্যাক্সেস করা যায়।

নোটস

নেস্টেড লুপ ব্যবহার করার সময় কিছু বিষয় সম্পর্কে সচেতন থাকা প্রয়োজন।

  1. দক্ষতার সমস্যা

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

  2. জটিল অ্যালগরিদমে প্রয়োগ

    নেস্টেড লুপগুলি খুবই শক্তিশালী, তবে প্রক্রিয়াকরণ জটিল হয়ে উঠলে কোড বোঝা কঠিন হতে পারে। অতএব, কোডের পাঠযোগ্যতা বজায় রাখতে, সঠিক মন্তব্য এবং ফাংশন দিয়ে প্রক্রিয়াকরণ সংগঠিত করা গুরুত্বপূর্ণ।

অপটিমাইজেশনের বিবেচনা

নেস্টেড লুপ ব্যবহার করার সময় নিম্নলিখিত অপটিমাইজেশনগুলি বিবেচনা করা যেতে পারে।

  1. লূপের আগাম সমাপ্তি

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

1for (let i = 0; i < 5; i++) {
2    for (let j = 0; j < 5; j++) {
3        if (i + j > 5) {
4            break;
5        }
6        console.log(`i: ${i}, j: ${j}`);
7    }
8}
  1. গণনাগুলি বাইরে স্থানান্তর করা

    প্রতিবার লুপের ভিতরে একই গণনা করা পরিবর্তে, এটি লুপের বাইরে একবার সম্পাদন করা এবং ফলাফলটি প্রক্রিয়াটি আরও দক্ষ করার জন্য ব্যবহার করা যেতে পারে।

 1let array = [1, 2, 3, 4, 5];
 2
 3// Inefficient example (calculating every time)
 4for (let i = 0; i < array.length; i++) {
 5    for (let j = 0; j < array.length; j++) {
 6        let sum = array[i] + array[j];
 7        console.log(sum);
 8    }
 9}
10
11// Efficient example (calculating outside)
12let arrayLength = array.length;
13for (let i = 0; i < arrayLength; i++) {
14    for (let j = 0; j < arrayLength; j++) {
15        let sum = array[i] + array[j];
16        console.log(sum);
17    }
18}

সারসংক্ষেপ

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

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video