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.