স্কিপ করে মূল কন্টেন্ট এ যান

পুনরাবৃত্তি

পরিচিতি

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

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

এই অংশে while এবং for লুপ, এবং পুনরাবৃত্তির প্রবাহ নিয়ন্ত্রণের জন্য break, continue কীওয়ার্ডের ব্যবহার পদ্ধতি ব্যাখ্যা করা হয়েছে।


while লুপ

while লুপ একটি নির্দিষ্ট শর্ত বিশ্বাসযোগ্য (true) হিসেবে মূল্যায়িত হলে বাক্সের কোড ব্লক পুনরায় চালায়। যখন শর্ত মিথ্যায় (false) পরিণত হয় তখনই পুনরাবৃত্তি দ্রুত শেষ হয়।

প্রতিরূপগুলি এমন পরিস্থিতির জন্য উপযুক্ত হয় যখন একটি নির্দিষ্ট শর্ত সন্তুষ্ট না হওয়া পর্যন্ত পুনরাবৃত্তি করা প্রয়োজন হয় এবং পুনরাবৃত্তির সংখ্যা অস্পষ্ট।

মৌলিক কাঠামো

নিচে Wave এ while লুপের মৌলিক কাঠামো প্রদর্শিত হচ্ছে।

while (condition) {
// পুনরাবৃত্তি করার জন্য কোড
}

শর্তটা অবশ্যই bool ধরণের হওয়া উচিত এবং কোড ব্লক {} মধ্যে একাধিক নির্দেশাবলী থাকা উচিত।

উদাহরণ: ০ থেকে ৪ পর্যন্ত নির্গত।

var i :i32 = 0;

while (i < 5) {
println("আমি {}।", i);
i = i + 1;
}

এ উদাহরণে, ভ্যারিয়েবল i ৫ এর চেয়ে ছোট থাকা পর্যন্ত পুনরাবৃত্তি চলতে থাকে। প্রতিটি পুনরাবৃত্তির মধ্যে বর্তমান মান আউটপুট করা হয় এবং i এর মান ১ করে বৃদ্ধি করা হয় যাতে শর্ত অবশেষে মিথ্যায় পরিণত হয়।


for লুপ

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

কারণ পুনরাবৃত্তি নিয়ন্ত্রণে প্রয়োজনীয় উপাদানগুলি এক জায়গায় সমবেত হয়, এটি পুনরাবৃত্তি কাঠামোকে এক নজরে বোঝা সম্ভব করে দেয়।

মৌলিক কাঠামো

for (init; condition; step) {
// পুনরাবৃত্তি করার জন্য কোড
}

Wave-এ for initialization বিভিন্ন ফর্ম সমর্থন করে।

  • অনির্দিষ্ট var টাইপ initialization
  • var / let mut / const ডিক্লেয়ারেশন initialization
  • সাধারণ এক্সপ্রেশন initialization (বিদ্যমান ভ্যারিয়েবল পুনর্ব্যবহার)

উদাহরণ ১: অনির্দিষ্ট টাইপ initialization

for (i :i32 = 1; i <= 5; i += 1) {
println("i = {}", i);
}

উদাহরণ ২: var / let mut initialization

for (var i: i32 = 0; i < 3; i += 1) {
println("var i = {}", i);
}

for (let mut j: i32 = 0; j < 3; j += 1) {
println("let mut j = {}", j);
}

উদাহরণ ৩: এক্সপ্রেশন ভিত্তিক initialization (পুরানো চলক পুনঃব্যবহার)

var i: i32 = 99;

for (i = 3; i <= 5; i += 1) {
println("i = {}", i);
}

println("after loop: {}", i); // 6

ডিক্লেয়ারেটিভ initialization (var, let mut, i :i32 = ...) লুপের স্কোপ ভ্যারিয়েবল হিসেবে কাজ করে, যখন এক্সপ্রেশন ভিত্তিক initialization (i = ...) বাহ্যিক ভ্যারিয়েবল এর মান আপডেট করে।


নেস্টেড লুপ

একটি লুপের ভিতরে অন্যান্য লুপ তৈরি করা যায় এবং এটিকে নেস্টেড লুপ বলে। 2D ডেটা কাঠামোর মাধ্যমে ভ্রমণ করার জন্য বা একাধিক শর্তের সমন্বয় প্রক্রিয়াজাত করার জন্য নেস্টেড লুপগুলি উপযোগী।

উদাহরণ: ডবল while লুপ

var i :i32 = 0;

while (i < 3) {
var j :i32 = 0;

while (j < 2) {
println("i={}, j={}", i, j);
j = j + 1;
}

i = i + 1;
}

এই উদাহরণে, বাইরের while লুপটি একবার সম্পন্ন হলে, সমস্ত ভিতরের while লুপগুলি কার্যকর হয়। এর মাধ্যমে, (i, j) রেমিটের সমন্বয়কে ক্রমানুসারে প্রক্রিয়াজাত করা যায়।


break স্টেটমেন্ট

break স্টেটমেন্ট একটি লুপকে অবিলম্বে বন্ধ করে এবং ক্রিয়া প্রবাহকে বাইরে নিয়ে যায়। যখন পুনরাবৃত্তি আর পরিচালনা করার প্রয়োজন নেই, তখন এটি ব্যবহার করা হয়।

উদাহরণ: নির্দিষ্ট মানে লুপ সমাপ্তি

var i :i32 = 0;

while (true) {
if (i == 5) {
break;
}

println(i);
i = i + 1;
}

এই উদাহরণে, একটি অসীম লুপের মধ্যে যখনই i 5 হয়, তখন break কার্যকর হয়ে লুপটি শেষ হয়। এভাবে, break স্টেটমেন্টটি লুপ শর্ত থেকে আলাদাভাবে লুপকে নিয়ন্ত্রণ করতে চান এমন সময়ে কার্যকর।


continue স্টেটমেন্ট

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

উদাহরণ: কেবল জোড় সংখ্যা মুদ্রণ

for (var i: i32 = 0; i <= 10; i = i + 1) {
if (i % 2 == 1) {
continue;
}

println(i);
}

এই কোডে, যদি i বিজোড় সংখ্যা হয়, তাহলে continue কার্যকর হয়ে আউটপুট অংশটি এড়িয়ে যায়। ফলস্বরূপ, কেবলমাত্র জোড় সংখ্যা প্রদর্শিত হয়।


সারাংশ

Wave-এ লুপগুলি শর্তভিত্তিক এবং পুনরাবৃত্তি ভিত্তিক উভয় লুপকেই স্বাভাবিকভাবে প্রকাশ করতে পারে এমনভাবে ডিজাইন করা হয়েছে। while স্টেটমেন্টটি শর্তকেন্দ্রিক পুনরাবৃত্তির জন্য উপযুক্ত এবং for স্টেটমেন্টটি পুনরাবৃত্তির সংখ্যা এবং প্রবাহ স্পষ্ট হলে কার্যকর।

break এবং continue একযোগে ব্যবহার করলে লুপ চলাকালীনও কার্যপ্রবাহ সূক্ষ্মভাবে নিয়ন্ত্রণ করা যায়, আরও সূক্ষ্ম এবং নমনীয় লুপ লজিক তৈরি করা যায়।