Menu
Coddy logo textTech

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.

challenge icon

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: Summarizable adlı, 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, bir summarize yöntemi sağlamalı ve bu yöntem bir String dö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!"
    
}
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