Menu
Coddy logo textTech

Traitleri Uygulama

Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 30 / 61.

Artık bir trait’i nasıl tanımlayacağınızı bildiğinize göre, bir struct’ın bu sözleşmeyi nasıl yerine getireceğini görelim. Bir trait’i uygulamak, soyut gereksinimi somut davranışla ilişkilendirir.

Sözdizimi impl TraitName for StructName kullanır:

trait Speak {
    fn speak(&self) -> String;
}

struct Dog {
    name: String,
}

impl Speak for Dog {
    fn speak(&self) -> String {
        format!("{} says: Woof!", self.name)
    }
}

impl Speak for Dog bloğu, Rust'a Dog yapısının Speak trait'ini uyguladığını bildirir. İçeride, gerçek metot gövdesini sağlarsın. Bir köpeğin nasıl konuştuğunu burada tanımlarsın.

Birden fazla tür aynı özelliği uyguladığında, özelliklerin gücü netleşir:

struct Cat {
    name: String,
}

impl Speak for Cat {
    fn speak(&self) -> String {
        format!("{} says: Meow!", self.name)
    }
}

Hem Dog hem de Cat artık Speak yeteneğini paylaşır, ancak her biri kendine özgü bir uygulama sunar. Her iki tür üzerinde de .speak() çağırabilirsin:

let dog = Dog { name: String::from("Rex") };
let cat = Cat { name: String::from("Whiskers") };

println!("{}", dog.speak());  // Rex diyor: Hav!
println!("{}", cat.speak());  // Whiskers diyor: Miyav!

Rust'ta çok biçimliliğin temeli budur: farklı türler, aynı arayüz, benzersiz davranışlar.

challenge icon

Görev

Kolay

Farklı türler için trait'leri uygulayarak onları hayata geçirelim! Bir Describable trait'i oluşturacak ve bunu iki farklı struct için uygulayacaksın; her struct kendi benzersiz açıklamasını sağlayacak.

Kodunu üç dosyaya ayıracaksın:

  • describable.rs: Describable metoduna sahip, herkese açık bir describe(&self) -> String trait'i tanımla.
  • items.rs: Trait'ini uygulayan iki herkese açık struct oluştur:
    • Herkese açık bir Book alanına (String) sahip title
    • Herkese açık bir Movie alanına (String) sahip name
    Her struct, kendi benzersiz açıklama biçimiyle Describable trait'ini uygulamalıdır.
  • main.rs: Modüllerini bir araya getir, her iki struct'ın örneklerini oluştur ve aynı trait'in farklı türler için nasıl farklı çıktılar ürettiğini göstermek üzere describe metotlarını çağır.

Book kendisini Book: {title} olarak, Movie ise kendisini Film: {name} olarak açıklamalıdır. Her türün aynı sözleşmeyi kendi davranışıyla yerine getirdiğine dikkat et!

Ana dosyanda, sağlanan iki girdiyi kullanarak bir kitap ve bir film oluştur, ardından açıklamalarını ayrı satırlarda yazdır.

Çıktın şu biçimi izlemelidir:

Book: {title}
Film: {name}

Örneğin, girdiler 1984 ve Inception olduğunda:

Book: 1984
Film: Inception

İki girdi alacaksın: bir kitap başlığı ve bir film adı.

GEREKLİ ÇIKTI BİÇİMİ: [Çevrilmiş içeriğin]

Kendin dene

mod describable;
mod items;

use describable::Describable;
use items::{Book, Movie};

fn main() {
    // Girdileri oku
    let mut title = String::new();
    std::io::stdin().read_line(&mut title).expect("Failed to read line");
    let title = title.trim().to_string();
    
    let mut name = String::new();
    std::io::stdin().read_line(&mut name).expect("Failed to read line");
    let name = name.trim().to_string();
    
    // TODO: title ile bir Book örneği oluştur
    
    // TODO: name ile bir Movie örneği oluştur
    
    // TODO: Kitabın açıklamasını yazdır
    
    // TODO: Filmin açıklamasını yazdır
}
quiz iconKendini test et

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

Kendi başına pratik yap: Online Rust derleyicisi