# if - else স্টেটম্যান্ট

সি তে `if-else` হল ডিসিশন মেকিং স্টেটমেন্ট। প্রোগ্রামের বিভিন্ন যায়গায় আমাদের লজিকাল ডিসিশন নিতে হতে পারে এবং সেগুলোর উপর ভিত্তি করে আমাদের বিভিন্ন কাজ করা লাগতে পারে। এধরনের অপারেশনের জন্য `if-else` ব্যবহার করা হয়। `if-else` এর সিনট্যাক্স স্ট্রাকচার নিচের মত।

```c
    if(expression is true) 
    {
        statement;
    }
    else 
    {
        statement;
    }
```

খুব সাধারণভাবে বলা যায় আমরা `if` দিয়ে একটি স্টেটমেন্ট ট্রু নাকি ফলস সেটি দেখব এবং তারপর সেটি সত্য হলে আমরা কিছু স্টেটমেন্ট এক্সিকিউট করব আর না হলে অন্য কিছু স্টেটমেন্ট এক্সিকিউট করব। `if-else` আমাদের প্রোগ্রামটির কাজের ধারাকে বিভিন্ন ব্রাঞ্চ বা শাখায় ভাগ করে দিতে পারে। এখানে লক্ষ্যণীয় যে `if-else` এ মূলত `if` ব্লকটি প্রধান। অনেক সময় আমাদের `else` ব্লকটি একেবারে নাও লাগতে পারে। সেক্ষেত্রে শুধুমাত্র `if` ব্লকেই কাজ হয়ে যায়।

```c
    if(expression is true)
    {
        statement;
    }
```

আরেকটি বিষয় হল `if` সিনট্যাক্স এক্সপ্রেশনের নিউম্যারিক ভ্যালু নিয়ে কাজ করে। তাই সবসময় `expression != 0` না দিয়ে সরাসরি `expression` দিলেও হয়। অর্থাৎ নিচের দুইটি `if` ই কাজ করে একইভাবে।

```c
    if(expression !=0)
    {
        statement;
    }


    if(expression)
    {
        statement;
    }
```

## if-else এর ব্যবহার

আসুন এবার আমরা দেখি `if-else` কোথায় ব্যবহার করা যায়। আগেই বলেছি এটি ডিসিশন নিতে ব্যবহার করা হয়। আমরা একটি ছোট প্রোগ্রাম দিয়ে এর প্রয়োগ দেখব। এখানে আমরা দুইটি সংখ্যা ইউজারের কাছে জানতে চাইবো এবং সে দুটির মধ্যে কোনটি বড় আর কোনটি ছোট সেটি বের করব।

```c
#include<stdio.h>

int main(void)
{

int num1, num2;

printf("Enter two numbers to compare :\n");

scanf("%d %d", &num1, &num2);

if(num1>num2) {
    printf("%d is greater than %d", num1, num2);
}
else {
    printf("%d is greater than %d", num2, num1);
}

return 0;
}
```

এখানে আমরা দুইটি সংখ্যা নিয়েছি এবং প্রথমে `if` দিয়ে আমরা দেখছি `num1` কি `num2` এর চাইতে বড় কি-না। যদি বড় হয় তাহলে `if` ব্লকটি এক্সিকিউট হবে এবং প্রিন্ট করবে `num1` বড়। এবং যদি `num1` বড় না হয় তাহলে `else` ব্লকটি কাজ করে এবং প্রিন্ট করবে `num2` বড়।

## নেস্টেড if-else

আগের কোডটিতে আমাদের লজিক ফ্লো বেশ সাধারণ ছিল, আমাদের খালি একটি ডিসিশন নিতে হয়েছে। কিন্তু বাস্তবে এর চাইতে অনেক বেশি জটিল লাজিকাল ডিসিশন নিয়ে আমাদের কাজ করতে হতে পারে এবং একটি ডিসিশনের উপর ভিত্তি করে আরও ডিসিশন নিতে হতে পারে অর্থাৎ একটি `if` বা একটি `else` এর ভেতর আরও এক বা একাধিক `if-else` ব্লক থাকতে পারে। এধরনের কাজ করার জন্য আমরা `if-else` কে নেস্টেড করে ব্যবহার করতে পারি। উদাহরণ হিসেবে আমরা আগের উদাহরণটিকে একটু পাল্টিয়ে দেখব। দুটির বদলে আমরা এবার তিনটি সংখ্যা নেব এবং দেখব কোনটি সবচেয়ে বড়।

```c
#include<stdio.h>

int main(void)
{

int num1,num2,num3;

printf("Enter three numbers to compare :\n");
scanf("%d %d %d", &num1, &num2, &num3);


if(num1>num2) { //if num1 is greater than num2
    if(num1>num3) { //chechking with num3
        printf("%d is the largest number.", num1);
    }
    else {
        printf("%d is the largest number.", num3);
    }
}
else {
    if(num2>num3){ //checking num2 with num3
        printf("%d is the largest number.", num2);
    }
    else {
        printf("%d is the largest number.", num3);
    }
}

return 0;
}
```

এখানে আমরা যেটি করেছি সেটি হল, প্রথমে আমরা দেখেছি `num1` কি `num2` এর চাইতে বড় কি না। যদি বড় হয় তাহলে আমরা আরেকটি `if` ব্লকে `num1` কে `num3` এর সাথে তুলনা করেছি। আবার যদি প্রথম `if` এক্সপ্রেশনটি ট্রু না হয় অর্থাৎ যদি `num1` ছোট হয়, তাহলে আমরা `else` ব্লকে গিয়ে আবার `num2` কে `num3` এর সাথে তুলনা করেছি। এরকমভাবে আমরা নেস্টেড `if-else` ব্যবহার করে আরো জটিল ধরনের লজিক নিয়ে কাজ করতে পারি।
