# পাঠ ৪: কন্ট্রোল ফ্লো -লুপিং- ব্রাঞ্চিং

\# পাঠ ৪: কন্ট্রোল ফ্লো -লুপিং- ব্রাঞ্চিং

* ইফ-দেন-ইলস
* সুইচ
* ফর লুপস
* হুয়াইল লুপ
* ডু-ইয়াইল লুপ
* ব্রেক স্ট্যাটমেন্ট
* কন্টিনিউ স্ট্যাটমেন্ট
* রিটার্ন স্ট্যাটমেন্ট
* সারসংক্ষেপ

আমাদের সোর্সকোডে -এ যেসব স্টেটমেন্ট থাকে তা সাধরারণত উপর থেকে নিচে যে অর্ডার এ দেওয়া থাকে সেই অর্ডারেই এক্সিকিউট হয়। কিন্তু কন্ট্রোল ফ্লো স্টেটমেন্ট এই অর্ডারকে ভেঙ্গে বিভিন্ন ডিসিশান মেকিং, লুপিং এবং ব্রাঞ্চিং এর মাধ্যমে একটি নির্দিষ্ট কোড ব্লক-কে এক্সিকিউট করে।

কন্ট্রোল ফ্লো স্টেটমেন্ট গুলি হচ্ছে -

* ডিসিশান-মেকিং স্টেটমেন্ট (if-then, if-then-else, switch)-&#x20;
* লুপিং স্টেটমেন্ট (for, while, do-while)
* এবং ব্রাঞ্চিং স্টেটমেন্ট (break, continue, return)&#x20;

`if-then` স্টেটমেন্ট হচ্ছে সব চেয়ে বেসিক কন্ট্রোল ফ্লো স্টেটমেন্ট।

আমরা যদি একটি প্রোগ্রাম এর একটি নির্দিষ্ট কোড ব্লক শুধু মাত্র একটি বিশেষ কন্ডিশান বা শর্ত সাপেক্ষেে এক্সিকিউট করতে চাই তাহলে আমরা `if-then` স্টেটমেন্ট ব্যবহার করি-

উদাহরণ-

```java
    int x = 10;

      if( x < 20 ){
         System.out.print("This is if statement");
      }
```

উপরের কোড ব্লকটিতে আমরা শুধু মাত্র x এর মান 20 হলেই তা প্রিন্ট করতে চাই।

`if` স্টেটমেন্ট এর পেরেনস্থেসিস “()” মাঝে একটি বুলিয়ান এক্সপ্রেশান থাকে। বুলিয়ান এক্সপ্রেশান হচ্ছে এক ধরণের এক্সপ্রেশান যার ফলাফল শুধুমাত্র `true` অথবা `false` হতে পারে। এই বুলিয়ান এক্সপ্রেশানটির মান যদি `true` হয় তাহলে এই if স্টেটমেন্ট এর ব্লকটি এক্সিকিউট হবে, নতুবা হবে না।

তবে আমাদের প্রথম কন্ডিশান বা শর্ত বা বুলিয়ান এক্সপ্রেশান যদি সত্যি না হয়, এবং এক্ষেত্রে আমরা অন্য একটি ব্লক অব কোড এক্সিকিউট করতে চাই, তাহলে `if-then-else` স্টেটমেন্ট ব্যবহার করি। উদাহরণ-

```java
      if( x < 20 ){
         System.out.print("This is if statement");
      }else{
         System.out.print("This is else statement");
      }
```

উপরের উদাহরণটি-তে একটি কন্ডিশান বা বুলিয়ান এক্সপ্রেশান ছিল, কিন্তু আমাদের মাঝে মাঝে একাধিক কন্ডিশান থাকতে পারে। তাহলে আরেকটি উদাহরণ দেখা যাক-

```java
        int score = 76;
        char grade;

        if (score >= 90) {
            grade = 'A';
        } else if (score >= 80) {
            grade = 'B';
        } else if (score >= 70) {
            grade = 'C';
        } else if (score >= 60) {
            grade = 'D';
        } else {
            grade = 'F';
        }

        System.out.println("Grade = " + grade);
```

