Kondisional#

Kondisional#

Di chapter sebelumnya, kita telah mengetahui tentang match. Sekarang, kita akan masuk ke dalam if dan else statement. If-else statement pada Rust dapat digunakan dengan cara yang sama, dan juga berbeda dari bahasa lain. If-else dalam Rust dapat digunakan pada saat assignment variabel, seperti match. Penggunaan secara normal tidak berbeda jauh dengan bahasa lainnya.

fn main() {

    let a = 10;

    if a > 10 {
        println!("A lebih besar dari 10");
    }
    else if a == 10 {
        println!("A sama dengan 10");
    }
    else {
        println!("A kurang dari 10");
    }

}

Dan penggunaannya dalam assignment,

fn main() {

    let a = 10;

    let b = if a == 10 {
        7
    } else {
        2
    };

    // OUTPUT: 7
    println!("{}", b);

}

Namun, kita dapat menggunakan if dengan agak spesial, untuk pengganti pattern matching.

If Let#

if let merupakan suatu fitur spesial yang dapat digunakan untuk enum. Statement ini digunakan untuk mengecek apakah sebuah varian benar-benar merupakan varian tersebut. if let dapat digunakan untuk hal yang straightforward dan tidak memerlukan pattern matching.

Sekarang perhatikan kode dibawah ini.

let optional = Some(7);

match optional {
    Some(i) => {
        println!("{}", i);

    },
    _ => {},
};

Kode diatas sangatlah awkward dan terlalu panjang untuk operasi seperti itu. Kita bahkan tidak memakai None dan semua operasi adalah void atau tidak mengembalikan nilai apapun. Kita hanya ingin mencetak nilai yang di-wrap didalam varian Some pada variabel optional. disini kita hanya membutuhkan satu varian saja, yaitu Some(i) dimana ia sudah pasti bukan None. Nah, Rust memiliki cara yang lebih baik untuk hal seperti ini dengan menggunakan if let.

let optional = Some(7);

if let Some(i) = optional {
    println!("{}", i);
}

Nah, dengan begini kode akan lebih pendek dari sebelumnya, dan juga tidak terlihat canggung lagi. Penggunaan if let adalah dengan menggunakan varian yang diinginkan, kemudian mengisinya dengan nilai bila varian tersebut memuat nilai, lalu menggunakan operator assignment, kita assign variabel yang ingin kita gunakan seperti optional pada diatas, kemudian dalam scope if let tersebut, kita dapat menggunakan nilai yang di-wrap didalam varian tersebut yaitu pada contoh diatas adalah i, sesuka hati kita.

Kita juga dapat menggunakannya pada enum apapun termasuk yang kita definisikan sendiri.

enum Test {
    A,
    B(i32),
}

fn main() {
    let a = Test::A;
    let b = Test::B(10);

    if let Test::A = a {
        println!("Varian A tanpa nilai")
    }

    if let Test::B(v) = b {
        println!("Varian B memiliki nilai: {}", v)
    }
}

# LATIHAN

TODO