۳

کنترل جریان (Control Flow)

یاد می‌گیریم چطور به برنامه‌مون بگیم کی و کجا چه کاری انجام بده.

تصمیم‌گیری با `if`, `else if` و `else`

مثل بقیه زبان‌ها، با `if` می‌تونیم بر اساس یه شرط، یه تیکه کد رو اجرا کنیم. یه نکته مهم در Rust اینه که شرط `if` حتماً باید یه مقدار `bool` (true یا false) باشه.

fn main() {
    let number = 6;

    if number % 4 == 0 {
        println!("عدد بر ۴ بخش‌پذیر است");
    } else if number % 3 == 0 {
        println!("عدد بر ۳ بخش‌پذیر است");
    } else {
        println!("عدد نه بر ۴ و نه بر ۳ بخش‌پذیر است");
    }

    // می‌تونیم از if به عنوان expression هم استفاده کنیم
    let condition = true;
    let x = if condition { 5 } else { 6 };
    println!("The value of x is: {}", x);
}

تکرار با حلقه‌ها

Rust سه نوع حلقه برای تکرار کارها داره:

`loop`: حلقه بی‌نهایت

این حلقه تا ابد ادامه پیدا می‌کنه، مگر اینکه خودمون با `break` ازش بیایم بیرون.

fn main() {
    let mut counter = 0;
    let result = loop {
        counter += 1;
        if counter == 10 {
            break counter * 2; // از حلقه خارج شو و این مقدار رو برگردون
        }
    };
    println!("The result is {}", result); // خروجی: 20
}

`while`: تکرار تا وقتی شرط برقراره

fn main() {
    let mut number = 3;
    while number != 0 {
        println!("{}!", number);
        number -= 1;
    }
    println!("LIFTOFF!!!");
}

`for`: بهترین راه برای چرخیدن روی کالکشن‌ها

حلقه `for` امن‌ترین و پراستفاده‌ترین حلقه در Rust هست، چون جلوی خطاهای مربوط به خروج از محدوده آرایه رو می‌گیره.

fn main() {
    let a = [10, 20, 30, 40, 50];

    for element in a {
        println!("the value is: {}", element);
    }
    
    // شمارش معکوس با for
    for number in (1..4).rev() {
        println!("{}!", number);
    }
}