Menu
Coddy logo textTech

Trait Nedir?

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

Generic'ler herhangi bir tiple çalışan kodlar yazmanıza olanak tanır, ancak bazen bir tipin belirli bir şeyi yapabileceğini garanti etmeniz gerekir. İşte burada trait'ler devreye girer.

Bir trait, bir türün uygulaması gereken bir dizi metodu tanımlar. Bunu bir sözleşme olarak düşünün; bu sözleşmeyi "imzalayan" her tür, belirtilen davranışı sağlamayı vaat eder. Başka dillerde arayüzler (interfaces) kullandıysanız, trait'ler benzer bir amaca hizmet eder.

Bir trait'i şu şekilde tanımlarsınız:

trait Describable {
    fn describe(&self) -> String;
}

trait anahtar kelimesi, trait'i tanıtır ve ardından ismi gelir. Süslü parantezlerin içinde, metot imzalarını bildirirsiniz; sadece isim, parametreler ve dönüş türü, gövde içermez. İmzadan sonraki noktalı virgül, bunun bir uygulama değil, bir gereklilik olduğunu gösterir.

Bu Describable özelliği şunu söyler: "Beni uygulayan her tür, kendisine bir referans alan ve bir String döndüren bir describe metodu sağlamalıdır." Bu özellik, metodun nasıl çalıştığıyla ilgilenmez; bu, onu uygulayan her türün kendisine bağlıdır.

Birden fazla farklı tür aynı trait'i uyguladığında trait'ler güçlü hale gelir. Bir Book, bir Car ve bir Person'ın hepsi Describable olabilir ve her biri kendi benzersiz açıklamasını sunar. Trait, hepsinin bu ortak yeteneği paylaşmasını garanti eder.

challenge icon

Görev

Kolay

İlk trait'inizi tanımlayalım! Bir trait, bir sözleşme kurar; bu trait'i uygulayan herhangi bir türün belirli bir davranışı sağlayacağına dair bir sözdür. Farklı türlerin kendileri hakkında bir özet sunmak için uygulayabileceği bir Summarizable trait'i oluşturacaksınız.

Kodunuzu iki dosya halinde düzenleyeceksiniz:

  • summary.rs: Tek bir metot imzasına sahip, Summarizable adında genel (public) bir trait tanımlayın: summarize(&self) -> String. Unutmayın, bir trait tanımında metot imzasını sadece bir noktalı virgül ile bildirirsiniz; gövde (body) yazmazsınız. Bu, Rust'a "bu trait'i uygulayan her tür, bir String döndüren bir summarize metodu sağlamalıdır" der.
  • main.rs: summary modülünüzü içeri aktarın ve trait'inizin tanımlandığını onaylayan bir mesaj yazdırın. Henüz trait'lerin nasıl uygulanacağını öğrenmediğimiz için (bu bir sonraki dersin konusu!), sadece trait'inizin doğru şekilde derlendiğini doğrulayacaksınız.

Ana dosyanızda, trait tanımınızın geçerli olduğunu onaylamak için aşağıdaki mesajı yazdırın:

Summarizable trait defined successfully!

Bu görev tamamen trait tanımlama sözdizimine odaklanmaktadır: trait anahtar kelimesi, trait adı ve uygulama (implementation) içermeyen metot imzalarının bildirilmesi. Bir sonraki derste, struct'ların bu trait'i nasıl uygulayacağını öğreneceksiniz!

Kopya kağıdı

Bir trait, bir türün uygulaması gereken bir dizi metodu tanımlar. Bir türün belirli bir davranışı sağladığını garanti eden bir sözleşme görevi görür.

Bir trait tanımlamak için, trait anahtar kelimesini, ardından trait adını ve metod imzalarını kullanın:

trait Describable {
    fn describe(&self) -> String;
}

Trait'lerdeki metod imzaları; adı, parametreleri ve dönüş türünü içerir ancak gövde içermez. Noktalı virgül, bunun uygulayan türler için bir gereklilik olduğunu belirtir.

Birden fazla farklı tür aynı trait'i uygulayabilir ve her biri gerekli metodların kendi uygulamasını sağlar.

Kendin dene

mod summary;

fn main() {
    // TODO: Trait'in tanımlandığına dair onay mesajını yazdırın
    // Beklenen çıktı: "Summarizable trait defined successfully!"
    
}
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