Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Kamu 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, tetapkan Ok(parsed_number)
    • Jika statusnya error, tetapkan Err("Invalid operation")
  • Gunakan .expect("Failed to get value") untuk mengambil nilai dari Result
  • Cetak nilai yang diambil dengan format: Value: [value]

Input:

  • Baris pertama: Angka (misalnya, 75)
  • Baris kedua: ok atau error

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