Closure di Rust
Penjelasan
Closure adalah fungsi anonim yang bisa "menangkap" variabel dari scope di sekitarnya, ditulis dengan sintaks |parameter| ekspresi. Closure dipakai LUAS di Rust idiomatis, terutama bareng method iterator seperti .map() dan .filter() pada Vec — kamu sudah memakainya secara implisit di materi Array & Vector sebelumnya, tanpa dijelaskan sintaksnya secara eksplisit.
Contoh Konsep
fn main() {
let kalikan_dua = |angka: i32| angka * 2; // closure sederhana
println!("{}", kalikan_dua(5)); // 10
let pajak = 0.1;
let hitung_total = |harga: f64| harga + (harga * pajak); // menangkap variabel pajak
println!("{}", hitung_total(100.0)); // 110
let angka = vec![1, 2, 3];
let kuadrat: Vec<i32> = angka.iter().map(|n| n * n).collect();
println!("{:?}", kuadrat); // [1, 4, 9]
}
Praktikum
Buat closure hitung_pajak yang menerima f64 dan mengembalikan harga + (harga * 0.1). Panggil dengan angka 100.0, lalu tampilkan hasilnya.
Ketik/edit bebas di sini untuk latihan — kode ini tidak dijalankan.
Tips
Closure di Rust otomatis menyimpulkan cara menangkap variabel luar (lewat reference, mutable reference, atau ownership) sesuai kebutuhan di dalam body-nya — kamu jarang perlu menuliskannya eksplisit, beda dari closure di C++ yang butuh capture list manual ([&] atau [=]).