Control Flow Statements (নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস)
নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস (Control Flow Statements) প্রোগ্রামে কোডের চালনার পথ নির্ধারণ করে। এর মাধ্যমে আপনি শর্ত ভিত্তিক সিদ্ধান্ত নিতে, লুপিং করতে, অথবা প্রোগ্রাম থেকে বের হয়ে আসতে পারেন। ডি প্রোগ্রামিং ভাষায় কয়েকটি ধরনের নিয়ন্ত্রণ প্রবাহ স্টেটমেন্ট ব্যবহৃত হয়, যার মধ্যে if, else, switch, for, while, do-while, এবং break/ continue অন্তর্ভুক্ত।
1. if এবং else স্টেটমেন্ট
if স্টেটমেন্ট শর্ত যাচাই করে এবং শর্তটি true হলে কোডের একটি নির্দিষ্ট ব্লক এক্সিকিউট করে। যদি শর্তটি false হয়, তবে else ব্লক এক্সিকিউট হতে পারে।
Syntax:
if (condition) {
// শর্তটি true হলে এক্সিকিউট হবে
} else {
// শর্তটি false হলে এক্সিকিউট হবে
}উদাহরণ:
int x = 10;
int y = 5;
if (x > y) {
writeln("x is greater than y");
} else {
writeln("y is greater than x");
}2. else if স্টেটমেন্ট
একাধিক শর্ত যাচাই করতে else if ব্যবহার করা হয়। এতে একাধিক শর্ত চেক করা সম্ভব হয় এবং প্রথম সত্য শর্তটি মিললে কোড ব্লকটি এক্সিকিউট হয়।
Syntax:
if (condition1) {
// condition1 true হলে
} else if (condition2) {
// condition2 true হলে
} else {
// অন্যথায়
}উদাহরণ:
int x = 10;
int y = 5;
int z = 15;
if (x > y) {
writeln("x is greater than y");
} else if (x > z) {
writeln("x is greater than z");
} else {
writeln("y is greater than both x and z");
}3. switch স্টেটমেন্ট
switch স্টেটমেন্ট একটি শর্তের একাধিক মান যাচাই করতে ব্যবহৃত হয়। এটি বিভিন্ন কেস ভ্যালু যাচাই করে এবং সঠিক কেস মিলে গেলে কোডের নির্দিষ্ট ব্লক এক্সিকিউট হয়।
Syntax:
switch (expression) {
case value1:
// value1 এর জন্য কোড
break;
case value2:
// value2 এর জন্য কোড
break;
default:
// কোন কেস মিলে না গেলে এক্সিকিউট হবে
}উদাহরণ:
int x = 2;
switch (x) {
case 1:
writeln("x is 1");
break;
case 2:
writeln("x is 2");
break;
case 3:
writeln("x is 3");
break;
default:
writeln("x is unknown");
}4. for লুপ
for লুপ নির্দিষ্ট সংখ্যক পুনরাবৃত্তি বা ইটারেশন করতে ব্যবহৃত হয়। এটি সাধারণত একটি কাউন্টার ভেরিয়েবল ব্যবহার করে এবং নির্দিষ্ট শর্ত পূরণ না হওয়া পর্যন্ত চলতে থাকে।
Syntax:
for (initialization; condition; increment/decrement) {
// লুপের মধ্যে কোড
}উদাহরণ:
for (int i = 0; i < 5; i++) {
writeln("i = ", i);
}5. while লুপ
while লুপ শর্ত true থাকলে কোড ব্লকটি এক্সিকিউট করতে থাকে। শর্তটি false হলে লুপ থেমে যায়।
Syntax:
while (condition) {
// কোড
}উদাহরণ:
int i = 0;
while (i < 5) {
writeln("i = ", i);
i++;
}6. do-while লুপ
do-while লুপ একটি বিশেষ ধরনের লুপ যা প্রথমে কোড এক্সিকিউট করে এবং পরে শর্ত যাচাই করে। এর মানে হল যে, কোডটি অন্তত একবার এক্সিকিউট হবে, এর পর শর্ত যাচাই করা হবে।
Syntax:
do {
// কোড
} while (condition);উদাহরণ:
int i = 0;
do {
writeln("i = ", i);
i++;
} while (i < 5);7. break স্টেটমেন্ট
break স্টেটমেন্টটি একটি লুপ বা সুইচ কেস থেকে বাহির হয়ে আসতে ব্যবহৃত হয়।
উদাহরণ:
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // লুপ থামিয়ে দেবে
}
writeln("i = ", i);
}8. continue স্টেটমেন্ট
continue স্টেটমেন্টটি একটি লুপের বর্তমান পুনরাবৃত্তি বা ইটারেশনকে বাদ দিয়ে পরবর্তী ইটারেশনে চলে যায়।
উদাহরণ:
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // ৫ এর জন্য কিছু করবে না, পরবর্তী ইটারেশনে চলে যাবে
}
writeln("i = ", i);
}সারসংক্ষেপ
নিয়ন্ত্রণ প্রবাহ স্টেটমেন্টস ডি প্রোগ্রামে কোডের 흐ড় নিয়ন্ত্রণ করতে ব্যবহৃত হয়। if, else, switch, for, while, do-while, break এবং continue স্টেটমেন্টগুলো প্রোগ্রামের কার্যকলাপ এবং লজিকাল ফ্লো নির্ধারণে গুরুত্বপূর্ণ ভূমিকা পালন করে। এগুলি ব্যবহারের মাধ্যমে আপনি বিভিন্ন শর্ত এবং লুপিং কন্ট্রোল করতে পারেন।
If, Else if, Else এর ব্যবহার
if, else if, এবং else হল কন্ডিশনাল স্টেটমেন্ট যা প্রোগ্রামে শর্ত (condition) অনুযায়ী কার্যক্রম নিয়ন্ত্রণ করতে ব্যবহৃত হয়। এই স্টেটমেন্টগুলির মাধ্যমে আমরা নির্দিষ্ট শর্ত পূর্ণ হলে কোডের বিভিন্ন অংশ কার্যকর করতে পারি। ডি প্রোগ্রামিং ভাষায় এগুলোর ব্যবহার নিচে বিস্তারিতভাবে আলোচনা করা হলো।
1. if স্টেটমেন্ট
if স্টেটমেন্টটি একটি শর্ত পরীক্ষা করে এবং শর্তটি সত্য (true) হলে নির্দিষ্ট কোড ব্লক চালায়।
Syntax:
if (condition) {
// শর্ত সত্য হলে চলবে এমন কোড
}উদাহরণ:
int num = 10;
if (num > 0) {
writeln("The number is positive.");
}এখানে, যদি num এর মান ০ এর বেশি হয়, তাহলে "The number is positive." আউটপুট হবে।
2. else if স্টেটমেন্ট
else if ব্যবহার করা হয় যখন if এর শর্ত মিথ্যা (false) হলে অন্য একটি শর্ত পরীক্ষা করতে। এটি একাধিক শর্ত পরীক্ষা করতে সাহায্য করে।
Syntax:
if (condition1) {
// প্রথম শর্ত সত্য হলে চলবে এমন কোড
} else if (condition2) {
// দ্বিতীয় শর্ত সত্য হলে চলবে এমন কোড
}উদাহরণ:
int num = 0;
if (num > 0) {
writeln("The number is positive.");
} else if (num < 0) {
writeln("The number is negative.");
}এখানে, প্রথমে চেক করা হবে num > 0 যদি শর্তটি মিথ্যা হয়, তবে পরবর্তী শর্ত num < 0 চেক করা হবে।
3. else স্টেটমেন্ট
else স্টেটমেন্টটি if এবং else if এর সব শর্ত মিথ্যা হলে কার্যকর হয়। এটি একটি ডিফল্ট শর্ত হিসেবে কাজ করে।
Syntax:
if (condition1) {
// প্রথম শর্ত সত্য হলে চলবে এমন কোড
} else if (condition2) {
// দ্বিতীয় শর্ত সত্য হলে চলবে এমন কোড
} else {
// সকল শর্ত মিথ্যা হলে চলবে এমন কোড
}উদাহরণ:
int num = -5;
if (num > 0) {
writeln("The number is positive.");
} else if (num < 0) {
writeln("The number is negative.");
} else {
writeln("The number is zero.");
}এখানে, যদি num > 0 অথবা num < 0 শর্ত দুটি মিথ্যা হয়, তাহলে "The number is zero." আউটপুট হবে।
4. Multiple else if and else Statements
একাধিক else if এবং else শর্ত থাকতে পারে, যাতে বিভিন্ন শর্ত পরীক্ষা করা হয় এবং প্রতিটির জন্য আলাদা কোড কার্যকর করা হয়।
উদাহরণ:
int num = 15;
if (num > 0) {
writeln("The number is positive.");
} else if (num == 0) {
writeln("The number is zero.");
} else {
writeln("The number is negative.");
}এখানে, প্রথমে চেক করা হবে num > 0, যদি তা মিথ্যা হয়, তবে পরবর্তী শর্ত num == 0 চেক হবে, এবং যদি তাও মিথ্যা হয়, তখন else ব্লক কার্যকর হবে।
সারসংক্ষেপ
if: একটি শর্ত পরীক্ষা করে এবং শর্তটি সত্য হলে নির্দিষ্ট কোড চালায়।else if: যদি পূর্বের শর্তগুলো মিথ্যা হয়, তবে আরেকটি শর্ত পরীক্ষা করা হয়।else: সব শর্ত মিথ্যা হলে এটি কার্যকর হয় এবং ডিফল্ট কোড ব্লক চালায়।
এই কন্ডিশনাল স্টেটমেন্টগুলো ব্যবহার করে কোডে শর্তভিত্তিক লজিক প্রয়োগ করা হয়, যা প্রোগ্রামকে আরও গতিশীল এবং কার্যকরী করে তোলে।
Switch এবং Case স্টেটমেন্ট
Switch এবং Case স্টেটমেন্টগুলি প্রোগ্রামিং ভাষায় শর্তাধীন (conditional) লজিক তৈরি করতে ব্যবহৃত হয়, যেখানে বিভিন্ন বিকল্পের মধ্যে একটি নির্বাচন করা হয়। এটি if-else স্টেটমেন্টের একটি বিকল্প হিসেবে ব্যবহৃত হতে পারে, কিন্তু যখন বিভিন্ন বিকল্পের মধ্যে একটি নির্দিষ্ট মানের ভিত্তিতে নির্বাচন করতে হয়, তখন Switch স্টেটমেন্ট বেশি কার্যকরী হয়।
ডি প্রোগ্রামিং ভাষায় Switch এবং Case স্টেটমেন্টের ব্যবহার সহজ এবং কার্যকরী। এটি একটি নির্দিষ্ট মানের ওপর ভিত্তি করে একাধিক সম্ভাব্য শাখার মধ্যে থেকে সঠিক শাখাটি নির্বাচন করতে সাহায্য করে।
1. Switch স্টেটমেন্টের গঠন
Switch স্টেটমেন্টের মধ্যে একটি একক এক্সপ্রেশন দেওয়া হয় এবং তার মানের সাথে তুলনা করে একাধিক Case এর মধ্যে থেকে সঠিকটি নির্বাচন করা হয়। যদি কোন Case এর সাথে মেলে, তাহলে সেই Case এর কোড এক্সিকিউট হবে।
Switch স্টেটমেন্টের গঠন:
switch (expression) {
case value1:
// কোড ১;
break;
case value2:
// কোড ২;
break;
default:
// যদি কোন case মেল না খায়
break;
}2. Switch এবং Case স্টেটমেন্টের ব্যাখ্যা
- switch(expression): এখানে
expressionহল এমন একটি এক্সপ্রেশন, যার মানের ভিত্তিতে শাখা নির্বাচন করা হয়। এটি সাধারনত একটি পূর্ণসংখ্যা (integer), চরিত্র (char), অথবা স্ট্রিং (string) হতে পারে। - case value1, case value2, ...: এটি বিভিন্ন মানের জন্য নির্বাচিত শাখাগুলি। যদি
expressionএর মানvalue1এর সাথে মেলে, তাহলে সেই শাখার কোড এক্সিকিউট হবে। - break: যখন একটি case ব্লক এক্সিকিউট হয়, তখন
breakকমান্ডের মাধ্যমে পরবর্তী কোন case এক্সিকিউট হতে আটকানো হয়। - default: এটি একটি ঐচ্ছিক শাখা, যা তখন এক্সিকিউট হয় যদি কোন case এর মান মেল না খায়। এটি ব্যবহার করা বাধ্যতামূলক নয়।
3. Switch এবং Case স্টেটমেন্টের উদাহরণ
উদাহরণ 1: সংখ্যার উপর ভিত্তি করে দিনের নাম
import std.stdio;
void main() {
int day = 3;
switch (day) {
case 1:
writeln("Sunday");
break;
case 2:
writeln("Monday");
break;
case 3:
writeln("Tuesday");
break;
case 4:
writeln("Wednesday");
break;
case 5:
writeln("Thursday");
break;
case 6:
writeln("Friday");
break;
case 7:
writeln("Saturday");
break;
default:
writeln("Invalid day");
break;
}
}এখানে, day এর মান 3 হওয়ায়, আউটপুট হবে **"Tuesday"**। যদি day এর মান ১ থেকে ৭ এর বাইরে যেত, তবে default ব্লক এক্সিকিউট হয়ে "Invalid day" আউটপুট দিত।
উদাহরণ 2: চরিত্র (Character) এর উপর ভিত্তি করে সিদ্ধান্ত
import std.stdio;
void main() {
char grade = 'B';
switch (grade) {
case 'A':
writeln("Excellent");
break;
case 'B':
writeln("Good");
break;
case 'C':
writeln("Average");
break;
case 'D':
writeln("Poor");
break;
default:
writeln("Invalid grade");
break;
}
}এখানে, grade এর মান 'B' হওয়ায় আউটপুট হবে **"Good"**। অন্য কোন অক্ষর দিলে default ব্লক এক্সিকিউট হয়ে "Invalid grade" আউটপুট দেবে।
4. Switch এবং Case স্টেটমেন্টের সুবিধা
- সহজ এবং পরিষ্কার: একাধিক শর্তের মধ্যে একটি নির্দিষ্ট মানের জন্য সিদ্ধান্ত নেওয়া সহজ করে।
- অধিক কার্যকরী: যদি অনেকগুলো if-else শর্ত থাকে, তাহলে switch-case ব্যবহার করলে কোডের কার্যকারিতা বৃদ্ধি পায়।
- পাঠযোগ্যতা: কোডের পাঠযোগ্যতা বৃদ্ধি পায়, কারণ এতে একাধিক শর্তকে এক জায়গায় সংগঠিত করা যায়।
সারসংক্ষেপ
Switch এবং Case স্টেটমেন্ট ডি প্রোগ্রামিং ভাষায় অনেক কার্যকরী। এটি একাধিক শর্তের মধ্যে একটি নির্দিষ্ট মানের ভিত্তিতে সিদ্ধান্ত নিতে সাহায্য করে। switch স্টেটমেন্টের মাধ্যমে কোডের কার্যকারিতা উন্নত করা যায় এবং if-else স্টেটমেন্টের তুলনায় এটি আরও পরিষ্কার এবং সংক্ষিপ্ত।
Loop Structures: for, while, do-while লুপ
ডি প্রোগ্রামিং ভাষায় লুপ (Loop) ব্যবহৃত হয় একটি নির্দিষ্ট অংশের কোড একাধিক বার চালানোর জন্য। তিনটি প্রধান লুপ স্ট্রাকচার রয়েছে: for, while, এবং **do-while**। এই লুপগুলো শর্তপূরণ না হওয়া পর্যন্ত কোডের নির্দিষ্ট অংশ বারবার চালাতে সহায়তা করে। এখানে প্রতিটি লুপের কাজ এবং ব্যবহারের উদাহরণ দেওয়া হলো।
1. for লুপ
for লুপটি একটি নির্দিষ্ট সংখ্যক বার কোড চালানোর জন্য ব্যবহৃত হয়। এটি তিনটি অংশে বিভক্ত:
- ইনিশিয়ালাইজেশন (শুরুতে একবার চালানো হয়)
- শর্ত (প্রতিটি ইটারেশন আগে পরীক্ষা করা হয়)
- ইনক্রিমেন্ট/ডিক্রিমেন্ট (প্রতিটি ইটারেশন পরে)
উদাহরণ:
void main() {
for (int i = 0; i < 5; i++) {
writeln("Iteration: ", i);
}
}এখানে:
int i = 0: লুপের শুরুতেiএর মান ০ দেওয়া হয়।i < 5: শর্ত, যখনi৫ এর কম, তখন লুপ চালানো হবে।i++:iএর মান প্রতি ইটারেশনে ১ বাড়বে।
আউটপুট:
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 42. while লুপ
while লুপটি শর্ত সঠিক থাকা পর্যন্ত কোড চালায়। এটি একটি শর্তের ভিত্তিতে কাজ করে, এবং শর্ত প্রথমে পরীক্ষা করা হয়। যদি শর্ত সত্য হয়, তবে কোড একাধিক বার চালানো হয়।
উদাহরণ:
void main() {
int i = 0;
while (i < 5) {
writeln("Iteration: ", i);
i++;
}
}এখানে:
i < 5: শর্ত, যখনi৫ এর কম, তখন লুপ চলতে থাকবে।i++: প্রতিটি ইটারেশনেiএর মান ১ বাড়ে।
আউটপুট:
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 43. do-while লুপ
do-while লুপটি while লুপের মতো, তবে এটি একটি বিশেষত্ব রয়েছে। এটি প্রথমে কোড একবার রান করে এবং তারপর শর্ত পরীক্ষা করে। অর্থাৎ, এটি কমপক্ষে একবার কোড চালাবে, শর্ত সত্য না থাকলেও।
উদাহরণ:
void main() {
int i = 0;
do {
writeln("Iteration: ", i);
i++;
} while (i < 5);
}এখানে:
- প্রথমে কোডটি একবার চালানো হবে (এটি
doব্লকের অংশ)। - এরপর শর্ত পরীক্ষা হবে (
i < 5)। শর্ত সত্য হলে লুপ চলতে থাকবে।
আউটপুট:
Iteration: 0
Iteration: 1
Iteration: 2
Iteration: 3
Iteration: 4সারসংক্ষেপ
forলুপ: নির্দিষ্ট সংখ্যক বার কোড চালানোর জন্য ব্যবহৃত হয়। এটি তিনটি অংশে বিভক্ত: ইনিশিয়ালাইজেশন, শর্ত, এবং ইনক্রিমেন্ট/ডিক্রিমেন্ট।whileলুপ: শর্ত সত্য থাকা পর্যন্ত কোড চালাতে থাকে, তবে শর্ত আগে পরীক্ষা করা হয়।do-whileলুপ: প্রথমে কোড একবার চালিয়ে পরে শর্ত পরীক্ষা করা হয়। এটি কমপক্ষে একবার কোড চালাবে, এমনকি শর্ত মিথ্যা হলে।
এই লুপ স্ট্রাকচারগুলো কোডের পুনরাবৃত্তি কার্যক্রম পরিচালনায় গুরুত্বপূর্ণ ভূমিকা পালন করে।
Break, Continue এবং Labeled Break এর ব্যবহার
break, continue, এবং labeled break তিনটি কন্ট্রোল স্টেটমেন্ট ডি প্রোগ্রামিং ভাষায় ব্যবহৃত হয় লুপ (loop) এবং কন্ডিশনাল স্টেটমেন্ট (conditional statement) এর প্রবাহ নিয়ন্ত্রণ করার জন্য। এগুলির মাধ্যমে আমরা লুপের চলাচল নিয়ন্ত্রণ করতে পারি যেমন লুপটি সম্পূর্ণভাবে থামানো বা পরবর্তী ইটারেশন শুরু করা।
1. break স্টেটমেন্ট
break স্টেটমেন্টটি লুপ বা স্যুইচ স্টেটমেন্টের মধ্যে ব্যবহৃত হয় এবং এটি লুপটিকে তৎক্ষণাৎ থামিয়ে দেয়। যখন একটি break স্টেটমেন্ট এক্সিকিউট হয়, তখন লুপের বাকি অংশ কার্যকর হয় না এবং প্রোগ্রাম পরবর্তী কোডে চলে যায়।
উদাহরণ:
void main() {
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // যখন i এর মান 5 হয়, তখন লুপ থামবে
}
writeln(i);
}
}এখানে:
- লুপটি ৫ বার চলবে এবং যখন
i == 5হবে, তখনbreakস্টেটমেন্টের কারণে লুপটি থেমে যাবে। - আউটপুট হবে:
0 1 2 3 4
2. continue স্টেটমেন্ট
continue স্টেটমেন্টটি লুপের চলমান ইটারেশনকে তৎক্ষণাৎ বাদ দিয়ে পরবর্তী ইটারেশনে চলে যায়। এর মানে হলো, যদি continue এক্সিকিউট হয়, তবে বর্তমান ইটারেশনের বাকি অংশ এড়িয়ে চলে যাবে এবং পরবর্তী ইটারেশন শুরু হবে।
উদাহরণ:
void main() {
for (int i = 0; i < 10; i++) {
if (i == 5) {
continue; // যখন i এর মান 5 হয়, তখন 5 বাদ দিয়ে পরবর্তী ইটারেশন শুরু হবে
}
writeln(i);
}
}এখানে:
i == 5হলেcontinueস্টেটমেন্ট এক্সিকিউট হবে এবংi == 5ছাড়া বাকি সব সংখ্যার আউটপুট হবে।- আউটপুট হবে:
0 1 2 3 4 6 7 8 9
3. labeled break স্টেটমেন্ট
labeled break স্টেটমেন্টটি নেস্টেড লুপ (nested loops) এ ব্যবহৃত হয়, যেখানে একাধিক লুপ থাকে। এটি নির্দিষ্ট লুপের মধ্যে break কার্যকর করতে সাহায্য করে। একাধিক লুপের মধ্যে কোন একটি লুপ থেকে বের হতে চাইলে, labeled break ব্যবহার করা হয়।
উদাহরণ:
void main() {
outerLoop:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i == 3 && j == 2) {
break outerLoop; // outerLoop লেবেলটির সাথে যুক্ত লুপটি ব্রেক হবে
}
writeln("i: ", i, " j: ", j);
}
}
}এখানে:
outerLoopলেবেলটি ব্যবহার করে আমরা বাইরের লুপটিকে থামিয়ে দিয়েছি। যখনi == 3এবংj == 2হবে, তখন বাইরের লুপের সাথে যুক্ত সব লুপ থামবে।আউটপুট হবে:
i: 0 j: 0 i: 0 j: 1 i: 0 j: 2 i: 0 j: 3 i: 0 j: 4 i: 1 j: 0 i: 1 j: 1 i: 1 j: 2 i: 1 j: 3 i: 1 j: 4 i: 2 j: 0 i: 2 j: 1 i: 2 j: 2
এখানে:
i == 3এবংj == 2হওয়ার পরে বাইরের লুপটি থামবে।
সারসংক্ষেপ
break: এটি লুপ বা স্যুইচ স্টেটমেন্টের মধ্যে ব্যবহৃত হয় এবং তৎক্ষণাৎ লুপটি বন্ধ করে।continue: এটি লুপের মধ্যে ব্যবহৃত হয় এবং বর্তমান ইটারেশনটি বাদ দিয়ে পরবর্তী ইটারেশন শুরু করে।labeled break: এটি নেস্টেড লুপের মধ্যে ব্যবহৃত হয় এবং একটি নির্দিষ্ট লুপ থেকে বের হতে সাহায্য করে।
এই কন্ট্রোল স্টেটমেন্টগুলো লুপের প্রবাহ নিয়ন্ত্রণে সহায়তা করে এবং প্রোগ্রামকে আরও কার্যকরী এবং নির্দিষ্টভাবে পরিচালিত করতে সাহায্য করে।
Read more