Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Kamu 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, tetapkan Some(product_name.to_string())
    • Jika status stok adalah no, tetapkan None
  • 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: yes atau no

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]
    
}
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