Menu
CoddyTech

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 6

Untuk closure dengan beberapa parameter, pisahkan dengan koma:

let multiply = |x: i32, y: i32| x * y;
let result = multiply(3, 4); // result bernilai 12
challenge icon

Tantangan

Mudah

Kamu 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);
}
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