Variantlar
- Rust kursu
- Başlangıç
- Ders 78/115
- 4 dk
Enum variantlarını oluşturmayı ve kullanmayı öğrenirsin.
Variant'larla çalışmak
Enum değerleri fonksiyonlara verilir, döndürülür ve match ile ayrıştırılır. match, her variant'ın ele alındığını derleme anında denetler:
fn ters(y: Yon) -> Yon {
match y {
Yon::Kuzey => Yon::Guney,
Yon::Guney => Yon::Kuzey,
Yon::Dogu => Yon::Bati,
Yon::Bati => Yon::Dogu,
}
}Enum'a yeni bir variant eklersen, onu ele almayan her match derleme hatası verir; böylece unutulan durum kalmaz.
use ile kısaltma ve metotlar
Enum'lara da impl ile metot eklenir. Uzun yazımı azaltmak için variant'lar kapsama alınabilir:
impl Yon {
fn yatay_mi(&self) -> bool {
use Yon::*;
matches!(self, Dogu | Bati)
}
}
println!("{}", Yon::Dogu.yatay_mi()); // truematches! makrosu, bir değerin kalıba uyup uymadığını bool olarak döndürür.
Uygulama Ters yön
Yon enum'ı için fn ters(y: Yon) -> Yon fonksiyonunu match ile yaz. ters(Yon::Kuzey) ve ters(Yon::Dogu) sonuçlarını {:?} ile boşlukla ayırarak yazdır.
Başlangıç kodu
#[derive(Debug)]
enum Yon {
Kuzey,
Guney,
Dogu,
Bati,
}
fn main() {
// buraya yaz
}Örnek çözüm
#[derive(Debug)]
enum Yon {
Kuzey,
Guney,
Dogu,
Bati,
}
fn ters(y: Yon) -> Yon {
match y {
Yon::Kuzey => Yon::Guney,
Yon::Guney => Yon::Kuzey,
Yon::Dogu => Yon::Bati,
Yon::Bati => Yon::Dogu,
}
}
fn main() {
println!("{:?} {:?}", ters(Yon::Kuzey), ters(Yon::Dogu));
}Beklenen çıktı
Guney Bati
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 <code>Yon::Kuzey == Yon::Kuzey</code> yazmak için ne gerekir?
- #[derive(PartialEq)] Doğru cevap
- #[derive(Debug)]
- Hiçbir şey
- impl Yon
Açıklama: == operatörü PartialEq trait'ini ister; derive ile otomatik üretilir.
2 Kalıp denetimi
let y = Yon::Bati;
let yatay = ____(y, Yon::Dogu | Yon::Bati);
let y = Yon::Bati;
let yatay = matches!(y, Yon::Dogu | Yon::Bati);
Açıklama: matches! makrosu kalıba uyuyorsa true döndürür.
3 Yazım ve görevi
| Kavram | Anlamı |
|---|---|
match y { .. } |
Variant'a göre dallanma |
matches!(y, ..) |
bool kalıp testi |
use Yon::* |
Variant'ları kapsama alır |
#[derive(PartialEq)] |
== desteği |