Computers · November 15, 2021 0

8. Nested If-else Statements

Decision Making Statements বা if else ভালো মত বুঝে থাকলে Nested If-else ও সহজেই বুঝতে পারবো। আমরা সাধারনত কোনো শর্তের উপর ডিপেন্ড করে কোনো সিদ্ধান্ত নিই, ঐ সিদ্ধান্ত অনুযায়ী কাজ করার সময় প্রায়ই অন্য কোনো শর্তের উপর ডিপেন্ড করে আরো অন্য কোনো সিদ্ধান্ত নেয়া লাগে। যেমন, মনে করি, সে আসলে আমি তার সাথে ঢাকা যাব। তারপর ঢাকা যাওয়ার পর মনে হলো, ঢাকা যখন আসলামই পর্যাপ্ত ব্যালান্স থাকলে কিছু শপিং করি। আর সে না আসলে তো ঢাকাতেই যাওয়া হচ্ছেনা, একা একা বাইরে থেকে একটু হেঁটে আসবো। এখানে শপিং করাটা ঢাকা যাওয়ার উপর ডিপেন্ড করতেছে, তাই ঢাকা যাওয়াটা ‘বাইরের শর্ত’ আর শপিং করাটা ‘ভিতরের শর্তে’র উপর নির্ভর করে ঘটবে। বিষয়টা নিচের মতো করে লেখা যায়:

যদি (সে আসে) // বাইরের শর্ত
{
   "আমি তার সাথে ঢাকা যাব";
   যদি (ব্যালান্স থাকে)   // ভিতরের শর্ত
   {
      "কিছু শপিং করব";
   }
}
অথবা যদি (সে না আসে)
{
   "ঢাকা যাওয়া আমার হলো নাহ!";
}

এখানে বাহিরের শর্ত বা outer if বা outer condition হলো “যদি সে আসে” এই শর্ত সত্য হলেই কেবল ঢাকা যাওয়ার ব্যপারটা ঘটবে। তারপর ভিতরের শর্ত বা inner if বা inner condition হলো “যদি ব্যালান্স থাকে” এই শর্ত সত্য হলেই কেবল কিছু শপিং করার ব্যপারটা ঘটবে। তো এভাবে আমার প্রয়োজনের উপর ডিপেন্ড করে যতগুলো কন্ডিশন লাগে সব আমি নিতে পারবো, বাইরের বা ভিতরের কোনো কন্ডিশনের কোনো লিমিট নাই। যেকোনো প্রগ্রামার বা প্রব্লেম সলভারেরই প্রয়োজন মতো শর্ত ব্যবহার করার মাধ্যমে যাচাই বাছাই করে কার্যোদ্ধার করাই হলো মূল লক্ষ। তবে এক ব্লক স্টেটমেন্টের জন্য কেবল একটা if ও একটা else থাকতে পারবে অর্থাৎ একটা outer if এর মধ্যে একটা inner if থাকতে পারবে, ওই inner if এর মধ্যে আবারো একটা inner if থাকতে পারবে। কিন্তু বাইরের বা ভিতরের একই স্টেটমেন্টে অনেকগুলো if বা অনেকগুলো else ব্যবহার করা যাবেনা, সেক্ষেত্রে অনেকগুলো (যতগুলো ইচ্ছা) else if ব্যবহার করা যাবে। নিচের ছবি দেখে বিষয়টা আরো ক্লিয়ার করি:

এখানে প্রত্যেকটা ‘{}’ বা সেকেন্ড ব্র্যাকেট তার ভিতরের সমস্ত সহায়-সম্পত্তি সহ হলো একেকটা ব্লক। আর if ও if এর মধ্যকার ব্লক সহ (if(condition){if body}) সহ else if এর আগ পর্যন্ত হলো একটা statement উপরের ছবি দেখলে বিষয়টা আরো ক্লিয়ার হবে। আর ব্লকের ভিতরের প্রত্যেকটা লাইনও এক একটা statement এমনকি বাইরের প্রত্যেকটা লাইনও যেমন, int n; cin>>n; এরাও একেকটা statement। আবার if ও else if সহ else এর শেষ পর্যন্ত (if statement, else if statement, else statement) সবাই মিলেও একটা statement।

এখন আমরা আবার মনে করি, আমার কাছে ১০০ টাকার বেশি থাকলে আমার বেস্টির সাথে বাইরে খেতে যাব আর ১০০র কম থাকলে যাবোনা বাসায় আলু ভর্তা দিয়ে একা একা ভাত খাবো। তারপর দেখলাম যে ১০০র বেশি আছে তো নাচতে নাচতে গেলাম বেস্টির সাথে বাইরে খাইতে, তারপর গিয়ে মনে হলো আচ্ছা ১০০র বেশি তো অনেক কিছুই হতে পারে (২০০,৫০০,এককোটি,একশ কোটি ইত্যাদি 😆 ) তো আবার ভাবলাম ২০০র কম থাকলে রাস্তার পাশের দোকান থেকে কোনো ফুচকা টুচকা খাবো আর ২০০ বা তার বেশি থাকলে রেস্টুরেন্টে যাবো। তারপর ব্যাগের ব্যালেন্স চেক করে রেস্টুরেন্টে গেলাম, গিয়ে বসে খাবারের মেন্যু দেখে মনে হলো , এখানে মেন্যুতে তো বিভিন্ন দামের খাবার আছে। আবার ভাবলাম যে ৫০০র বেশি থাকলে আচ্ছামত প্লেট ভর্তি কাচ্চি খাবো (ইয়ামম😋) আর কম থাকলে হাফ প্লেট তেহারি খেয়ে চলে আসব । এইযে ধাপে ধাপে অনেকগুলো শর্তের উপর গৃহীত সিদ্ধান্ত গুলো নির্ভর করতেছে, তারমানে একটা সিদ্ধান্তের ভিতরে গিয়ে আরো অন্য শর্তের উপর ডিপেন্ড করে অন্য সিদ্ধান্ত নেয়া লাগতেছে এগুলোই হলো Nested conditions. Nested মানেই হলো  ‘placed or stored one inside the other’

