Saturday, November 16, 2024

সহজ বাংলায় পিএইচপি : কন্ডিশনাল স্টেটমেন্টের ব্যবহার

সূচীপত্র


কন্ডিশনাল স্টেটমেন্ট নির্দিষ্ট কোন শর্ত সত্য হলে একটি ব্লকের স্টেটমেন্টগুলোকে এক্সিকিউট করে। এখানে দুই ধরণের কন্ডিশনাল স্টেটমেন্ট রয়েছে-

  • if স্টেটমেন্টঃ একটি শর্ত তৈরি করে এবং তা পরীক্ষা করে। শর্তটি সত্য হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হয়।
  • switch স্টেটমেন্টঃ কতগুলো বিকল্প শর্ত তৈরি করে। প্রত্যেকটি শর্তকে পরীক্ষা করে এবং সবচেয়ে যোগ্যতম শর্তের স্টেটমেন্টটি এক্সিকিউট করে।

if স্টেটমেন্ট

নির্দিষ্ট কোন শর্ত সত্য হলে if স্টেটমেন্ট একটি স্টেটমেন্ট ব্লককে এক্সিকিউট করে। এখানে আমরা সঠিক ফরম্যাটে if স্টেটমেন্ট তৈরি, অসত্য কোন শর্তের if স্টেটমেন্ট তৈরি ও একটি if স্টেটমেন্টের ভিতর অন্য if স্টেটমেন্টের শর্ত দেয়া নিয়ে আলোচনা করব। নিচের উদাহরণটি একটি if স্টেটমেন্টের সাধারণ ফরম্যাট-

if ( condition )
{
block of statements
}
elseif ( condition )
{
block of statements
}
else
{
block of statements
}

এই স্টেটমেন্টটিতে তিনটি অংশ রয়েছে-

  • if: এই অংশটি অত্যাবশ্যক। একটি ifই গ্রহণযোগ্য। এটা শর্তকে পরীক্ষা করে।
    • শর্তটি সত্য হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে। স্টেটমেন্ট  ব্লকটি এক্সিকিউট হওয়ার পর স্ক্রিপ্ট পরবর্তী শর্তে  চলে যায়। অর্থাৎ স্টেটমেন্টে কোন elseif অথবা else সেকশন থাকলে স্ক্রিপ্ট সেখানে চলে যায়।
    • শর্তটি সত্য না হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে না। স্টেটমেন্টে কোন elseif অথবা else সেকশন থাকলে স্ক্রিপ্ট সেখানে চলে যায়।
  • elseif: এই অংশটি ঐচ্ছিক। চাইলে এক বা তারও অধিক elseif ব্যবহার করা যাবে। elseifও শর্ত পরীক্ষা করে।
    • শর্তটি সত্য হলে স্টেটমেন্টটি এক্সিকিউট হবে। এরপর স্ক্রিপ্ট পরবর্তী নির্দেশনায় চলে যায়। যদি আরও elseif থাকে স্ক্রিপ্ট সেখানে চলে যায়।
    • শর্তটি সত্য না হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে না। স্টেটমেন্টে কোন elseif অথবা else সেকশন থাকলে স্ক্রিপ্ট সেখানে চলে যায়।
  • else: এই অংশটিও ঐচ্ছিক। একটি মাত্র else ব্যবহার করা যাবে। এই অংশটি কোন শর্ত পরীক্ষা করে না। কিন্তু স্টেটমেন্ট ব্লককে এক্সিকিউট করে। if সেকশন এবং সবগুলো elseif সেকশনই যখন মিথ্যা হয়ে যায় তখন স্ক্রিপ্ট else সেকশনে প্রবেশ করে।

উদাহরনে একটি if স্টেটমেন্ট দেখানো হলো। স্টেটমেন্টটি স্কোর পরীক্ষা করবে এবং শিক্ষার্থীদের প্রাপ্ত স্কোর অনুযায়ী গ্রেড এবং ছোট একটি বার্তা দেখাবে। এই স্টেটমেন্টটিতে একটি if স্টেটমেন্টের তিনটি (if, elseif ও else) অংশই নিম্নরুপভাবে ব্যবহৃত হয়েছে-

