Menggunakan 'match' dengan 'Option'
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 36 dari 66.
Sekarang setelah kamu memahami apa itu Option, mari pelajari cara paling umum dan eksplisit untuk menanganinya: menggunakan ekspresi match. Pendekatan ini mengharuskan kamu mempertimbangkan kedua kemungkinan, yaitu saat ada nilai dan saat tidak ada nilai.
Ekspresi match bekerja dengan sempurna bersama Option karena kamu bisa membuat arm untuk kedua varian:
let maybe_name = Some("Alice".to_string());
match maybe_name {
Some(name) => println!("Hello, {}!", name),
None => println!("Hello, stranger!"),
}Perhatikan bagaimana arm Some(name) mengambil nilai dari dalam varian Some. Variabel name sekarang berisi String yang sebenarnya, bukan Option. Ini disebut destructuring: kamu mengambil nilai di dalamnya dari pembungkus.
Cabang None menangani kasus saat tidak ada nilai, sehingga kamu dapat memberikan perilaku alternatif, seperti menampilkan pesan default atau melakukan tindakan lain.
Tantangan
MudahKamu akan menerima nama siswa sebagai input. Nama tersebut mungkin ada di sistem atau mungkin tidak ada. Buat Option<String> yang berisi Some(name) jika nama tidak kosong, atau None jika nama kosong. Gunakan ekspresi match untuk menangani kedua kasus dan mencetak pesan yang sesuai.
Persyaratan:
- Baca input sebagai string (nama siswa)
- Hapus spasi kosong dari input menggunakan
.trim() - Buat variabel
Option<String>:- Jika nama yang sudah di-trim tidak kosong, tetapkan
Some(name.to_string()) - Jika nama yang sudah di-trim kosong, tetapkan
None
- Jika nama yang sudah di-trim tidak kosong, tetapkan
- Gunakan ekspresi
matchuntuk menangani kedua varianOption - Pada arm
Some(name), cetak:Welcome, [name]! - Pada arm
None, cetak:No name provided
Input:
- Satu baris yang berisi nama siswa atau baris kosong
Output:
- Jika nama diberikan:
Welcome, [name]! - Jika nama tidak diberikan (input kosong):
No name provided
Coba sendiri
use std::io;
fn main() {
// Baca input
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let name = input.trim();
// TODO: Buat Option<String> berdasarkan apakah nama kosong atau tidak
// TODO: Gunakan ekspresi match untuk menangani kasus Some dan None, lalu tampilkan pesan yang sesuai
}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