Menu
CoddyTech

Menangkap Lingkungan

Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 62 dari 66.

Salah satu fitur closure yang paling kuat adalah kemampuannya menangkap dan menggunakan variabel dari lingkungan sekitarnya. Tidak seperti fungsi biasa, closure dapat "melihat" dan mengakses variabel yang ada dalam cakupan yang sama dengan tempat closure didefinisikan.

Begini cara kerja penangkapan lingkungan:

fn main() {
    let x = 10;
    
    let my_closure = || {
        println!("The value of x is: {}", x);
    };
    
    my_closure(); // Ini akan mencetak "The value of x is: 10"
}

Dalam contoh ini, closure menangkap variabel x dari scope di sekitarnya dan menggunakannya di dalam isi closure. Closure tidak memerlukan x untuk diberikan sebagai parameter, karena closure otomatis dapat mengaksesnya.

Kamu juga dapat menangkap variabel dan menggunakannya dalam perhitungan:

let multiplier = 3;
let multiply_by_three = |num| num * multiplier;
let result = multiply_by_three(5); // result bernilai 15
challenge icon

Tantangan

Mudah

Kamu akan menerima dua input. Input pertama adalah angka yang mewakili harga dasar. Input kedua adalah angka yang mewakili persentase diskon. Buat closure yang menangkap persentase diskon dari lingkungan dan menghitung harga akhir setelah diskon diterapkan. Panggil closure dengan harga dasar dan cetak harga akhirnya.

Persyaratan:

  • Baca input pertama (harga dasar) dan hapus spasi di awal dan akhir
  • Parse ke f64
  • Baca input kedua (persentase diskon) dan hapus spasi di awal dan akhir
  • Parse ke f64
  • Buat closure yang menerima satu parameter (harga dasar) dan menangkap persentase diskon dari lingkungan sekitarnya
  • Closure harus menghitung harga akhir menggunakan rumus: base_price - (base_price * discount / 100.0)
  • Panggil closure dengan harga dasar
  • Cetak harga akhir

Input:

  • Baris pertama: Harga dasar (misalnya, 100.0)
  • Baris kedua: Persentase diskon (misalnya, 20.0)

Output:

  • Harga akhir setelah diskon diterapkan

Coba sendiri

use std::io;

fn main() {
    // Baca harga dasar
    let mut base_price_input = String::new();
    io::stdin().read_line(&mut base_price_input).expect("Failed to read line");
    let base_price: f64 = base_price_input.trim().parse().expect("Invalid number");
    
    // Baca persentase diskon
    let mut discount_input = String::new();
    io::stdin().read_line(&mut discount_input).expect("Failed to read line");
    let discount: f64 = discount_input.trim().parse().expect("Invalid number");
    
    // TODO: Buat closure yang menangkap diskon dan menghitung harga akhir
    // TODO: Panggil closure dengan harga dasar
    
    // Cetak harga akhir
    // println!("{}", final_price);
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Rust online