İsimli Yapılar (Named Structs)

C ve C++ dillerindeki gibi Rust’ın da özel (kullanıcı tanımlı) yapılara desteği vardır:

struct Person {
    name: String,
    age: u8,
}

fn describe(person: &Person) {
    println!("{} {} yaşında", person.name, person.age);
}

fn main() {
    let mut peter = Person {
        name: String::from("Peter"),
        age: 27,
    };
    describe(&peter);

    peter.age = 28;
    describe(&peter);

    let name = String::from("Avery");
    let age = 39;
    let avery = Person { name, age };
    describe(&avery);
}
This slide should take about 10 minutes.

Önemli Noktalar:

  • Yapılar C veya C++’daki gibi çalışır.
    • C++’daki gibi ve C’den farklı olarak, bir türü tanımlamak için typedef’e gerek yoktur.
    • C++’dan farklı olarak yapılar arasında kalıtım (inheritance) yoktur.
  • Bu, insanlara farklı yapı türleri olduğunu duyurmak için iyi bir zaman olabilir.
    • Sıfır boyutlu (zero-sized) yapılar (örn. struct Foo;), bir özelliğin (trait) bazı türlere gerçekleştiriminde (implementing) kullanılabilir, ancak değer olarak kendisinde saklamak istenilen herhangi bir veri yoktur.
    • Sonraki slaytta alan adları (field names) önemli olmadığında kullanılan Demet (Tuple) yapıları tanıtılacaktır.
  • Eğer zaten doğru adlara sahip değişkenleriniz varsa, o zaman yapıyı bir kısaltma kullanarak oluşturabilirsiniz.
  • Yapı alanları (struct fields) varsayılan değerleri desteklemez. Varsayılan değerler, daha sonra ele alacağımız Default özelliği (trait) uygulanarak belirtilir.

Daha Fazlasını Keşfedin

  • Burada aynı zamanda yapı güncelleme sözdizimini (struct update syntax) de gösterebilirsiniz:

    let jackie = Person { name: String::from("Jackie"), ..avery };
  • Bu, eski yapının (struct) alanlarının çoğunu açıkça tek tek yazmak zorunda kalmadan kopyalamamıza olanak tanır. Bu her zaman son öğe olmalıdır.

  • Bu, çoğunlukla Default özelliği (trait) ile birlikte kullanılır. Default özelliği ile ilgili slaytta yapı güncelleme sözdizimini (struct update syntax) daha detaylı ele alacağız, bu yüzden öğrenciler sormadıkça burada bahsetmemize gerek yok.