Menu
CoddyTech

Menggunakan 'match' dengan 'Result'

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

Sekarang setelah kamu memahami apa itu Result, mari pelajari cara paling eksplisit dan ampuh untuk menangani kasus keberhasilan dan kegagalan: menggunakan ekspresi match.

Sama seperti pada Option, match mengharuskan kamu menangani kedua varian dari Result. Buat satu arm untuk Ok untuk menangani keberhasilan, dan satu arm lagi untuk Err untuk menangani kegagalan:

let result = divide(10, 2);

match result {
    Ok(value) => println!("Division successful: {}", value),
    Err(error) => println!("Division failed: {}", error),
}

Saat Result bernilai Ok, match mengambil nilai yang berhasil dan menjalankan cabang pertama. Saat nilainya Err, match mengambil informasi error dan menjalankan cabang kedua. Pola ini memastikan kamu tidak pernah mengabaikan kemungkinan adanya error secara tidak sengaja.

challenge icon

Tantangan

Mudah

Kamu akan menerima dua input. Input pertama adalah angka (sebagai string), dan input kedua adalah angka lainnya (sebagai string). Buat fungsi yang mencoba membagi angka pertama dengan angka kedua dan mengembalikan Result<f64, &'static str>. Jika angka kedua adalah nol, kembalikan Err dengan pesan "Division by zero". Jika tidak, kembalikan Ok dengan hasil pembagian. Gunakan ekspresi match untuk menangani kasus Ok dan Err, lalu cetak pesan yang sesuai.

Persyaratan:

  • Baca input pertama (dividend) dan hapus whitespace di sekitarnya
  • Parse input pertama menjadi f64
  • Baca input kedua (divisor) dan hapus whitespace di sekitarnya
  • Parse input kedua menjadi f64
  • Buat fungsi yang menerima dua parameter f64 dan mengembalikan Result<f64, &'static str>
  • Di dalam fungsi, periksa apakah divisor adalah 0.0:
    • Jika ya, kembalikan Err("Division by zero")
    • Jika tidak, kembalikan Ok(dividend / divisor)
  • Panggil fungsi dengan dua angka yang sudah di-parse
  • Gunakan ekspresi match untuk menangani Result
  • Pada arm Ok(value), cetak: Result: [value]
  • Pada arm Err(error), cetak: Error: [error]

Input:

  • Baris pertama: Angka yang mewakili dividend (misalnya, 10.0)
  • Baris kedua: Angka yang mewakili divisor (misalnya, 2.0)

Output:

  • Jika pembagian berhasil: Result: [result]
  • Jika terjadi pembagian dengan nol: Error: Division by zero

Coba sendiri

use std::io;

// TODO: Buat fungsi divide-mu di sini yang mengembalikan Result<f64, &'static str>


fn main() {
    // Baca input pertama (dividend)
    let mut dividend_input = String::new();
    io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
    let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
    
    // Baca input kedua (divisor)
    let mut divisor_input = String::new();
    io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
    let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
    
    // TODO: Panggil fungsi divide-mu dan gunakan match untuk menangani Result
    // Cetak "Result: [value]" untuk kasus Ok
    // Cetak "Error: [error]" untuk kasus Err
}
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