if ($score > 92 )
{
$grade = “A”;
$message = “Excellent!”;
}
elseif ($score <= 92 and $score > 83 )
{
$grade = “B”;
$message = “Good!”;
}
elseif ($score <= 83 and $score > 74 )
{
$grade = “C”;
$message = “Fair”;
}
elseif ($score <= 74 and $score > 62 )
{
$grade = “D”;
$message = “Poor”;
}
else
{
$grade = “F”;
$message = “Bad Result!”;
}
echo $message.”\n”;
echo “Your grade is $grade\n”;

কন্ডিশনাল স্টেটমেন্টটি নিচের ক্রমানুসারে কাজ করে-

  1. $score এর ভ্যালুকে 92 এর সাথে তুলনা করা হয়েছে। স্কোর 92 এর চেয়ে বড় হলে গ্রেড হবে A আর বার্তা আসবে Excellent! এবং স্ক্রিপ্ট সরাসরি ইকো স্টেটমেন্টে চলে যাবে। স্কোর 92 অথবা এর কম হলে শর্তটি সত্য না হওয়ায় $grade ও $message এ স্ক্রিপ্ট যাবে না। চলে যাবে পরবর্তী অর্থাৎ elseif সেকশনে।
  2. $score এর ভ্যালুকে 92 থেকে 83 এর মধ্যে তুলনা করা হয়েছে। স্কোরটি 92 এর সমান অথবা এর কম এবং 83 এর বড় হলে $grade ও $message কাজ করবে এবং স্ক্রিপ্ট ইকো স্টেটমেন্টে চলে যাবে। স্কোরটি 83 অথবা কম হলে স্টেটমেন্টটি সত্য না হওয়ায় $grade ও $message সেট হবে না এবং স্ক্রিপ্ট পরবর্তী elseif সেকশনে চলে যাবে।
  3. $score এর ভ্যালুকে 83 থেকে 74 এর মধ্যে তুলনা করা হয়েছে। স্কোরটি 83 এর সমান অথবা এর কম এবং 74 এর বড় হলে $grade ও $message কাজ করবে এবং স্ক্রিপ্ট ইকো স্টেটমেন্টে চলে যাবে। স্কোরটি 74 অথবা কম হলে স্টেটমেন্টটি সত্য না হওয়ায় $grade ও $message সেট হবে না এবং স্ক্রিপ্ট পরবর্তী elseif সেকশনে চলে যাবে।
  4. $score এর ভ্যালুকে 74 থেকে 62 এর মধ্যে তুলনা করা হয়েছে। স্কোরটি 74 এর সমান অথবা এর কম এবং 62 এর বড় হলে $grade ও $message কাজ করবে এবং স্ক্রিপ্ট ইকো স্টেটমেন্টে চলে যাবে। স্কোরটি 62 অথবা কম হলে স্টেটমেন্টটি সত্য না হওয়ায় $grade ও $message সেট হবে না এবং স্ক্রিপ্ট পরবর্তী elseif সেকশনে চলে যাবে।
  5. সবগুলো শর্তই যখন মিথ্যা হয়ে যাবে তখন গ্রেড F এ সেট হবে এবং Bad Result! বার্তাটি ইকো করবে।

কোন if কন্ডিশনাল স্টেটমেন্টে একটিমাত্র শর্ত বা স্টেটমেন্ট থাকলে দ্বিতীয় বন্ধনী ব্যবহার না করলেও চলে। যেমন উপরের উদাহরণটিতে-

if ($grade > 92 )
{
$grade = “A”;
}

এভাবে লিখা যায়-

if ($grade > 92 )
$grade = “A”;

এতে টাইপিংয়ের সময়ও বাঁচে এবং স্ক্রিপ্টটি সহজবোধ্য হয়। কিন্তু একাধিক স্টেটমেন্ট ব্যবহারের ক্ষেত্রে অবশ্যই দ্বিতীয় বন্ধনী ব্যবহার করতে হবে।

না বোধক বা নেগেটিভ if স্টেটমেন্ট

if স্টেটমেন্টে শর্তের সামনে ! চিহ্ন ব্যবহার করে নেগেটিভ স্টেটমেন্ট লেখা হয়। অর্থ্যাৎ কন্ডিশনটি মিথ্যা হলে স্টেটমেন্ট ব্লকটি এক্সিকিউট হবে। উদাহরণস্বরুপ নিচের স্টেটমেন্টটি দেখতে পারি-

