Menu
Coddy logo textTech

Debug Trait'i

Coddy'nin Rust Journey'sinin Object Oriented Programming bölümünün bir parçası — ders 35 / 61.

Rust'ın standart kütüphanesi, yaygın işlevsellik sağlayan birçok önceden tanımlanmış trait ile birlikte gelir. Geliştirme için en yararlı olanlardan biri, bir struct'ın içeriğini inceleme amacıyla yazdırmanıza olanak tanıyan Debug trait'idir.

Özel bir yapıyı (struct) doğrudan yazdırmaya çalışırsanız, 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 uygulanmadı

{:?} formatlayıcısı 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 üzerine 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 otomatik olarak Debug uygulamasını oluşturmasını söyler. Bu, yapınızdaki (struct) tüm alanlar da Debug uyguladığı sürece çalışır (ki çoğu standart tür bunu yapar).

İç içe geçmiş yapılarda daha okunabilir bir çıktı için, güzel yazdırma (pretty-printing) 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 incelemenize olanak tanır.

challenge icon

Görev

Kolay

Debug trait'ini türeterek struct'larınızı incelenebilir hale getirelim! Hata ayıklama amacıyla öğelerin yazdırılabildiği basit bir envanter sistemi oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • inventory.rs: İki genel (public) alana sahip genel bir Item struct'ı tanımlayın: name (String) ve quantity (u32). Struct'ınız için Debug trait'ini otomatik olarak uygulamak için #[derive(Debug)] özniteliğini kullanın.
  • main.rs: Envanter modülünüzü dahil edin ve sağlanan girdileri kullanarak bir Item örneği oluşturun. İç yapısını görüntülemek için hata ayıklama formatlayıcısı {:?} kullanarak öğeyi yazdırın.

Debug türetmenin güzelliği, Rust'ın biçimlendirme kodunu sizin için otomatik olarak oluşturmasıdır—manuel uygulamaya gerek yoktur! Struct'ınızın sadece özniteliğe ihtiyacı vardır ve {:?} ile yazdırılabilir hale gelir.

Çıktınız, öğeyi Rust'ın hata ayıklama formatında görüntülemelidir:

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şturun
    
    // TODO: {:?} hata ayıklama (debug) biçimlendiricisini kullanarak öğeyi yazdırın
}
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Object Oriented Programming bölümündeki tüm dersler