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.
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,Summarizableadı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, birStringdöndüren birsummarizemetodu 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!"
}
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
1Metotlar ve Davranış
Uygulama Bloklarına GirişSelf ParametresiDeğiştirilebilir Metotlarİlişkili FonksiyonlarBirden Fazla Uygulama BloğuMetot ZincirlemeÖzet - Dikdörtgen Eylemleri4Proje: Sanal Evcil Hayvan
Evcil Hayvanı TanımlamaEvcil Hayvanı Besleme2Kapsülleme ve Modüller
Modül TemelleriPublic Anahtar KelimesiPrivate AlanlarGetter'larSetter'larÖzet - Güvenli Kasa5Generic Yapılar
Generic Struct'larGeneric MetotlarÇoklu Generic TürlerGeneric FonksiyonlarÖzet - Koordinat Noktası8Sınırlandırıcı Olarak Trait'ler
Trait Sınırlandırıcı SözdizimiÇoklu SınırlandırıcılarWhere CümleciğiTrait'ler ile Tip DöndürmeÖzet - Generic Yazıcı11Rust'ta Tasarım Kalıpları
Newtype KalıbıKompozisyonDrop Trait'iFrom ve IntoÖzet - Smart Pointer Mock3İleri Seviye Enum'lar
Veri İçeren Enum'larEnum MetotlarıVeri Varyantlarını EşlemeOption Enum'ına Yeniden BakışÖzet - Shape Enum6Trait Tanımlama
Trait Nedir?Traitleri UygulamaVarsayılan UygulamalarVarsayılanları Geçersiz KılmaParametreli TraitlerÖzet - Media Player