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, ortak işlevsellik sağlayan birçok önceden tanımlanmış trait ile birlikte gelir. Geliştirme için en yararlı olanlardan biri, bir struct 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 bunu 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 kestirme 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 Debug uygulamasını otomatik olarak 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ılara sahip daha okunabilir bir çıktı için, güzel yazdırma (pretty-printing) amacıyla {:#?} kullanın:

println!("{:#?}", p);
// Player {
//     name: "Alice",
//     score: 100,
// }

Geliştirme sırasında Debug türetmek esastır—ö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! Öğelerin hata ayıklama amacıyla 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. Dahili 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 uygulama gerekmez! 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).

Kopya kağıdı

Debug özelliği (trait), bir yapının (struct) içeriğini {:?} biçimlendiricisini kullanarak inceleme amacıyla yazdırmanıza olanak tanır.

Yapınız için Debug özelliğini otomatik olarak uygulamak (implement) için #[derive(Debug)] özniteliğini kullanın:

#[derive(Debug)]
struct Player {
    name: String,
    score: u32,
}

let p = Player { name: String::from("Alice"), score: 100 };
println!("{:?}", p);  // Player { name: "Alice", score: 100 }

Daha iyi biçimlendirilmiş, okunaklı (pretty-printed) bir çıktı için {:#?} kullanın:

println!("{:#?}", p);
// Player {
//     name: "Alice",
//     score: 100,
// }

#[derive(Debug)] özniteliği, yapınızdaki tüm alanlar da Debug özelliğini uyguladığı sürece çalışır; çoğu standart tür bunu zaten yapar.

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 isim ve miktar ile bir Item örneği oluşturun
    
    // TODO: {:?} hata ayıklama 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