ساختارهای نام‌دار

‏مانند C و C++، زبان Rust از ساختارهای سفارشی پشتیبانی می‌کند:

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

fn describe(person: &Person) {
    println!(‏"{} {} ساله است", person.name, person.age);
}

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

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

    let name = String::from("ایوری");
    let age = 39;
    let avery = Person { name, age };
    describe(&avery);

    let jackie = Person { name: String::from("جکی"), ..avery };
    describe(&jackie);
}
This slide should take about 10 minutes.

نکات کلیدی:

  • ‏ساختارها (Structs) در Rust مانند C یا C++ عمل می‌کنند.
    • ‏مانند C++ و برخلاف C، برای تعریف یک نوع نیازی به typedef نیست.
    • ‏برخلاف C++، در Rust بین ساختارها ارث‌بری وجود ندارد.
  • این زمان مناسبی است تا به مردمان اطلاع دهیم که انواع مختلفی از ساختارها وجود دارد.
    • ساختارهای بدون اندازه (مانند struct Foo;) ممکن است زمانی استفاده شوند که می‌خواهید یک صفت (trait) را بر روی یک نوع پیاده‌سازی کنید، اما داده‌ای ندارید که بخواهید در خود مقدار ذخیره کنید.
    • اسلاید بعدی ساختارهای تاپل (Tuple structs) را معرفی خواهد کرد، که زمانی استفاده می‌شوند که نام فیلدها مهم نیستند.
  • اگر از قبل متغیرهایی با نام‌های مناسب دارید، می‌توانید ساختار را با استفاده از یک روش میانبر ایجاد کنید.
  • سینتکس ..avery به ما اجازه می‌دهد که اکثر فیلدها را از ساختار قدیمی کپی کنیم بدون اینکه همه آن‌ها را صریحاً تایپ کنیم. این باید همیشه آخرین عنصر باشد.