DEV Community

Adi Purwanto
Adi Purwanto

Posted on

Stage 5 - Conditional Expression | Belajar Rust #6

Sebenarnya conditional itu kayak kekuatan super, kalian bisa menggunakan conditional untuk membuat keputusan. Kekuatan ini bekerja dengan cara melalukan pengecekan pada condition of the expression dan bertindak sesuai dengan condition of the expression tersebut.

Tipe-tipe dari conditional expression

  1. if expression
  2. if let expression
  3. match expression

Rust Blog

1. If expression

Rust memiliki berbagai macam conditional menggunakan if statement. Apa saja sih, yok kita bahas satu-persatu 🥳

a. If expression

if expression memerlukan suatu kondisi/ condition. Jika condition di dalam if expression bernilai true, maka block of code akan dieksekusi.

Rust Blog (1)

→ Contoh

fn main() {
  let mahasiswa = "Adi";

  if mahasiswa == "Adi" {
    println!("Mahasiswa ini bernama {}", mahasiswa);
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Mahasiswa ini bernama Adi
Enter fullscreen mode Exit fullscreen mode

b. If...else expression

if...else memiliki kegunaan yang melengkapi kekosongan if expression, jika kondisi yang berada di if expression bernilai false, maka statement yang berada di dalam block else akan dieksekusi.

Rust Blog

→ Contoh

fn main() {
  let mahasiswa = "Adi";

  if mahasiswa == "Adi" {
    println!("Mahasiswa ini bernama {}", mahasiswa);
  } else {
    println!("Wahh mahasiswa ini gak bernama");
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Mahasiswa ini bernama Adi
Enter fullscreen mode Exit fullscreen mode

c. If...else if...else expression

Jika kita memiliki banyak atau lebih dari satu kondisi yang perlu kita cek, maka menggunakan if...else if...else merupakan pilihan yang sangat tepat.

Rust Blog (2)

→ Contoh

fn main() {
  let mahasiswa = "Yusuf";

  if mahasiswa == "Adi" {
    println!("Mahasiswa ini bernama {}", mahasiswa);
  } else if mahasiswa == "Yusuf" {
     println!("Mahasiswa ini bernama {}", mahasiswa);
  } else {
    println!("Wahh mahasiswa ini gak bernama");
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Mahasiswa ini bernama Yusuf
Enter fullscreen mode Exit fullscreen mode

d. Nested if expression

Kita bisa melakukan nested/ bersarang if expression, yang dimaksud nested adalah kita dapat menggunakan if expression di dalam body if expression yang lain.

Rust Blog (3)

Note: Kalian bisa membuat banyak level nesting, sesuai kebutuhan.

→ Contoh

fn main() {
  let mahasiswa = "Adi";
  let mahasiswa_2 = "Yusuf";

  if mahasiswa == "Adi" {
    if mahasiswa_2 == "Yusuf" {
      println!("Mahasiswa ini bernama {}", mahasiswa_2);
    }
    println!("Mahasiswa ini bernama {}", mahasiswa);
  } else {
    println!("Wahh mahasiswa ini gak bernama")
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Mahasiswa ini bernama Yusuf
Mahasiswa ini bernama Adi
Enter fullscreen mode Exit fullscreen mode

e. Shorthand if

Kita sebagai warga netizen atau warga +62, kita sangat malas mengetik if-else yang sangat panjang, spesial untuk warga +62 kita bisa menggunakan shorthand if.

→ Contoh

fn main() {
  let mahasiswa = "Adi";

  let hasil = if mahasiswa == "Adi" { "Your so handsome, Adi" } else { "I,m pretty handsome" };
  println!("{}", hasil);
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Your so handsome, Adi
Enter fullscreen mode Exit fullscreen mode

2. If let expression

If let merupakan conditional expression yang memungkinkan pattern matching. Block of code dalam konstruk dijalankan jika pola dalam kondisi cocok dengan scrutinee expression. Aduh bingung ya, yuk langsung ke contoh dengan beberapa kasus.

a. Pattern is matched

→ Contoh

fn main() {
  // scrutinee expression
  let mahasiswa = ("Adi", "sistem informasi", "yogyakarta");

  if let  ("Adi", "sistem informasi", "yogyakarta") = mahasiswa {
    println!("{:?}", mahasiswa);
  } else {
    println!("Value tidak berjodoh");
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

("Adi", "sistem informasi", "yogyakarta")
Enter fullscreen mode Exit fullscreen mode

→ Contoh value pertama atau kedua match

fn main() {
  // scrutinee expression
  let mahasiswa = ("Adi", "sistem informasi", "yogyakarta");

  if let  ("Adi", "sistem informasi", z) = mahasiswa {
    println!("Nilai tampil {}", z);
  } else {
    println!("Value tidak berjodoh");
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Nilai tampil yogyakarta
Enter fullscreen mode Exit fullscreen mode

→ Contoh value pertama match

fn main() {
  // scrutinee expression
  let mahasiswa = ("Adi", "sistem informasi", "yogyakarta");

  if let  ("Adi", y, z) = mahasiswa {
    println!("Nilai tampil {}, {}", y, z);
  } else {
    println!("Value tidak berjodoh");
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Nilai tampil sistem informasi, yogyakarta
Enter fullscreen mode Exit fullscreen mode

b. Pattern is not matched

→ Contoh

fn main() {
  // scrutinee expression
  let mahasiswa = ("Adi", "sistem informasi", "yogyakarta");

  if let  ("Yusuf", y, z) = mahasiswa {
    println!("Nilai tampil {}, {}", y, z);
  } else {
    println!("Value tidak berjodoh");
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Value tidak berjodoh
Enter fullscreen mode Exit fullscreen mode

c. Pattern is replaced with _

Kita bisa menggunakan _ untuk kasus ketika pattern tidak terdefinisi.

→ Contoh

fn main() {
  // scrutinee expression
  let mahasiswa = ("Adi", "sistem informasi", "yogyakarta");

  if let _ = mahasiswa {
    println!("{:?}", mahasiswa);
  } else {
    println!("Value tidak berjodoh");
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

warning: irrefutable `if let` pattern
 --> src/main.rs:5:6
  |
5 |   if let  _ = mahasiswa {
  |      ^^^^^^^^^^^^^^^^^^
  |
  = note: `#[warn(irrefutable_let_patterns)]` on by default

("Adi", "sistem informasi", "yogyakarta")
Enter fullscreen mode Exit fullscreen mode

Note: Kenapa compiler mendeteksi warning ⚠️, dikarenakan Rust compiler mengeluh, kalian itu gak masuk akal makai if let dengan irrefutable pattern

3. Match expression

Match expression mengecek jika value saat ini cocok dengan value yang berada di dalam list. Jika kalian sudah pernah mempelajari beberapa bahasa pemrograman seperti C++, maka match expression mirip dengan switch. Expression ini membuat code lebih compact dari pada mengunakan if/else.

→ Contoh

fn main() {
  let x = 2;

  match x {
    1 => println!("Adi"),
    2 => println!("Purwanto"),
    3 => println!("Sistem"),
    _ => println!("Informasi") // ini akan dieksekusi jika value tidak ada yang macth
  };
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Purwanto
Enter fullscreen mode Exit fullscreen mode

→ Contoh

fn main() {
  let x = 10;

  let value = match x {
    1 => "Adi",
    2 => "Purwanto",
    3 => "Sistem",
    _ => "Informasi" // ini akan dieksekusi jika value tidak ada yang macth
  };

  println!("{}", value);
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Informasi
Enter fullscreen mode Exit fullscreen mode

Contoh

Contoh kali ini kita akan membuat program pengecekan apakah bilangan tersebut ganjil atau genap.

Input

integer
Enter fullscreen mode Exit fullscreen mode

Output

Angka x adalah ganjil atau Angka x adalah genap
Enter fullscreen mode Exit fullscreen mode

Note: Yuk kerjakan dulu, lalu beri tahu jawabannya di kolom discussion bagaimana cara solve the problem diatas.

.

.

.

.

.

→ Penyelesaian jika ada yang mentok

fn main() {
  // input
  let x:i32 = 6;

  if x % 2 != 0 {
    println!("Angka {} adalah ganjil", x);
  } else {
    println!("Angka {} adalah genap", x);
  }
}
Enter fullscreen mode Exit fullscreen mode

→ Output

Angka 6 adalah genap
Enter fullscreen mode Exit fullscreen mode

Jika ada kesalahan dalam menyampaikan konsep dan penulisan mohon bantuannya di kolom discussion 🤗. Terima kasih.

#samasamabelajar


LIST COURSE:

If you don't know me, then, you would not know who I am

Stage 1

Stage 2 - Variables

Stage 3 - Data Types

Stage 4 - Operators


Twitter

Buy me a coffe

Discussion (0)