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.
Tantangan
MudahKamu 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
f64dan mengembalikanResult<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)
- Jika ya, kembalikan
- Panggil fungsi dengan dua angka yang sudah di-parse
- Gunakan ekspresi
matchuntuk menanganiResult - 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
}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 Aman2Pengantar 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