এখন দেখি উপরের ঘটনাগুলো কিভাবে ধাপে ধাপে কাজ করে:

যদি (টাকা > ১০০) 
{        
    cout<<" আমার বেস্টির সাথে বাইরে খেতে যাব"<<endl;
    যদি (টাকা < ২০০ )
    {
        cout<<"রাস্তার পাশের দোকান থেকে ফুচকা টুচকা খাবো"<<endl;
    }
    অথবা যদি (টাকা >= ২০০)
    {
        cout<<"রেস্টুরেন্টে যাবো"<<endl;
        যদি (টাকা > ৫০০)
        {
            cout<<"আচ্ছামত প্লেট ভর্তি কাচ্চি খাবো"<<endl;
        }
        অথবা
        {
            cout<<"হাফ প্লেট তেহারি খেয়ে চলে আসব"<<endl;
        }
    }
}
অথবা
{
    cout<<"বাইরে যাবোনা বাসায় বসে আলু ভর্তা দিয়ে ভাত খাবো"<<endl;
}

আচ্ছা তো আমরা উপরের কোডেরই অরিজিনাল কোডীয় রুপ হলো নিচে:

    if(tk > 100)
    {
        cout<<"Ill go outside to eat something with my bestie"<<endl;
        if(tk < 200)
        {
            cout<<"we'll eat some street food like fuchka or tuchka"<<endl;
        }
        else if(tk >= 200)
        {
            cout<<"we'll go to a restaurant"<<endl;
            if (tk > 500)
            {
                cout<<"we'll eat a full plate of kacchi"<<endl;
            }
            else
            {
                cout<<"will come back after eating a half plate of tehari"<<endl;
            }
        }
    }
    else
    {
        cout<<"wont go, will eat plain rice with home made alu vorta alone"<<endl;
    }

আপাত ভাবে দেখে কিছু জটিল মনে হলেও বিষয়টা কিন্তু মোটেও জটিলনা। এখানে একটা বাইরের বা outer if statement এর মধ্যে এক বা একাধিক ভিতরের বা inner if statement কাজ করতেছে। নিচের ছবির কোড খুব মনোযোগ দিয়ে দেখে ও নিজে নিজে লিখে কম্পাইল ও করলে আরো ক্লিয়ারলি বোঝা যাবে:

এখানে আমরা প্রথমে ২০০ ইনপুট নিয়েছি তারপর কনডিশন চেক করলাম ‘যদি (২০০ > ১০০)’ সত্য হয় তাহলে ঐ ব্লকের কাজগুলো করো আর মিথ্যা হলে else ব্লকের কাজগুলো করো। এখানে প্রথম শর্তটিই ‘যদি (২০০ > ১০০)’ সত্য তাই if এর ব্লকের মধ্যে গিয়ে সর্বপ্রথম cout<<“Ill go outside to eat something with my bestie”<<endl; দেখে Ill go outside to eat something with my bestie প্রিন্ট করল তারপর আবার if (tk < 200 ) দেখে চেক করল যে ২০০ < ২০০ কিনা কিন্তু ২০০ তো ২০০ থেকে ছোট না তাই শর্ত মিথ্যা তাই ওই ব্লকে না ঢুকে else ব্লকে ঢুকে কমান্ড অনুসারে প্রথমে we’ll go to a restaurant প্রিন্ট করল এবং আবার চেক করল if (200 > 500) তো এটাও মিথ্যা তাই if এর ব্লকে না গিয়ে else এর ব্লকে গিয়ে will come back after eating a half plate of tehari প্রিন্ট করে তার সমগ্র কর্মের সমাপ্তি ঘোষণা করল। এটাই সায়েন্স থুক্কু nested if else.

নিচে পুরো ব্যপারটা সংক্ষেপে তুলে ধরা হলো:

if(condition 1)     // outer if
{
   come to block 1 baibee if you are the truth
   if(condition 1.1)   // inner if
   {
      come to block 1.1 baibee and follow the commands
   }
   else if(condition 1.2)
   {
      block 1.2;
      if(condition 1.2.1)
      {
          block 1.2.1;
      }
      else
      {
         block 1.2.2;
      }
   }
   else (condition 1.3)
   {
      block 1.3;
   }
}
else (condition 2) // outer else
{
   come to block 2
   if(condition 2.1) 
   {
      block 2.1;
   }
   else
   {
      block 2.2;
   }
}

নিচের ফ্লো চার্ট দেখে বিষয়টা আরো ভালো মত ক্লিয়ার হতে পারে:

তো এই হলো আমাদের nested if – else; আজ তাহলে এপর্যন্তই থাক।