Menu
Coddy logo textTech

Traitleri Uygulama

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

Artık bir trait'in nasıl tanımlanacağını bildiğine göre, bir struct'ın bu sözleşmeyi nasıl yerine getireceğini görelim. Bir trait'i uygulamak, soyut gereksinimi somut davranışa bağlar.

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 öğesinin Speak trait'ini uyguladığını söyler. İçinde, gerçek method gövdesini sağlarsın. Bir köpeğin nasıl konuştuğunu tanımladığın yer burasıdır.

Trait'lerin gücü, birden fazla tür aynı trait'i uyguladığında ortaya çıkar:

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 uygulayarak trait'leri 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 üç dosyada düzenleyeceksin:

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

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

main dosyanda, sağlanan iki input'u kullanarak bir book ve bir movie oluştur, ardından açıklamalarını ayrı satırlara yazdır.

Çıktın şu formatı izlemeli:

Book: {title}
Film: {name}

Örneğin, input'lar 1984 ve Inception olduğunda:

Book: 1984
Film: Inception

İki input alacaksın: bir book title'ı ve bir movie name'i.

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.

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

Kendi başına pratik yap: Online Rust derleyicisi