Trait Nedir?
Coddy'nin Rust Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 29 / 61.
Jenerikler, herhangi bir türle çalışan kod yazmanızı sağlar; ancak bazen bir türün belirli bir şeyi yapabileceğini garanti etmeniz gerekir. İşte trait’ler burada devreye girer.
Bir özellik, bir türün uygulaması gereken bir dizi yöntem tanımlar. Bunu bir sözleşme olarak düşünün: bu sözleşmeyi "imzalayan" herhangi bir tür, belirtilen davranışı sağlamayı taahhüt eder. Başka dillerde arayüzleri kullandıysanız, özellikler benzer bir amaca hizmet eder.
Bir trait'i şu şekilde tanımlarsın:
trait Describable {
fn describe(&self) -> String;
}
trait anahtar sözcüğü, ardından adı gelecek şekilde trait'i tanımlar. Süslü parantezlerin içinde, gövde olmadan yalnızca ad, parametreler ve dönüş türünden oluşan yöntem imzalarını bildirirsiniz. İmzadan sonraki noktalı virgül, bunun bir uygulama değil, bir gereksinim olduğunu belirtir.
Bu Describable trait'i şunu söyler: "Beni uygulayan herhangi bir tür, kendisine bir referans alan ve bir String döndüren bir describe metodu sağlamalıdır." Trait, metodun nasıl çalıştığını önemsemez: bunu onu uygulayan her tür belirler.
Birden fazla farklı tür aynı trait’i uyguladığında trait’ler güçlü hâle gelir. Bir Book, bir Car ve bir Person Describable olabilir; her biri kendine özgü açıklamasını sağlar. Trait, hepsinin bu ortak yeteneği paylaştığını garanti eder.
Görev
Kolayİlk trait'inizi tanımlayalım! Bir trait bir sözleşme oluşturur: onu uygulayan herhangi bir türün belirli davranışlar sağlayacağına dair bir söz. Farklı türlerin kendileri hakkında bir özet sunmak için uygulayabileceği bir Summarizable trait'i oluşturacaksınız.
Kodunuzu iki dosyaya ayıracaksınız:
summary.rs:Summarizableadlı, tek bir yöntem imzasına sahip herkese açık bir trait tanımlayın:summarize(&self) -> String. Bir trait tanımında yalnızca yöntem imzasını noktalı virgülle bildirmeniz gerektiğini unutmayın: gövde olmaz. Bu, Rust'a "bu trait'i uygulayan herhangi bir tür, birsummarizeyöntemi sağlamalı ve bu yöntem birStringdöndürmelidir" der.main.rs: summary modülünü içeri aktarın ve trait'inizin tanımlandığını doğrulayan bir mesaj yazdırın. Henüz trait'lerin nasıl uygulanacağını öğrenmediğimiz için (bu bir sonraki ders!), yalnızca trait'inizin doğru şekilde derlendiğini doğrulayacaksınız.
Trait tanımınızın geçerli olduğunu doğrulamak için ana dosyanızda aşağıdaki mesajı yazdırın:
Summarizable trait defined successfully!Bu alıştırma tamamen trait tanımı söz dizimine odaklanır: trait anahtar sözcüğü, trait adı ve uygulama olmadan yöntem imzalarının bildirilmesi. Bir sonraki derste struct'ların bu trait'i nasıl uygulayacağını öğreneceksiniz!
Kendin dene
mod summary;
fn main() {
// TODO: Trait'in tanımlandığına dair onay mesajını yazdır
// Expected output: "Summarizable trait defined successfully!"
}
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
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 PlayerKendi başına pratik yap: Online Rust derleyicisi