if (preg_match(“/^S[a-z]*/”,$string))
{
$list[]=$string.”\n”;
}

এই স্টেটমেন্টে শর্ত হিসেবে একটি প্যাটার্ন দেয়া হয়েছে। স্ট্রিংটির সাথে প্যাটার্নের মিল হলে শর্তটি সত্য হবে এবং স্টেটমেন্টটি এক্সিকিউট হবে। এখন শর্তটির শুরুতে একটি ! চিহ্ন দিলে এর কাজ যথেষ্টভাবে বিপরীতমুখী হয়ে যাবে। এক্ষেত্রে উপরের উদাহরণটি আমরা এভাবে উপস্থাপন করতে পারি-

if (!preg_match(“/^S[a-z]*/”,$string)
{
$list[]=$string.”\n”;
}

এখানে যে স্ট্রিংগুলো প্যাটার্নটির সাথে মিলবে না সেগুলোকেই এ্যারেতে ধারণ করবে।

if স্টেটমেন্টকে একত্রীকরণ

একটি if কন্ডিশনাল স্টেটমেন্টের ভিতর অন্য আরেকটি কন্ডিশনাল স্টেটমেন্ট থাকতে পারে। উদাহরণস্বরুপ আপনার এমন সব ক্রেতার সাথে যোগাযোগ করা প্রয়োজন যারা চট্টগ্রামে বসবাস করে। তাদের মধ্যে যার ই-মেইল ঠিকানা আছে তাদের ই-মেইল ও যাদের ই-মেইল ঠিকানা নেই তাদের চিঠি পাঠানো হবে। নিচের স্টেটমেন্টটির মাধ্যমে এই কাজটি করা যায়।

if ( $custState == “ID” )
{
if ( $EmailAdd = “” )
{
$contactMethod = “letter”;
}
else
{
$contactMethod = “email”;
}
}
else
{
$contactMethod = “none needed”;
}

এই স্টেটমেন্টটি প্রথমে পরীক্ষা করে ক্রেতা চট্টগ্রামে বসবাস করে কিনা। ক্রেতা চট্টগ্রামের বাসিন্দা হলে স্ক্রিপ্ট ই-মেইল ঠিকানা খোঁজে। ই-মেইল ঠিকানা না পেলে যোগাযোগের পদ্ধতি চিঠিতে সেট করে। আর প্রথমেই ক্রেতা চট্টগ্রামের বাসিন্দা না হলে স্ক্রিপ্ট else সেকশনে চলে যায় এবং বলে দেয় যোগাযোগ করার প্রয়োজন নেই।

সুইচ স্টেটমেন্টের ব্যবহার

কন্ডিশনাল স্টেটমেন্টে বা এধরণের কন্ডিশনাল স্টেটমেন্ট নিয়ে কাজ করার প্রয়োজন হলে বেশিরভাগ ক্ষেত্রে if  স্টেটমেন্টই খুব ভাল কাজ করে এবং এটিই বহুল ব্যবহৃত। তবে কিছু কিছু ক্ষেত্রে এমন হতে পারে যে আপনার অনেকগুলো কন্ডিশন রয়েছে এবং প্রত্যেকটি কন্ডিশনের জন্য আলাদা স্টেটমেন্ট এক্সিকিউট করতে চান। উদাহরণস্বরূপ আপনি যে স্ক্রিপ্টটি তৈরি করছেন সেটি কোন প্রতিষ্ঠানের সেলস ট্যাক্স হিসাব করবে। কিভাবে আপনি ভিন্ন ভিন্ন বিষয় বা এলাকার ট্যাক্স রেট নিয়ে কাজ করবেন? এই পরিস্থিতির জন্যই সুইচ (switch) স্টেটমেন্টটি ডিজাইন করা হয়েছে।

সুইচ স্টেটমেন্ট একটি ভ্যারিয়েবলের ভ্যালুকে পরীক্ষা করে এবং ওই ভ্যারিয়েবলের সাথে মিলে যাওয়া ভ্যালুর জন্য স্টেটমেন্ট ব্লক এক্সিকিউট করে। একটি সুইচ স্টেটমেন্টের ফরম্যাট নিচে দেয়া হলো-

switch ( $variablename )
{
case value :
block of statements;
break;
case value :
block of statements;
break;
...
default:
block of statements;
break;
}

সুইচ স্টেটমেন্টটি $variablename এর ভ্যালুকে পরীক্ষা করে। তারপর স্ক্রিপ্ট case সেকশনে চলে যায় এবং স্টেটমেন্টগুলোকে এক্সিকিউট করে যতক্ষণ পর্যন্ত সে কোন break স্টেটমেন্ট না পায় অথবা স্টেটমেন্টের শেষে না পৌছায়। $variablename এর ভ্যালুর সাথে ম্যাচিং না হলে স্ক্রিপ্ট default সেকশনে চলে যায়। স্টেটমেন্টে যতগুলো প্রয়োজন case সেকশন ব্যবহার করা যাবে। আর default সেকশনটি ঐচ্ছিক। নিচের স্টেটমেন্টটি বিভিন্ন এলাকার সেলস ট্যাক্সের হারকে সেট করে।

switch ( $custState )
{
case “DHAKA” :
$salestaxrate = 0;
break;
case “CHITTAGONG” :
$salestaxrate = 1.0;
break;
default:
$salestaxrate = .5;
break;
}
$salestax = $orderTotalCost * $salestaxrate;

ঢাকার জন্য সেলস ট্যাক্সের হার 0, চট্টগ্রামের জন্য ট্যাক্সের হার শতকরা 100 ভাগ এবং অন্যান্য সকল এলাকার জন্য শতকরা 50 ভাগ। স্টেটমেন্ট প্রথমে $custState এর ভ্যালুকে দেখে এবং মিলে যাওয়া ভ্যালুর সেকশনে চলে যায়। যেমন $custState এর মান Rajshahi হলে স্ক্রিপ্ট default সেকশনকে এক্সিকিউট করে এবং ট্যাক্সের হারকে 0.5 এ সেট করে। এভাবে স্ক্রিপ্ট সেলস ট্যাক্সের হার হিসাব করে।

প্রত্যেকটি case সেকশনের শেষে break স্টেটমেন্ট অবশ্যই ব্যবহার করতে হবে। কোন সেকশনে break না থাকলে স্ক্রিপ্ট যতক্ষণ না কোন break স্টেটমেন্ট পাবে অথবা স্টেটমেন্টটি শেষ না হবে ততক্ষণ স্টেটমেন্টগুলো একাধারে এক্সিকিউট করতে থাকে।

লুপ

স্ক্রিপ্টে কোন নির্দিষ্ট স্টেটমেন্ট ব্লকের পুনরাবৃত্তি ঘটাতে অর্থাৎ একই কোড ব্লক একটি সারিতে বারবার চালাতে লুপ ব্যবহার করা হয়। লুপ নির্দিষ্ট বার অর্থাৎ যতবার সেট করে দেয়া হবে ততবার পুনরাপবৃত্তি ঘটবে। উদাহরণস্বরূপ একটি লুপ বাংলাদেশের সবগুলো জেলার নামকে ইকো করবে। লুপটিতে 64 বার পুনরাবৃত্তি করতে বা চলতে হবে। এমনও হতে পারে নির্দিষ্ট কোন শর্তে না পৌছা পর্যন্ত লুপটি চলতে থাকবে। যেমন একটি লুপ কোন একটি ডিরেক্টরিতে রাখা সবগুলো ফাইলের নামকে ইকো করবে সেখানে যতগুলো ফাইলই থাকুক না কেন। পিএইচপিতে তিন ধরনের লুপ রয়েছে।

  • for লুপ একটি হিসাব বা সংখ্যা সেট করে। স্টেটমেন্টের পুনরাবৃত্তি ঘটায় যতক্ষণ না ওই হিসাব বা সংখ্যায় না পৌছায়।
  • while লুপ একটি শর্ত তৈরি করে এবং শর্তটি পরীক্ষা করে। শর্ত সত্য হলে শর্তটি মিথ্যা হওয়ার আগ পর্যন্ত স্টেটমেন্ট ব্লকটিকে চালাতে থাকে।
  • do..while লুপ একটি শর্ত জুড়ে দেয়া হয় ও একটি স্টেটমেন্ট ব্লককে এক্সিকিউট করে। এরপর শর্তটি পরীক্ষা করে, সত্য হলে স্টেটমেন্ট ব্লকটি পুনরাবৃত্তি ঘটাতে থাকে যতক্ষণ না কন্ডিশনটি মিথ্যা হয়।

নিচে প্রত্যেকটি লুপ সম্বন্ধে বিস্তারিত আলোচনা করা হলো-

for লুপের ব্যবহার

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

for (startingvalue;endingcondition;increment)
{
block of statements;
}

একটি স্টেটমেন্টে নিচের ভ্যালুগুলো পূরণ করতে হবে-

  • startingvalue হলো যেখান থেকে গণনাটি শুরু হবে। যেমন স্টেটমেন্টটিতে $i=1 হলে $i ভ্যারিয়েবলটির মান সমান 1 হবে। অর্থাৎ গণনা 1 থেকে শুরু হবে।
  • endingcondition একটি স্টেটমেন্ট যা শেষ ভ্যালুকে নির্ধারণ করে দেয়া হয়। যতক্ষণ এই স্টেটমেন্টটি সত্য থাকে ততক্ষণ লুপটি চলতে থাকে। স্ক্রিপ্ট যখন দেখে স্টেটমেন্টটি মিথ্যা তখনই লুপটি বন্ধ হয়ে যায়। যেমন $i<10 স্টেটমেন্টটিতে লুপের শেষ ভ্যালু নির্ধারণ করা হয়েছে 10। লুপটি চলতে চলতে যখন $i এর মান 10 হয় তখনই লুপটি বন্ধ হয়ে যায়। অর্থাৎ $i=10 হয়ে গেলে শর্তটি আর সত্য থাকে না। $i<$size এর মতো স্টেটমেন্টে ভ্যারিয়েবলও অন্তর্ভুক্ত করা যায়।
  • increment: এই স্টেটমেন্ট হিসাব সংখ্যাটির বৃদ্ধি ঘটায়। যেমন $i++ স্টেটমেন্ট প্রত্যেকটি ব্লকের শেষে 1 করে যোগ করে। $i=+1 অথবা $i– এই ধরণের ইনক্রিমেন্ট স্টেটমেন্ট ব্যবহার করা হয়।

উদাহরনস্বরূপ নিচের লুপটি Hello World! স্ট্রিংটিকে তিনবার ডিসপ্লে করে-

for ($i=1;$i<=3;$i++)
{
echo “$i. Hello World!<br />”;
}

স্টেটমেন্টগুলো এরকম আউটপুট দিবে-

1. Hello World!

2. Hello World!

3. Hello World!

for লুপকে একত্রীকরণ

লুপকে ডাইনামিক করতে অর্থাৎ জটিল কাজের প্রয়োজনে একটি লুপের ভিতর আরো এক বা একাধিক লুপ সেট করা হয়। যেমন আমরা গুণ করার মাধ্যমে 1 থেকে 9 পর্যন্ত নামতাগুলো দেখাতে পারি। তার জন্য নিচের স্টেটমেন্টটি লিখতে হবে-

for($i=1;$i<=9;$i++)
{
echo “\nMultiply by $i \n”;
for($j=1;$j<=9;$j++)
{
$result = $i * $j;
echo “$i x $j = $result\n”;
}
}

যার আউটপুট হবে-

Multiply by 1

1 x 1 = 1

1 x 2 = 2

1 x 8 = 8

1 x 9 = 9

Multiply by 2

2 x 1 = 2

2 x 2 = 4

2 x 8 = 16

2 x 9 = 18

Multiply by 3

3 x 1 = 3

… আরো অনেক।

এডভান্সড for লুপ

লুপের গঠনটি আসলে খুবই সাধারণ এবং এটি দিয়ে লুপ সংক্রান্ত যে কোন উদ্দেশ্যেই সফল হওয়া যাবে। ইতিপূর্বে আমরা মৌলিক লুপ সম্বন্ধে জেনেছি। নিচে আমরা সাধারণ লুপের ফরম্যাটটি দেখব-

for (beginning statements; conditional statements; ending statements)
{
block of statements;
}

এই for লুপটি অনেকগুলো নিয়ম মেনে চলে। যেমন-

  • beginning statements লুপের শুরুতেই একবার এক্সিকিউট হয়।
  • The conditional statements প্রত্যেকটি লুপের পুনরাবৃত্তির জন্য স্ক্রিপ্ট কন্ডিশনকে পরীক্ষা করে। এটা হবে ভ্যালুর বৃদ্ধির হার।

প্রতিটি স্টেটমেন্টের সেকশন ; (সেমিকোলন) দিয়ে আলাদা করা হয়। প্রত্যেকটি সেকশনে প্রয়োজনীয় সংখ্যক স্টেটমেন্ট ব্যবহার করা যাবে। প্রতিটিতে কমা ব্যবহার করতে হবে।

নিচের লুপটিতে তিনটি সেকশনেই স্টেটমেন্ট রয়েছে-

$t = 0;
for ($i=0,$j=1;$t<=4;$i++,$j++)
{
$t = $i + $j;
echo “$t<br />”;

এই উদাহরণটিতে $i=0 ও $j=1 হলো বিগেনিং স্টেটমেন্ট, $t<=4 হলো কন্ডিশনাল স্টেটমেন্ট এবং $i++ ও $j++ হলো এন্ডিং স্টেটমেন্ট।

স্টেটমেন্টগুলোর আউটপুট হবে এরকম-

1

3

5

এই লুপটি যে ক্রমে এক্সিকিউট হয়েছে-

  1. বিগেনিং সেকশনের দুটি স্টেটমেন্ট এক্সিকিউট হয়েছে। $i  তে 0 ও $j তে 1 সেট করা হয়েছে।
  2. কন্ডিশনাল সেকশনের স্টেটমেন্টটি মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? হ্যাঁ, তাই স্টেটমেন্টটি সত্য। লুপটির এক্সিকিউশন চলতে থাকে।
  3. স্টেটমেন্ট ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হয়েছে। $i যোগ $j সমান $t, যা 0+1 সমান 1। তারপর ইকো হয়ে আউটপুট হয়েছে।
  4. এন্ডিং সেকশনের দুটি স্টেটমেন্ট এক্সিকিউট হয়েছে। $i ও $j উভয়টিতে 1 বৃদ্ধি বা ইনক্রিমেন্ট হয়েছে। তাই $i সমান 1 ও $j সমান 2।
  5. কন্ডিশনাল সেকশন মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? এই অবস্থানে সমান, তাই স্টেটমেন্টটি সত্য। সুতরাং লুপটি এক্সিকিউট হতে থাকবে।
  6. স্টেটমেন্ট ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হয়েছে। এখন $t সমান 3 ($i যোগ $i যা 1+2)। $t ইকো হয়েছে যার আউটপুট 3।
  7. এন্ডিং সেকশনের দুটি স্টেটমেন্ট হয়েছে। $i ও $j উভয়টিতেই 1 বৃদ্ধি পেয়েছে। সুতরাং $i সমান 2 ও $j সমান 3।
  8. কন্ডিশনাল সেকশনটি মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? এখানে সমান 3 হওয়ায় স্টেটমেন্টটি সত্য। সুতরাং লুপটি এক্সিকিউট হতে থাকে।
  9. স্টেটমেন্ট ব্লকের স্টেটমেন্টগুলো এক্সিকিউট হয়েছে। এখন $t সমান 5 ($i যোগ $i যা 2+3)। $t ইকো হয়েছে যার আউটপুট 5।
  10. এন্ডিং সেকশনের দুটির স্টেটমেন্ট আবার এক্সিকিউট হয়েছে। $i ও $j দুটিতেই 1 ইনক্রিমেন্ট হয়েছে। তাই $i সমান 2 ও $j সমান 3।
  11. কন্ডিশনাল স্টেটমেন্ট আবার মূল্যায়িত হয়েছে। $t কি 4 এর ছোট অথবা সমান? এই অবস্থানে $t এর মান 5 হওয়ায় স্টেটমেন্টটি আর সত্য রইল না। লুপটি আর চলবে না, বন্ধ হয়ে গেছে। স্ক্রিপ্ট লুপটির পরের অন্য স্টেটমেন্টে চলে যাবে।

while লুপের ব্যবহার

একটি while লুপ যতক্ষণ পর্যন্ত নির্দিষ্ট শর্তটি সত্য থাকে ততক্ষণই পুনরাবৃত্তি হতে থাকে। লুপটি নিচের মতো কাজ করে-

  1. একটি শর্ত সেট করা হয়।
  2. প্রতিটি লুপের শুরুতে শর্তটি পরীক্ষা করা হয়।
  3. কন্ডিশনটি সত্য হলে লুপের পুনরাবৃত্তি ঘটতে থাকে। শর্তটি মিথ্যা হলে লুপটি থেমে যায়।

while লুপের সাধারণ ফরম্যাট

while ( condition )
{
block of statements
}

নিচের স্টেটমেন্টগুলো একটি while লুপ তৈরি করে-

$fruit = array (“orange”, “apple”, “grape”);
$testvar = “no”;
$k = 0;
while ( $testvar != “yes” )
{
if ($fruit[$k] == “apple” )
{
$testvar = “yes”;
echo “apple\n”;
}
else
{
echo “$fruit[$k] is not an apple\n”;
}
$k++;
}

লুপটি চালালে নিচের মতো আউটপুট ব্রাউজারে ডিসপ্লে করবে-

orange is not an apple

apple

স্টেটমেন্টটিকে স্ক্রিপ্ট নিচের ক্রমে এক্সিকিউট করে-

  1. লুপটি শুরু হওয়ার আগে ভ্যারিয়েবল সেট করা হয়েছে। $fruit একটি এ্যারে যার তিনটি ভ্যালু রয়েছে। $testvar একটি ভ্যারিয়েবল যার ভ্যালু “no”, $k একটি ভ্যারিয়েবল যার মান 0।
  2. লুপটি পরীক্ষা করে দেখে $testvar != “yes” স্টেটমেন্টটি সত্য। $testvar এ “no” সেট করায় স্টেটমেন্টটি সত্য, তাই লুপটি চলতে থাকে।
  3. if স্টেটমেন্টের শর্তটি পরীক্ষা করা হয়েছে। $fruit[$k] == “apple” কি সত্য? এই অবস্থানে $k সমান 0। তাই স্ক্রিপ্ট $fruit[0] পরীক্ষা করে। $fruit[0] সমান “orange” হওয়ায় স্টেটমেন্টটি মিথ্যা। সুতরাং if ব্লকের স্টেটমেন্টগুলো এক্সিকিউট না হয়ে স্ক্রিপ্ট চলে যাবে else সেকশনে।
  4. else স্টেটমেন্টটি এক্সিকিউট হয়েছে। ব্লক “orange is not an apple” লাইনটি আউটপুট দেয়।
  5. $k তে 1 যোগ হয়েছে। তাই $k সমান 1।
  6. স্ক্রিপ্ট লুপের শেষে পৌছায় এবং পুনরায় while লুপের শুরুতে চলে যায়।
  7. লুপটি পুনরায় পরীক্ষা করে দেখে $testvar != “yes” স্টেটমেন্টটি সত্য। কারন $testvar != “yes” পরিবর্তন হয়নি। এটি এখনও “no” তে সেট করা আছে। লুপটি চলতে থাকে।
  8. if স্টেটমেন্টের শর্তটি আবার পরীক্ষা করা হয়েছে। $fruit[$k] == “apple” কি সত্য? এই অবস্থানে $k সমান ১। স্ক্রিপ্ট $fruit[1] পরীক্ষা করে। $fruit[1] সমান “apple” হওয়ায় স্টেটমেন্টটি সত্য। সুতরাং লুপটি if ব্লকে প্রবেশ করে।
  9. if ব্লকের স্টেটমেন্টটি এক্সিকিউট হয়েছে। এই স্টেটমেন্ট দেখে $testvar সমান “yes” এবং “apple” আউটপুট দেয়। এটি আউটপুটের দ্বিতীয় লাইন।
  10. $k তে 1 যোগ হয়েছে। তাই $k সমান 2।
  11. স্ক্রিপ্ট লুপের শেষে পৌছায় এবং পুনরায় while লুপের শুরুতে চলে যায়।
  12. লুপটি শেষবারের মতো $testvar != “yes” স্টেটমেন্টটি পরীক্ষা করে। $testvar != “yes” কি সত্য? $testvar পরিবর্তন হয়ে “yes” এ সেট হয়েছে। তাই এটি সত্য না হওয়ায় লুপটি থেমে যায়।

do..while লুপ

do..while লুপ while লুপের মতোই। পূর্বের মতোই এই লুপটি নির্দিষ্ট কোন শর্ত সত্য থাকা পর্যন্ত এর পুনরাবৃত্তি ঘটাতে থাকে। একটি do..while লুপের সাধারণ ফরম্যাট-

do
{
block of statements
} while ( condition );

নিচের স্টেটমেন্টটি একটি লুপ সেট করে এবং আপেল কে খুজে বের করে। পূর্বের while লুপের ‍উদাহরণটির মতোই এটি কাজ করে।

$fruit = array ( “orange”, “apple”, “grape” );
$testvar = “no”;
$k = 0;
do
{
if ($fruit[$k] == “apple” )
{
$testvar = “yes”;
echo “apple\n”;
}
else
{
echo “$fruit[$k] is not an apple\n”;
}
$k++;
} while ( $testvar != “yes” );

যার আউটপুট হলো-

orange is not an apple

apple

while ও do..while দুটি লুপই একই ধরণের আউটপুট দেয়। দুটি লুপের মধ্যে পার্থক্য হলো শর্তগুলো যেখানে পরীক্ষা করা হয়। এমনকি শর্তটি কখনোই সত্য না হলে লুপটি কখনোই এক্সিকিউট হবে না। do..while লুপে একবারে লুপের নিচে শর্তটি পরীক্ষিত হয়। সুতরাং এখানে যদি শর্তটি সত্য না হয় তাহলেও অন্তত একবার লুপটি এক্সিকিউট হবে। উদাহরণস্বরুপ পূর্বের উদাহরণটিতে মূল শর্তে no এর পরিবর্তে yes সেট করা হয়েছে-

$testvar = “yes”;

শর্তটি প্রথমেই মিথ্যা এবং কখনোই সত্য হবে না। while লুপে এর কোন আউটপুট হয় না। do..while লুপের ক্ষেত্রে শর্তটি পরীক্ষা করার আগেই স্টেটমেন্ট ব্লকটি এক্সিকিউট হয়। তাই while লুপ কোন আউটপুট না দিলেও do..while লুপ আউটপুট দেয়।

অসীম লুপ পরিহার করা

সহজেই লুপকে এমনভাবে সেট করা যায় যা আর কখনোই থামবে না। এটা অসীম লুপ বলে। এটা পুনরাবৃত্তি ঘটতে থাকে চিরতরে। তবে সাধারণ এরকম অসীম লুপ খুব কমই তৈরি করা হয়। অনেক সময় প্রোগ্রামিং ভুলের কারণে এ ধরণের লুপ তৈরি হয়। যেমন আগের উদাহরণে লুপটি একটি পরিবর্তন করে দিলেই লুপটি একটি অসীম লুপে পরিণত হবে। যেমন-

$fruit = array (“orange”, “apple”, “grape”);
$testvar = “no”;
while ( $testvar != “yes” )
{
$k = 0;
if ($fruit[$k] == “apple” )
{
$testvar = “yes”;
echo “apple\n”;
}
else
{
echo “$fruit[$k] is not an apple\n”;
}
$k++;
}

এখানে $k = 0 স্টেটমেন্টটি লুপের বাইরে থেকে ভিতরে আনা হয়েছে। এই পরিবর্তনটি লুপটিকে অসীম লুপে পরিণত করেছে। স্ক্রিপ্টটি ব্রাউজারে নিচের আউটপুট দেখায়-

orange is not an apple

orange is not an apple

orange is not an apple

orange is not an apple

… এটি চিরতরে চলতেই থাকবে। যখনই লুপটি চলে তখন $k সমান 0 পায়। তখন $fruit[0] হয় এবং লুপটি ইকো হয়। লুপটি শেষে $k তে 1 যোগ হয়। লুপটি যখন আবার শুরু হয় $k তে আবার 0 সেট হয়। তাৎক্ষণিকভাবে এ্যারের প্রথম ভ্যালু orange তে স্ক্রিপ্ট প্রতিবার পড়ে। লুপটি কখনোই apple এবং $testvar সমান “yes” হয় না। তাই লুপটি অসীম।

Related Articles

Stay Connected

0FansLike
3,606FollowersFollow
0SubscribersSubscribe
- Advertisement -spot_img

Latest Articles