Memberikan Nilai Default: unwrap_or
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 40 dari 66.
Meskipun .unwrap() dan .expect() dapat mengambil nilai dari Option, keduanya memiliki kelemahan besar: keduanya menyebabkan panic saat menemui None. Untuk membuat kode lebih aman, Rust menyediakan .unwrap_or(), sebuah method yang tidak pernah menyebabkan panic.
method .unwrap_or() menerima nilai default sebagai argumen. Jika Option berisi Some, method ini mengembalikan nilai di dalamnya. Jika berisi None, method ini mengembalikan nilai default yang kamu berikan:
let maybe_score = Some(85);
let score = maybe_score.unwrap_or(0);
println!("Score: {}", score); // Menampilkan: Score: 85
let no_score: Option = None;
let default_score = no_score.unwrap_or(0);
println!("Score: {}", default_score); // Menampilkan: Score: 0Pendekatan ini jauh lebih aman daripada .unwrap() karena programmu tidak akan pernah crash, kamu selalu mendapatkan nilai yang bisa digunakan.
Tantangan
MudahKamu akan menerima dua input. Input pertama adalah skor (sebagai angka), dan input kedua menunjukkan apakah skor tersedia (yes) atau tidak tersedia (no). Buat variabel Option<i32> berdasarkan status ketersediaan. Gunakan .unwrap_or() untuk mengambil skor dengan aman menggunakan nilai default 50, lalu cetak skor akhir.
Persyaratan:
- Baca input pertama (skor) dan hapus spasi di awal dan akhir
- Parse input pertama menjadi
i32 - Baca input kedua (status ketersediaan) dan hapus spasi di awal dan akhir
- Buat variabel
Option<i32>:- Jika status ketersediaan adalah
yes, tetapkanSome(score) - Jika status ketersediaan adalah
no, tetapkanNone
- Jika status ketersediaan adalah
- Gunakan
.unwrap_or(50)untuk mengambil skor dengan nilai default50 - Cetak skor akhir dengan format:
Final score: [score]
Input:
- Baris pertama: Angka yang mewakili skor (misalnya,
85) - Baris kedua:
yesatauno
Output:
- Jika status ketersediaan adalah
yes:Final score: [score](skor sebenarnya) - Jika status ketersediaan adalah
no:Final score: 50(nilai default)
Coba sendiri
use std::io;
fn main() {
// Baca skor
let mut score_input = String::new();
io::stdin().read_line(&mut score_input).expect("Failed to read line");
let score: i32 = score_input.trim().parse().expect("Invalid number");
// Baca status ketersediaan
let mut availability = String::new();
io::stdin().read_line(&mut availability).expect("Failed to read line");
let availability = availability.trim();
// TODO: Tulis kodemu di bawah ini
// Buat Option<i32> berdasarkan status ketersediaan
// Gunakan .unwrap_or(50) untuk mendapatkan skor akhir
// Tampilkan hasilnya
println!("Final score: {}", final_score);
}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