Rust - Control Flow (Iteration/Repetition & keywords)
abdulghofurme
Posted on July 1, 2021
Pada dasarnya, iteration/repetition digunakan untuk mengulangi sebuah block kode, sesuai dengan kondisi yang diberikan.
Semua materi merupakan rangkuman belajar.
Untuk bacaan yang lebih langkap & update, dipersilahkan akses pada
The Book
Adapun iteration/repetition meliputi
loop
while
for in
Sekalian akan kita bahas beberapa keyword yang terdapat pada control flow
break
continue
- juga support control flow label dengan
'label:
loop
Sederhananya,
loop
adalah infinite loop/iteration/repetition,
atau apapun namanya,
yang merupakan pengulangan tanpa henti.
fn main() {
loop {
println!("tidur");
}
}
Kode di atas, akan menampilkan kata tidur "tanpa" henti, nah kita dapat menghentikannya dengan paksa, tentu dengan ctrl + c
.
Tapi apa di dalam program kita juga bisa menghentikannya?
Jawabannya bisa, dengan break
.
fn main() {
let mut piring_makan = 0;
let harga = 15_000;
let totalan = loop {
piring_makan += 1;
if piring_makan == 5 {
break piring_makan * harga;
}
};
println!("makan {} piring, masing-masing harganya {}, jumlahnya {}", piring_makan, harga, totalan);
}
- loop tidak bisa ditempel kondisi, karenanya disebut infinite loop
- block kode yang diulangi berada dalam body, dibungkus
{ }
- kita hanya dapat menghentikannya dari program dengan
break
.
Tentu dengan kondisi kapan kita ingin menghentikannya.
-
break
bersifat sebagai expression, karenanya kita dapat mengembalikan nilai dariloop
.
Gunakan seperti halnya memakai return
dalam function, perlu ;
BTW, hasil code di atas adalah
makan 5 piring, masing-masing harganya 15000, jumlahnya 75000
while
Alih alih menuliskan kondisi di dalam loop
.
Lebih praktis menggunakan while
.
Selain kode lebih pendek, juga lebih mudah dibaca.
fn main() {
let mut istirahat_in_minutes = 60;
while istirahat_in_minutes != 0 {
println!("lanjuuut.... masih ada {} menit", istirahat_in_minutes);
if istirahat_in_minutes == 50 {
println!("udahan ah, banyak kerjaan");
break;
}
istirahat_in_minutes -= 1;
}
println!("udahan bosque, kerja kerja");
}
- kondisi tidak perlu
( )
- block kode yang diulangi berada dalam body, dibungkus
{ }
- meski sudah dengan kondisi, kita tetap bisa menggunakan kondisi di dalamnya.
Yah, barangkali kita ingin melakukan sesuatu yang lain.
- Kita masih bisa menggunakan
break
untuk menghentikannya - Namun kita tidak dapat menggunakan
while
untuk mengembalikan nilai, (sepengetahuanku ya)
Hasil code di atas adalah
lanjuuut.... masih ada 60 menit
lanjuuut.... masih ada 59 menit
lanjuuut.... masih ada 58 menit
lanjuuut.... masih ada 57 menit
lanjuuut.... masih ada 56 menit
lanjuuut.... masih ada 55 menit
lanjuuut.... masih ada 54 menit
lanjuuut.... masih ada 53 menit
lanjuuut.... masih ada 52 menit
lanjuuut.... masih ada 51 menit
lanjuuut.... masih ada 50 menit
udahan ah, banyak kerjaan
udahan bosque, kerja kerja
for in
for in
adalah yang paling ideal kita gunakan untuk melakukan pengulangan pada list/collection.
Tentu kita dapat melakukannya dengan while
juga.
let my_special_ages = [0, 5, 6, 11, 14, 17, 18];
for age in my_special_ages.iter() {
match age {
0 => println!("lahir lah"),
5 | 6 | 14 => println!("masuk sekolah"),
11 | 17 => println!("lulus sekolah"),
18 => break,
_ => println!("pokoknya spesial"),
}
}
- kondisi tidak perlu
( )
- block kode yang diulangi berada dalam body, dibungkus
{ }
- kita tetap bisa menggunakan kondisi &
break
di dalamnya
kode di atas menghasilkan
lahir lah
masuk sekolah
masuk sekolah
lulus sekolah
masuk sekolah
lulus sekolah
Kita dapat menggunakan semua yang di atas secara nested
Sejauh ini kita telah menggunakan
break
Yang berfungsi untuk menghentikan pengulangan
Selanjutnya kita bahas sisanya dengan contoh nested
fn main() {
// nested
let days = [
"minggu", "senin", "selasa", "rabu", "kamis", "jumat", "sabtu",
];
println!("budak korporate");
'daysloop: for day in days.iter() {
println!("hari {}", day);
let day = *day;
if day == "sabtu".to_string() || day == "minggu".to_string() {
println!("libur");
continue 'daysloop;
}
let hours = 0..=24;
let workhours = 9..=17;
'hoursloop: for hour in hours {
if hour == 17 {
println!("pulang pulang");
break 'hoursloop;
}
if !workhours.contains(&hour) {
continue 'hoursloop;
}
println!("kerja.., jam {}", hour);
}
}
}
Bila
break
digunakan untuk menghentikan pengulangan,
continue
digunakan untuk loncat pada pengulanga item selanjutnya
Sementara label digunakan padabreak
ataupuncontinue
untuk menjalankannya pada spesifik iteration yang kita maksud,
biasa digunakan pada nested iteration
Semoga mudah dimengerti,
Terima kasih.
BTW, kode di atas akan menghasilkan
budak korporate
hari minggu
libur
hari senin
kerja.., jam 9
kerja.., jam 10
kerja.., jam 11
kerja.., jam 12
kerja.., jam 13
kerja.., jam 14
kerja.., jam 15
kerja.., jam 16
pulang pulang
hari selasa
kerja.., jam 9
kerja.., jam 10
kerja.., jam 11
kerja.., jam 12
kerja.., jam 13
kerja.., jam 14
kerja.., jam 15
kerja.., jam 16
pulang pulang
hari rabu
kerja.., jam 9
kerja.., jam 10
kerja.., jam 11
kerja.., jam 12
kerja.., jam 13
kerja.., jam 14
kerja.., jam 15
kerja.., jam 16
pulang pulang
hari kamis
kerja.., jam 9
kerja.., jam 10
kerja.., jam 11
kerja.., jam 12
kerja.., jam 13
kerja.., jam 14
kerja.., jam 15
kerja.., jam 16
pulang pulang
hari jumat
kerja.., jam 9
kerja.., jam 10
kerja.., jam 11
kerja.., jam 12
kerja.., jam 13
kerja.., jam 14
kerja.., jam 15
kerja.., jam 16
pulang pulang
hari sabtu
libur
Posted on July 1, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.