Metode expect
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 39 dari 66.
Meskipun .unwrap() menyelesaikan tugasnya, fungsi ini memiliki kekurangan besar: saat mengalami panic pada None, pesan error-nya bersifat umum dan tidak membantu. Di sinilah .expect() bisa membantu.
Method .expect() bekerja persis seperti .unwrap(), method ini mengambil nilai dari Some dan memicu panic pada None. Perbedaan utamanya adalah .expect() memungkinkan kamu memberikan pesan panic khusus:
let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);Jika Option berisi Some, .expect() mengembalikan nilai di dalamnya seperti .unwrap(). Namun, jika nilainya None, kamu akan melihat pesan kustom, bukan pesan panic umum, sehingga jauh lebih mudah memahami apa yang salah dan di mana letak masalahnya.
Tantangan
MudahKamu akan menerima dua input. Input pertama adalah nama produk, dan input kedua menunjukkan apakah produk tersedia (yes) atau tidak tersedia (no). Buat Option<String> yang berisi Some(product_name) jika produk tersedia, atau None jika produk tidak tersedia. Gunakan .expect() dengan pesan deskriptif untuk mengambil nama produk dan mencetaknya.
Persyaratan:
- Baca input pertama (nama produk) dan hapus spasi di awal dan akhir
- Baca input kedua (status stok) dan hapus spasi di awal dan akhir
- Buat variabel
Option<String>:- Jika status stok adalah
yes, tetapkanSome(product_name.to_string()) - Jika status stok adalah
no, tetapkanNone
- Jika status stok adalah
- Gunakan
.expect()dengan pesan"Product should be in stock"untuk mengambil nama produk - Cetak nama produk yang diambil dengan format:
Product available: [product_name]
Input:
- Baris pertama: Nama produk (misalnya,
Laptop) - Baris kedua:
yesatauno
Output:
- Jika status stok adalah
yes:Product available: [product_name] - Jika status stok adalah
no: Program akan mengalami panic dengan pesan khusus "Product should be in stock" (ini adalah perilaku yang diharapkan untuk tantangan ini)
Catatan: Jika status stok adalah no, pemanggilan .expect() pada None akan menyebabkan panic dengan pesan khususmu. Ini menunjukkan bahwa .expect() memberikan informasi error yang lebih membantu dibandingkan .unwrap().
Coba sendiri
use std::io;
fn main() {
// Baca nama produk
let mut product_name = String::new();
io::stdin().read_line(&mut product_name).expect("Failed to read line");
let product_name = product_name.trim();
// Baca status stok
let mut stock_status = String::new();
io::stdin().read_line(&mut stock_status).expect("Failed to read line");
let stock_status = stock_status.trim();
// TODO: Tulis kodemu di bawah ini
// Buat Option<String> berdasarkan stock_status
// Gunakan .expect() untuk mengambil nama produk
// Tampilkan hasil dalam format: Product available: [product_name]
}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 Buku2Pengantar 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 Akhir6Menangani Ketiadaan dengan 'Option'
Apa itu 'Option'?Menggunakan 'match' dengan 'Option'is_some() dan is_none()Membuka bungkus 'Option'Metode expectMemberikan Nilai Default: unwrap_orRangkuman: Menemukan ElemenLatihan sendiri: Compiler Rust online