CodeBlanks Logo Icon CodeBlanks

Trait nedir?

Trait ile ortak davranış tanımlamayı öğrenirsin.

Trait nedir?

Trait, türlerin paylaşabileceği bir davranış sözleşmesidir: "bu türü uygulayan her tür şu metotlara sahiptir". Diğer dillerdeki arayüzlere (interface) benzer:

trait Ses {
    fn ses(&self) -> String;
}

struct Kedi;

impl Ses for Kedi {
    fn ses(&self) -> String {
        String::from("Miyav")
    }
}

Trait yalnızca imzayı tanımlar; gövdeyi her tür kendi impl Trait for Tür bloğunda yazar.

Trait metodunu çağırmak

Trait metotları normal metotlar gibi nokta ile çağrılır, ama trait'in kapsamda olması gerekir. Aynı modülde tanımlıysa zaten kapsamdadır; başka bir crate'ten geliyorsa use ile alınır:

use std::fmt::Write;   // write! makrosunu String'e uygulamak için

let mut s = String::new();
write!(s, "{}-{}", 1, 2).unwrap();
println!("{s}");   // 1-2

Trait kapsamda değilse derleyici "method not found ... items from traits can only be used if the trait is in scope" der ve hangi use satırının eksik olduğunu önerir.

Uygulama İlk trait

fn ses(&self) -> String metodunu içeren trait Ses tanımla. struct Kedi; için uygula ("Miyav") ve Kedi.ses() sonucunu yazdır.

Başlangıç kodu

main.rs
fn main() {
    // buraya yaz
}

Örnek çözüm

main.rs
trait Ses {
    fn ses(&self) -> String;
}

struct Kedi;

impl Ses for Kedi {
    fn ses(&self) -> String {
        String::from("Miyav")
    }
}

fn main() {
    println!("{}", Kedi.ses());
}

Beklenen çıktı

Miyav

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Bir trait metodunun gövdesini yazmayı unutursan ne olur?

  • Metot boş çalışır
  • Çalışma anında panic
  • Uyarı verir
  • Derleme hatası: eksik trait öğesi (E0046) Doğru cevap

Açıklama: Varsayılan gövdesi olmayan her metot uygulamada yazılmalıdır.

2 Trait uygula

Soru
impl Ses ____ Kedi {
    fn ses(&self) -> String {
        String::from("Miyav")
    }
}
Cevap
impl Ses for Kedi {
    fn ses(&self) -> String {
        String::from("Miyav")
    }
}

Açıklama: Trait uygulaması impl Trait for Tür biçimindedir.

3 Yazım ve anlamı

Kavram Anlamı
trait Ses { .. } Sözleşme tanımı
impl Ses for Kedi Uygulama
fn ses(&self) -> String; Gövdesiz imza
use std::fmt::Write Trait'i kapsama alır

Orta seviye bölümündeki tüm dersler