DEV Community

loading...

Rust - Control Flow (Iteration/Repetition & keywords)

abdulghofurme
Just a self-taught programmer who loves to learn random things.
・3 min read

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");
    }
}
Enter fullscreen mode Exit fullscreen mode

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);
}
Enter fullscreen mode Exit fullscreen mode
  • 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 dari loop.

Gunakan seperti halnya memakai return dalam function, perlu ;

BTW, hasil code di atas adalah

makan 5 piring, masing-masing harganya 15000, jumlahnya 75000
Enter fullscreen mode Exit fullscreen mode

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");
}
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode

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"),
        }
    }
Enter fullscreen mode Exit fullscreen mode
  • 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
Enter fullscreen mode Exit fullscreen mode

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);
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Bila break digunakan untuk menghentikan pengulangan,
continue digunakan untuk loncat pada pengulanga item selanjutnya
Sementara label digunakan pada break ataupun continue 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
Enter fullscreen mode Exit fullscreen mode

Discussion (0)