Debug Trait'i
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 35 / 61.
Rust'un standart kütüphanesi, yaygın işlevsellik sağlayan önceden tanımlanmış birçok trait ile birlikte gelir. Geliştirme için en kullanışlı olanlardan biri, bir struct'ın içeriğini incelemek amacıyla yazdırmanıza olanak tanıyan Debug trait'idir.
Özel bir struct'ı doğrudan yazdırmayı denerseniz Rust onu nasıl görüntüleyeceğini bilemez:
struct Player {
name: String,
score: u32,
}
let p = Player { name: String::from("Alice"), score: 100 };
println!("{:?}", p); // Hata! Debug uygulanmamış
{:?} biçimlendiricisi Debug trait'ini gerektirir. Bunu manuel olarak uygulamak yerine Rust bir kısayol sunar: #[derive] özniteliği. Bunu doğrudan struct tanımınızın üstüne yerleştirin:
#[derive(Debug)]
struct Player {
name: String,
score: u32,
}
let p = Player { name: String::from("Alice"), score: 100 };
println!("{:?}", p); // Player { name: "Alice", score: 100 }
#[derive(Debug)] özniteliği, derleyiciye Debug uygulamasını otomatik olarak oluşturmasını söyler. Yapınızdaki tüm alanlar da Debug uyguladığı sürece bu çalışır (standart türlerin çoğu bunu yapar).
İç içe geçmiş yapılarla daha okunabilir bir çıktı elde etmek için güzel yazdırma amacıyla {:#?} kullanın:
println!("{:#?}", p);
// Player {
// name: "Alice",
// score: 100,
// }
Debug türetmek geliştirme sırasında çok önemlidir. Özel biçimlendirme kodu yazmadan verilerinizi hızlıca incelemenizi sağlar.
Görev
KolayStruct'larınızı Debug trait'ini türeterek incelenebilir hâle getirelim! Hata ayıklama amacıyla öğelerin yazdırılabildiği basit bir envanter sistemi oluşturacaksınız.
Kodunuzu iki dosya arasında düzenleyeceksiniz:
inventory.rs: İki public alanı olan bir publicItemstruct'ı tanımlayın:name(String) vequantity(u32). Struct'ınız için Debug trait'ini otomatik olarak uygulamak üzere#[derive(Debug)]niteliğini kullanın.main.rs: inventory modülünü içe aktarın ve sağlanan girdileri kullanarak birItemörneği oluşturun. Öğenin iç yapısını görüntülemek için debug biçimlendiricisi{:?}ile öğeyi yazdırın.
Debug türetmenin güzelliği, Rust'ın biçimlendirme kodunu sizin için otomatik olarak oluşturmasıdır: elle uygulama yapmanız gerekmez! Struct'ınızın yalnızca niteliğe sahip olması yeterlidir; böylece {:?} ile yazdırılabilir hâle gelir.
Çıktınız, öğeyi Rust'ın hata ayıklama biçiminde göstermelidir:
Item { name: "{name}", quantity: {quantity} }Örneğin, Keyboard ve 15 girdileriyle:
Item { name: "Keyboard", quantity: 15 }İki girdi alacaksınız: öğe adı ve miktar ( u32 olarak ayrıştırın).
Kendin dene
mod inventory;
use inventory::Item;
fn main() {
// Girdiyi oku
let mut name = String::new();
std::io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
let mut quantity_str = String::new();
std::io::stdin().read_line(&mut quantity_str).expect("Failed to read line");
let quantity: u32 = quantity_str.trim().parse().expect("Failed to parse quantity");
// TODO: Verilen name ve quantity ile bir Item örneği oluştur
// TODO: Öğeyi debug formatlayıcısı {:?} kullanarak yazdır
}
Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme7Standart Trait'ler
Debug Trait'iDisplay Trait'iClone ve CopyEşitlik Trait'leriÖzet - Yazdırılabilir Nokta2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media PlayerKendi başına pratik yap: Online Rust derleyicisi