Closure dengan Parameter
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 61 dari 66.
Meskipun closure yang tidak menerima parameter berguna, biasanya kamu ingin meneruskan data ke dalam closure agar lebih fleksibel dan bermanfaat. Menambahkan parameter ke closure mengikuti pola yang sama seperti yang kamu pelajari sebelumnya, tetapi dengan nilai di dalam garis vertikal.
Berikut cara mendefinisikan closure yang menerima satu parameter:
let add_one = |x: i32| x + 1;Perhatikan bahwa parameter x berada di antara garis vertikal, seperti parameter fungsi. Kamu kemudian dapat memanggil closure ini dengan meneruskan sebuah nilai:
let add_one = |x: i32| x + 1;
let result = add_one(5); // result bernilai 6Untuk closure dengan beberapa parameter, pisahkan dengan koma:
let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result bernilai 12Tantangan
MudahKamu akan menerima dua input. Input pertama berupa angka, dan input kedua juga berupa angka. Buat closure yang menerima dua parameter dan menghitung perpangkatan (parameter pertama dipangkatkan dengan parameter kedua). Simpan closure dalam variabel, panggil dengan nilai input, lalu cetak hasilnya.
Persyaratan:
- Baca input pertama (angka basis) dan hapus spasi di awal dan akhir
- Parse menjadi
i32 - Baca input kedua (eksponen) dan hapus spasi di awal dan akhir
- Parse menjadi
u32 - Buat closure dengan dua parameter yang menghitung perpangkatan menggunakan method
.pow() - Simpan closure dalam variabel
- Panggil closure dengan kedua nilai input
- Cetak hasilnya
input:
- Baris pertama: Angka basis (misalnya,
2) - Baris kedua: Eksponen (misalnya,
3)
output:
- Hasil perhitungan perpangkatan
Coba sendiri
use std::io;
fn main() {
// Baca input pertama (bilangan pokok)
let mut base_input = String::new();
io::stdin().read_line(&mut base_input).expect("Failed to read line");
let base: i32 = base_input.trim().parse().expect("Invalid number");
// Baca input kedua (eksponen)
let mut exp_input = String::new();
io::stdin().read_line(&mut exp_input).expect("Failed to read line");
let exponent: u32 = exp_input.trim().parse().expect("Invalid number");
// TODO: Buat closure yang menghitung hasil perpangkatan dan simpan dalam variabel
// TODO: Panggil closure dengan base dan exponent
// Cetak hasilnya
println!("{}", result);
}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