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().
Tantangan
MudahKamu 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
i32menggunakan.parse::<i32>() - Buat variabel
Option<i32>:- Jika input kedua adalah
valid, tetapkanSome(parsed_number) - Jika input kedua adalah
invalid, tetapkanNone
- Jika input kedua adalah
- Gunakan
.unwrap()untuk mengambil nilai dariOption - Cetak nilai yang diambil dalam format:
Value: [number]
Input:
- Baris pertama: Angka sebagai string (misalnya,
42) - Baris kedua:
validatauinvalid
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]
}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