Menu
CoddyTech

Membuka bungkus 'Option'

Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 38 dari 66.

Terkadang kamu perlu mengambil nilai sebenarnya dari Option saat kamu yakin isinya adalah Some. Rust menyediakan method .unwrap() untuk tujuan ini, method ini mengambil nilai dari Some dan memberikannya langsung kepadamu.

let maybe_number = Some(42);
let actual_number = maybe_number.unwrap();
println!("The number is: {}", actual_number);

Saat kamu memanggil .unwrap() pada Some(value), fungsi itu mengembalikan nilai di dalamnya. Pada contoh di atas, actual_number menjadi 42, tidak lagi dibungkus dalam Option.

Namun, ada peringatan penting: jika kamu memanggil .unwrap() pada None, programmu akan panik dan langsung berhenti. Karena itu, .unwrap() adalah method yang berpotensi berbahaya dan hanya boleh digunakan saat kamu benar-benar yakin bahwa Option berisi Some.

let empty_option: Option<i32> = None;
let value = empty_option.unwrap(); // Ini akan menyebabkan panic!

Gunakan .unwrap() secukupnya dan hanya dalam situasi ketika kamu bisa memastikan bahwa Option berisi nilai, misalnya dalam contoh sederhana atau setelah kamu memeriksanya dengan .is_some().

challenge icon

Tantangan

Mudah

Kamu akan menerima dua input. Input pertama adalah angka (sebagai string), dan input kedua menunjukkan apakah angka ini harus dianggap valid atau tidak valid. Jika input kedua adalah valid, buat Option<i32> yang berisi Some dengan angka yang sudah di-parse. Jika input kedua adalah invalid, buat Option<i32> yang berisi None. Gunakan .unwrap() untuk mengambil nilai dari Option dan mencetaknya.

Persyaratan:

  • Baca input pertama dan hapus whitespace di sekelilingnya
  • Baca input kedua dan hapus whitespace di sekelilingnya
  • Parse input pertama menjadi i32 menggunakan .parse::<i32>()
  • Buat variabel Option<i32>:
    • Jika input kedua adalah valid, tetapkan Some(parsed_number)
    • Jika input kedua adalah invalid, tetapkan None
  • Gunakan .unwrap() untuk mengambil nilai dari Option
  • Cetak nilai yang diambil dalam format: Value: [number]

Input:

  • Baris pertama: Angka sebagai string (misalnya, 42)
  • Baris kedua: valid atau invalid

Output:

  • Jika input kedua adalah valid: Value: [number]
  • Jika input kedua adalah invalid: Program akan mengalami panic (ini adalah perilaku yang diharapkan untuk tantangan ini)

Catatan: Jika input kedua adalah invalid, memanggil .unwrap() pada None akan menyebabkan panic. Ini menunjukkan sifat berbahaya .unwrap() saat kamu tidak yakin apakah Option berisi nilai.

Coba sendiri

use std::io;

fn main() {
    // Baca input pertama (angka sebagai string)
    let mut number_input = String::new();
    io::stdin().read_line(&mut number_input).expect("Failed to read line");
    let number_input = number_input.trim();
    
    // Baca input kedua (valid atau tidak valid)
    let mut validity_input = String::new();
    io::stdin().read_line(&mut validity_input).expect("Failed to read line");
    let validity_input = validity_input.trim();
    
    // Ubah string menjadi angka
    let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
    
    // TODO: Tulis kodemu di bawah ini
    // Buat Option<i32> berdasarkan validity_input
    // Jika validity_input bernilai "valid", tetapkan Some(parsed_number)
    // Jika validity_input bernilai "invalid", tetapkan None
    // Lalu gunakan .unwrap() untuk mengambil nilainya dan mencetaknya dalam format: Value: [number]
    
}
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