Cara singkat: unwrap dan expect
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 45 dari 66.
Kamu sudah mempelajari .unwrap() dan .expect() dengan Option, dan method yang sama juga berfungsi dengan Result. Namun, perilakunya sedikit berbeda saat menangani kasus berhasil dan gagal.
Method .unwrap() mengambil nilai dari varian Ok, tetapi jika Result adalah Err, programmu akan panic dan crash. Demikian pula, .expect() melakukan hal yang sama, tetapi memungkinkan kamu memberikan pesan panic khusus yang memudahkan proses debug:
let success: Result = Ok(42);
let value = success.expect("This should work!");
println!("Value: {}", value); // Mencetak: Value: 42
// Ini akan menyebabkan panic dengan pesan khusus:
// let failure: Result = Err("Something went wrong");
// let value = failure.expect("This should work!"); // Menyebabkan panic!Meskipun method ini memberikan akses cepat ke nilai yang berhasil, kamu harus menggunakannya dengan hati-hati. Method ini paling tepat digunakan saat kamu benar-benar yakin operasi tersebut akan berhasil, atau selama pengembangan dan pengujian.
Tantangan
MudahKamu akan menerima dua input. Input pertama adalah angka (sebagai string), dan input kedua adalah indikator status (ok atau error). Buat Result<i32, &'static str> berdasarkan status. Jika statusnya ok, buat Ok yang berisi angka yang telah di-parse. Jika statusnya error, buat Err dengan pesan "Invalid operation". Gunakan .expect() dengan pesan khusus untuk mengambil nilai dari Result dan mencetaknya.
Persyaratan:
- Baca input pertama (angka) dan hapus spasi kosong di awal dan akhir
- Parse input pertama menjadi
i32 - Baca input kedua (status) dan hapus spasi kosong di awal dan akhir
- Buat variabel
Result<i32, &'static str>:- Jika statusnya
ok, tetapkanOk(parsed_number) - Jika statusnya
error, tetapkanErr("Invalid operation")
- Jika statusnya
- Gunakan
.expect("Failed to get value")untuk mengambil nilai dariResult - Cetak nilai yang diambil dengan format:
Value: [value]
Input:
- Baris pertama: Angka (misalnya,
75) - Baris kedua:
okatauerror
Output:
- Jika statusnya
ok:Value: [number] - Jika statusnya
error: Program akan mengalami panic dengan pesan khusus (tidak diuji dalam tantangan ini)
Catatan: Untuk tantangan ini, kasus uji hanya akan menggunakan status ok untuk memastikan eksekusi berhasil. Kasus error akan menyebabkan panic, yang merupakan perilaku yang diharapkan dari .expect() saat menemukan Err.
Coba sendiri
use std::io;
fn main() {
// Baca input pertama (angka)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Ubah angka menjadi i32
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// Baca input kedua (status)
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Tulis kodemu di bawah ini
// Buat Result<i32, &'static str> berdasarkan status
// Gunakan .expect() untuk mengambil nilainya
// Cetak hasilnya dalam format: Value: [value]
}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