উপরের উদাহরণটি যদি আমরা রান করি তাহলে output হবে -

```
Grade = C
```

এখানে প্রথম বুলিয়ান এক্সপ্রেশানটি যদি`‌true` হয, তাহলে ‌`grade = 'A';` কোড ব্লকটি এক্সিকিউট হবে, আর ‌`true` না হয়, তাহলে পরের কোড ব্লক, অর্থাৎ ‌‌`else if (score >= 80)` এক্সপ্রেশানটি ই্ভালুয়েট করা হবে, এবং এটি যদি `true` হয় তাহলে এর কার্লি ব্রেস `{}` এর মাঝের কোড ব্লকটি এক্সিকিউট হবে। অর্থাৎ আমাদের যদি অনেকগুলো কন্ডিশান থাকে তাহলে আমরা ‌`if` কন্ডিশান এর সাথে `else if` দিয়ে সেগুলো-কে এড করতে পারি। এই কন্ডিশান গুলোর মধ্যে যে কোন একটি এক্সপ্রেশান যদি `true` হয় তাহলে সেই ব্লক এর কোডটি এক্সিকিউট হবে ।

এখানে লক্ষ্য রাখতে হবে যে, প্রথম এক্সপ্রেশানটি যদি ‌`true` হয়, তাহলে কিন্তু বাকি কন্ডিশান গুলো আর ইভালুয়েট হবে না। অর্থাৎ রান টাইমে এই কোড ব্লক গুলো একদম প্রথম ‌`‌if` কন্ডিশান থেকে যতক্ষন পর্যন্ত কোন `true` এক্সপ্রেশান না পাওয়া যায়, ঠিক ততক্ষণ পর্যন্ত এক্সপ্রেশন গুলো ইভালুয়েট হবে। আমাদের উদাহরণটিতে - প্রথম, দ্বিতীয় এবং তৃতীয় এই তিনটি এক্সপ্রেশান ইভালুয়েটেড হয়েছে, এবং তৃতীয়টিতে `true` এক্সপ্রেশান পাওয়া গেছে, এবং ‌`grade = 'C';`এই কোড ব্লকটি এক্সিকিউট হয়েছে।

এভাবে আমাদের যদি একাধিক কন্ডিশান এর জন্য আমরা `if-then-else` ব্যবহার করে কোড লিখতে পারি। যদি একাধিক

## Switch

আমাদের কোড এ যদি একাধিক এক্সিকিউশান পাথ থাকে তাহলে, আমরা `if-then` এবং `if-then-else` ব্যবহার করে কোড লিখতে পারি। তবে এর পরিবর্তে `switch` স্ট্যাটমেন্ট ও ব্যবহার করতে পারি। উদাহরণ-

```java
public static String getMonth(int month) {
        String monthString;

        switch (month) {
            case 1:
                monthString = "January";
                break;
            case 2:
                monthString = "February";
                break;
            case 3:
                monthString = "March";
                break;
            case 4:
                monthString = "April";
                break;
            case 5:
                monthString = "May";
                break;
            case 6:
                monthString = "June";
                break;
            case 7:
                monthString = "July";
                break;
            case 8:
                monthString = "August";
                break;
            case 9:
                monthString = "September";
                break;
            case 10:
                monthString = "October";
                break;
            case 11:
                monthString = "November";
                break;
            case 12:
                monthString = "December";
                break;
            default:
                monthString = "Invalid month";
                break;
        }
        return monthString;
    }
```

## For Loop

যখন আমাদের একই কাজ বারবার করার প্রয়োজন হয় তখন আমরা লুপ ব্যবহার করি । ধরুন আপনাকে ১০ বার বাংলাদেশ শব্দটি প্রিন্ট দিতে বলা হল তাহলে আপনি System.out.println("Bangladesh"); দশবার না লিখে For Loop ব্যবহার করতে পারেন ।

```java
for(int i=1;i<=10;i++)
    {  
        System.out.println("Bangladesh");  
    }
```

উপরের কোড টুকুর জন্য Bangladesh শব্দটি ১০ বার প্রিন্ট হবে । আমরা ইচ্ছা করলে Bangladesh শব্দটি অসংখ্যক বার প্রিন্ট দিতে পারি এভাবে-

