Rust Control Flow

Control flow dari code pada rust terdapat 3 macam yaitu,

  • Block if – else if – else
  • Block loop, while, for
  • Block match

Block if – else if – else

Syntax dasar dari block if-else

if expression {
  //code goes here
}

if expression {
  //code goes here
}else{
  //code goes here
}

if expression {
  //code goes here
} else if expression {
  //code goes here
}else{
  //code goes here
}

Contoh menggunakan if else block:

fn discount(num: u8) {
    let amount = if num % 2 == 0{
        50
    } else{
        10
    };
    println!("Nilai Diskon adalah {}", amount );
}

fn main() {
    discount(10);
}

Block Loop

Perintah loop akan menjalankan block code sampai dilakukan perintah break (baik dari code atau dari keyboard).

Syntax dasar dari loop adalah

loop {
  //code goes here
  // if true
  // break;
}

Berikut contoh code dimana kalimat Hello World akan terus dituliskan ke layar, sampai kita menekan Ctr + C.

fn main() {
    loop{
        println!("Hello world");
    }
}

Untuk melakukan break melalui code, digunakan perintah break. Contoh code dibawah akan terus meminta input dari user, sampai dijawab dengan kata rust.

use  std::io;

fn main() {
    loop{
        println!("Masukan kata sandi");
        let mut word = String::new();

        io::stdin().read_line(&mut word).expect("Failed read line");

        if word.trim() == "rust"{
            break;
        }
    }

    println!("Kata sandi sudah dijawab");
}
Masukan kata sandi
sandi
Masukan kata sandi
rust
Kata sandi sudah dijawab

Block while

Syntax dasar dari while

while expression {
  //code goes here
}

Kita akan tulis ulang code sandi diatas menggunakan while block.

use  std::io;

fn main() {
    let mut word = String::new();
    while word.trim() != "rust" {
        println!("Masukan kata sandi");
        word = String::new();
        io::stdin().read_line(&mut word).expect("Failed read line");

    }
    
    println!("Kata sandi sudah dijawab");
}

Block For

Syntax dasar dari for loop adalah

for item in collection {
  //code goes here
}

Contoh for loop sebanyak 5 kali.

fn main() {
    for i in 1..6{
        println!("Loop ke {}", i);
    }
}
Loop ke 1
Loop ke 2
Loop ke 3
Loop ke 4
Loop ke 5

Block match

Block match mirip dengan if-else atau switch-case, namun lebih baik karena menggunakan pattern matching dan exhaustiveness checking.

Berikut contohnya

fn main() {

    let x = 3;

    match x {
        1 => println!("Satu"),
        2 => println!("Dua"),
        3 => println!("Tiga"),
        _ => println!("Angka tidak terdeteksi"),
    }
}

Yang dimaksud dengan exhaustiveness adalah, Rust akan memeriksa semua kemungkinan pattern. Berikut contoh code akan menyebabkan error karena kita tidak menyediakan semua kondisi.

fn main() {

    let x = true;
    let y = false;

    match (x, y) {
        (true, true) => println!("True All"),
        (true, false) => println!("True or false"),
        (false, true) => println!("True or false"),
    }
}

Jika di compile, akan menampilkan error

$ cargo run
   Compiling rustdasar v0.1.0 (F:\Project\rustdasar\rustdasar)
error[E0004]: non-exhaustive patterns: `(false, false)` not covered
 --> src\main.rs:6:11
  |
6 |     match (x, y) {
  |           ^^^^^^ pattern `(false, false)` not covered
  |
  = help: ensure that all possible cases are being handled, possibly by adding wildcards or more match arms
  = note: the matched value is of type `(bool, bool)`

For more information about this error, try `rustc --explain E0004`.
error: could not compile `rustdasar` due to previous error

Sampai disini kita sudah selesai mempelajari dasar-dasar penggunakan block control pada Rust.

Sharing is caring:

Leave a Comment