名前付き構造体

C や C++ と同様に、Rust はカスタム構造体をサポートしています。

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

fn describe(person: &Person) {
    println!("{} is {} years old", 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);

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

キーポイント:

  • 構造体は、C や C++ においてと同じように機能します。
    • C++ と同様に、また C とは異なり、型を定義するのに typedef は必要ありません。
    • C++ とは異なり、構造体間に継承はありません。
  • ここで、構造体にはさまざまな型があることを説明しましょう。
    • サイズがゼロの構造体(例: struct Foo;)は、ある型にトレイトを実装しているものの、値自体に格納するデータがない場合に使用できます。
    • 次のスライドでは、フィールド名が重要でない場合に使用されるタプル構造体を紹介します。
  • 適切な名前の変数がすでにある場合は、省略形を使用して構造体を作成できます。
  • 構文 ..avery を使用すると、明示的にすべてのフィールドを入力しなくても、古い構造体のフィールドの大部分をコピーできます。この構文は、常に最後の要素にする必要があります。