```java
for(;;)
    {  
        System.out.println("Bangladesh");  
    }
```

উপরের লুপটাকে infinitive loop বলে ।

For-Each Loop: একটা এরে র সবগুলো এলিমেন্টকে এক্সেস করার জন্য আমরা For-Each Loop ব্যবহার করতে পারি । নিচের উদাহরণটি দেখুনঃ

```java
    public class ForEachLoop {  
    public static void main(String[] args) {  
        int[] arr={3,6,9,10,30};  
        for(int i:arr){  
            System.out.println(i);  
        }  
    }  
    }
```

উপরের কোডটুকুর জন্য আউটপুট আসবে এমনঃ

```java
3
6
9
10
30
```

যতক্ষণ এরের সব এলিমেন্ট প্রিন্ট না হবে ততক্ষণ লুপটি চলবে ।

## While Loop

ফর লুপের মতই যতক্ষন লুপের কন্ডিশন সত্য হয় ততক্ষণ while loop তার ভিতরের স্টেটমেন্ট এক্সিকিউট করতে থাকে ।

```java
while (condition) {
    //block of statements
    statement 1; 
    statement 2;
    ...........
    statement n;
}
```

উদাহরনঃ

```java
class WhileLoopExample {
    public static void main(String args[]){
         int i=7
         while(i>1){
              System.out.println(i);
              i--;
         }
    }
}
```

আউটপুটঃ

```java
7
6
5
4
3
2
```

Infinite while loop:

উদাহরনঃ

```java
while(1==1){
      System.out.println("Bangladesh");          
      }
```

উপরের কোডটি দেখে বলুনতো Bangladesh শব্দটি মোট কতবার প্রিন্ট হবে !!!

কারো মনে প্রশ্ন হতে পারে যে for loop দিয়েও তো এসব করা যায় তাহলে আবার while loop কেন? মনে করুন আপনার এক বন্ধু আপনাকে ফোন করে বললো , তুই ১ ঘন্টার জন্য (for) ওখানে দাঁড়িয়ে থাক আমি আসছি ! আরেকজন ফোন করে বললো আমি যতক্ষণ (while) না আসবো তুই ওখানে ততক্ষণ দাঁড়িয়ে থাক ।

প্রথম ক্ষেত্রে আপনি জানেন যে আপনাকে ঠিক কতক্ষণ দাঁড়িয়ে থাকতে হবে । প্রোগ্রামিং এ যদি আপনি জানেন যে ঠিক কতবার এই কাজটি আমাকে করতে হবে তাহলে সেক্ষেত্রে আপনি for loop ব্যবহার করতে পারেন । ২য় ক্ষেত্রে আপনি ঠিক জানেননা যে কতক্ষণ আপনাকে দাঁড়িয়ে থাকতে হবে । যখন আমরা জানিনা যে ঠিক করবার লুপ চালাতে হবে সেসব ক্ষেত্রে আমরা while loop ব্যবহার করতে পারি । যেমনঃ আপনি যদি একটি টেক্সট ফাইল থেকে লাইন বাই লাইন ইনপুট নিতে চান তখন আপনি while loop ব্যবহার করতে পারেন কারন আপনি ঠিক জানেন না যে কতটা লাইন ইনপুট নিলে ফাইলটার শেষ লাইনে পৌঁছানো যাবে ।

## do-while loop

যখন আমরা ঠিক কতবার লুপটি চলবে তা জানিনা কিন্তু মিনিমাম একবার এক্সিকিউট করার দরকার পড়ে তখন do-while loop ব্যবহার করতে পারি ।

```java
do {
   // Statements
}while(condition);
```

এক্ষেত্রে কন্ডিশন টেস্ট হবার আগেই স্টেটমেন্ট টি এক্সিকিউট হয় ।

উদাহরনঃ

```java
public class DoWhileLoop{

   public static void main(String args[]) {
      int i = 5;

      do {
         System.out.print(i);
         i++; //increment by 1
         System.out.print("\n");
      }while( x < 10 );
   }
}
```

আউটপুটঃ

```java
5
6
7
8
9
```

## চলবে ----
