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 15Tantangan
MudahKamu 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);
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Alur Kontrol Lanjutan
Ekspresi 'match'Mencocokkan Beberapa NilaiMencocokkan RentangEkspresi 'if let'Perulangan sebagai EkspresiRangkuman, Parser Perintah Sederhana4Mengelompokkan Data dengan Struct
Apa Itu Struct?Ringkasan StructMengakses Field StructStruct yang Dapat DiubahStruct sebagai Parameter FungsiStruct TupleRangkuman: Buat Struct Buku7Menangani error dengan 'Result'
Apa itu 'Result'?Menggunakan 'match' dengan 'Result'is_ok() dan is_err()Cara singkat: unwrap dan expectOperator Tanda Tanya '?'Mengurai string menjadi angkaRangkuman: Fungsi Pembagian Aman10Closure dan Fungsi Anonim
Apa Itu Closure?Mendefinisikan Closure SederhanaClosure dengan ParameterMenangkap LingkunganUlasan: Closure Penjumlah Sederhana2Pengantar Vektor
Apa Itu Vektor?Membuat VektorMenambahkan Elemen dengan pushMengakses Elemen VektorMelakukan Iterasi pada VektorIterasi MutableMenghapus ElemenRangkuman: Pelacak Skor Dasar5Pasangan Kunci-Nilai dengan Hash Map
Apa Itu Hash Map?Membuat Hash MapMenyisipkan Pasangan Kunci-NilaiMengakses NilaiMenelusuri Hash MapMemperbarui NilaiMenghapus PasanganRangkuman: Penghitung Kata8Proyek: Inventaris Barang Sederhana
Menyiapkan ProyekMenambahkan BarangMemeriksa StokMenjual BarangMenyatukan Semuanya3Daftar Tugas Baris Perintah
Penyiapan ProyekMenambahkan TugasMelihat Semua TugasMenghapus TugasKode AkhirLatihan sendiri: Compiler Rust online