assert! makrosu
- Rust kursu
- Orta seviye
- Ders 84/115
- 4 dk
assert!, assert_eq! ve assert_ne! ile doğrulama yaparsın.
assert! makroları
Üç temel denetim makrosu vardır; hepsi başarısızlıkta panic verir ve isteğe bağlı bir mesaj alır:
assert!(tek_mi(3)); // koşul true olmalı
assert_eq!(tek_mi(4), false); // iki değer eşit olmalı
assert_ne!(kare(3), 6, "kare yanlış: {}", kare(3)); // eşit olmamalıassert_eq! ve assert_ne!, başarısızlıkta iki değeri de yazdırır; bu yüzden değerlerin Debug ve PartialEq uygulaması gerekir.
debug_assert!
debug_assert! ailesi yalnızca debug derlemelerinde çalışır; release derlemesinde tamamen kaldırılır. Pahalı iç tutarlılık denetimleri için kullanılır:
fn ortalama(v: &[f64]) -> f64 {
debug_assert!(!v.is_empty(), "boş dilim");
v.iter().sum::<f64>() / v.len() as f64
}Güvenlik ya da doğruluk için zorunlu denetimler assert! ile kalmalıdır; debug_assert! yalnızca "olmaması gereken" durumları erken yakalamak içindir.
Uygulama Denetimler
fn tek_mi(n: i32) -> bool ve fn kare(n: i32) -> i32 yaz. main'de assert!(tek_mi(3)), assert_eq!(tek_mi(4), false) ve mesajlı assert_ne!(kare(3), 6, ..) denetimlerini çalıştırıp denetimler tamam yazdır.
Başlangıç kodu
fn main() {
// buraya yaz
}Örnek çözüm
fn tek_mi(n: i32) -> bool {
n % 2 != 0
}
fn kare(n: i32) -> i32 {
n * n
}
fn main() {
assert!(tek_mi(3));
assert_eq!(tek_mi(4), false);
assert_ne!(kare(3), 6, "kare yanlış: {}", kare(3));
println!("denetimler tamam");
}Beklenen çıktı
denetimler tamam
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Ondalıklı sonuçları test ederken <code>assert_eq!(0.1 + 0.2, 0.3)</code> neden başarısız olur?
- Kayan nokta hatası: 0.1 + 0.2 = 0.30000000000000004 Doğru cevap
- assert_eq! f64 kabul etmez
- Başarılı olur
- Derlenmez
Açıklama: Ondalıklılar bir tolerans ile karşılaştırılır: assert!((a - b).abs() < 1e-9).
2 Eşit olmamalı
____(kare(3), 6, "kare yanlış");
assert_ne!(kare(3), 6, "kare yanlış");
Açıklama: assert_ne! iki değer eşitse panic verir.
3 Makro ve başarısızlık koşulu
| Kavram | Anlamı |
|---|---|
assert!(k) |
k false |
assert_eq!(a, b) |
a != b |
assert_ne!(a, b) |
a == b |
debug_assert!(k) |
Yalnızca debug'da |