A.9. Seleksi Kondisi ➜ if, else if, else
Pada chapter ini kita akan bahas tentang penerapan if
untuk kontrol alur program.
Seleksi kondisi sendiri merupakan teknik untuk grouping blok kode yang eksekusinya tergantung hasil ekspresi seleksi kondisi. Analoginya mirip seperti fungsi rambu lalu lintas di jalan raya. Kapan kendaraan diperbolehkan melaju dan kapan harus berhenti diatur oleh rambu tersebut. Seleksi kondisi pada program juga kurang lebih sama, kapan sebuah blok kode akan dieksekusi dikontrol.
A.9.1. Keyword if
if
adalah salah satu keyword untuk seleksi kondisi di Rust, penggunaannya sangat mudah, yaitu dengan cukup tulis keyword tersebut diikuti dengan data boolean (atau ekspresi logika yang hasilnya boolean), lalu diikuti blok kode. Notasi penulisan if
seperti berikut.
if operasiLogika {
// blok kode
}
Pada notasi di atas, operasiLogika
bisa diisi dengan variabel yang bertipe bool
, atau statement ekspresi perbandingan seperti a == b
. Lebih jelasnya sekarang silakan perhatikan dan coba kode berikut.
let number_a = 3;
if number_a < 5 {
println!("number_a adalah di bawah 5");
}
let result_a = number_a >= 5;
if result_a {
println!("result_a adalah di atas atau sama dengan 5");
}
Pada kode di atas ada dua buah blok kode if
. Yang pertama mengecek hasil ekspresi logika apakah variabel number_a di bawah 5?
. Jika hasilnya benar atau true
maka blok kode setelahnya yang diapit tanda kurung kurawal akan dieksekusi, hasilnya menampilkan tulisan angka adalah di bawah 5
.
Blok kode if
kedua adalah mengecek nilai bool
variabel result_a
. Variabel result_a
sendiri isinya berasal dari ekspresi logika apakah variabel number_a lebih besar atau sama dengan 5?
. Jika hasilnya true
maka blok kode setelahnya (yang diapit tanda kurung kurawal) dieksekusi. Namun, pada contoh di atas, hasilnya adalah false
, karena variabel number_a
nilainya adalah tidak lebih besar atau sama dengan 5, dengan demikian blok kode tidak dieksekusi.
A.9.2. Keyword if
, else if
, dan else
Jika seleksi kondisi lebih dari satu, gunakan if
dan else if
dan/atau else
.
let number_b = 3;
if number_b == 2 {
println!("number_b adalah 2");
} else if number_b < 2 {
println!("number_b adalah di bawah 2");
} else {
println!("number_b adalah di atas 2");
}
Pada contoh di atas, number_b
yang nilainya 3
, match dengan statement seleksi kondisi else
, dengan ini maka statement dalam blok kode tersebut dieksekusi, text number_b adalah di atas 2
muncul.
Silakan bermain dengan nilai variabel number_b
untuk coba-coba.
A.9.3. Nested if
Sebuah blok kode if
bisa saja berada di dalam sebuah if
, dan seperti ini umum terjadi di bahasa pemrograman. Di Rust penerapan nested if
sama seperti pada bahasa lainnya, yaitu dengan langsung tuliskan saja blok kode if
ke dalam blok kode if
. Contoh:
let number_c = 10;
if number_c > 6 {
println!("selamat, anda lulus");
if number_c == 10 {
println!("dengan nilai sempurna");
} else if number_c > 7 {
println!("dengan nilai baik");
} else {
println!("dengan nilai cukup");
}
} else {
println!("anda tidak lulus");
if number_c < 4 {
println!("belajar lagi ya");
} else {
println!("jangan malas belajar!");
}
}
A.9.4. Returning From if
Returning from if
adalah salah satu cara unik penerapan if
. Yang biasanya if
digunakan untuk eksekusi statements dengan kondisi tertentu, pada case ini statement yang ada pada blok kode if ditampung sebagai return value atau nilai balik. Teknik ini mirip seperti operasi ternary hanya saja jumlah kondisinya bisa sebanyak yang kita inginkan.
Agar lebih jelas, silakan pelajari dulu kode berikut.
let number_d = 3;
let result_d: bool;
if number_d == 2 {
result_d = true
} else {
result_d = false
}
println!("result_d adalah {result_d}");
Blok seleksi kondisi pada contoh di atas menjadi penentu nilai variabel result_d
. Dengan kebutuhan tersebut, kita bisa juga memanfaatkan let if
untuk mendapatkan hasil yang ekuivalen.
Pada kode di atas, deklarasi variabel
result_d
dan pengisian nilainya adalah ditulis dalam statement terpisah. Cara ini diperbolehkan pada variable immutable (tanpa perlu membuatnya mutable) selama operasi assignment hanya dilakukan sekali saja setelah deklarasi.Lebih detailnya dibahas pada chapter Variabel section A.4.5.
Kode di atas jika diubah ke bentuk let if
hasilnya menjadi seperti ini:
let number_d = 3;
let result_d = if number_d == 2 {
true
} else {
false
};
println!("result_d adalah {result_d}");
Penulisannya cukup unik. Blok kode seleksi kondisi dituliskan sebagai value dari statement let result_d
. Dan isi blok kode nantinya akan menjadi value untuk variabel result_d
, tergantung kondisi mana yang match.
Pada contoh di atas, karena number_d
nilainya 3, maka result_d
bernilai false. Blok kode else
adalah yang dieksekusi.
Dalam penggunakan kombinasi keyword
let
danif
, pastikan di akhir blok kode seleksi kondisi dituliskan tanda;
.
O iya, beberapa orang lebih memilih memanfaatkan indentasi untuk mempermudah memahami statement let if
. Contohnya seperti ini:
let number_d = 3;
let result_d =
if number_d == 2 {
true
} else {
false
};
println!("result_d adalah {result_d}");
A.9.5. Kombinasi Keyword let
dan if
, Dengan Tipe Data Eksplisit
Ada situasi di mana dalam pemanfaatan let if
kita perlu men-specify secara eksplisit tipe data variabel penampung. Caranya sama seperti statement deklarasi variabel beserta tipe data, langsung tulis saja tipe data yang diinginkan setelah nama variabel dan sebelum operator =
.
Pada contoh berikut, variabel result_e
saya definisikan tipenya adalah string literal &str
.
let number_e = 3;
let result_e: &str = if number_e == 2 {
"angka adalah 2"
} else if number_e < 2 {
"angka adalah di bawah 2"
} else {
"angka adalah di atas 2"
};
println!("angka adalah {result_e}");
Contoh lain:
let max = 100.0;
let string_f = "nilai minimum kelulusan";
let result_f: f64 = if string_f == "nilai maksimum kelulusan" {
max
} else {
max * 3.0 / 4.0
};
println!("angka adalah {result_f}");
A.9.6. Keyword if let
Keyword if let
berbeda dengan kombinasi let
dan if
. Kita akan bahas topik ini secara terpisah pada chapter Pattern Matching.
Catatan chapter 📑
◉ Source code praktik
github.com/novalagung/dasarpemrogramanrust-example/../seleksi_kondisi_if