Progrust Library.

// dictionary

構造体.

構造体(struct)は、複数の値を名前付きの「フィールド」としてひとまとめにする、ユーザーが独自に定義する複合型です。タプル型と違い各値に名前が付くため、フィールドの並び順を覚えていなくても意味が分かります。なおstructキーワードでは、本項で扱う名前付きフィールド構造体のほか、フィールドに名前を付けないタプル構造体や、フィールドを持たないユニット様構造体も定義できます。

// 構造体定義
struct User {
    name: String,
    age: u32,
    active: bool,
}

fn main() {
    // 構造体のインスタンス作成
    let user = User {
        name: String::from("田中"),
        age: 28,
        active: true,
    };

    // フィールドへは . でアクセス
    println!("{}さん({}歳)", user.name, user.age);
}
Playgroundで開く

定義とアクセス

structキーワードで構造体名と各フィールドの名前・型を宣言します。インスタンスを作るときは構造体名 { フィールド名: 値, ... }の形で全フィールドに値を渡します(他インスタンスの値を流用する構造体更新記法..もあります)。フィールドへのアクセスはドット.に続けてフィールド名を書きます。

構造体は変数と同様にそのフィールドも含めてデフォルトで不変です。インスタンスをlet mutで変数に束縛すると、user.age = 29;のようにフィールドを書き換えられます。

フィールド初期化省略記法

スコープ内の変数名がフィールド名と一致する場合、name: nameのような冗長な記述をnameだけに省略できます(関数の引数として受け取った変数もこれに該当します)。

struct User {
    name: String,
    age: u32,
}

fn build_user(name: String, age: u32) -> User {
    User { name, age } // name: name, age: age の省略形
}

fn main() {
    let user = build_user(String::from("鈴木"), 35);
    println!("{}さん", user.name);
}
Playgroundで開く

補足

構造体のデバッグ出力

構造体はデフォルトではprintln!の{}や{:?}で表示できません。構造体定義の直前に#[derive(Debug)]属性を付けると、{:?}(1行)や{:#?}(整形)でフィールドの内容を出力できるようになります。println!に関する詳細はコンソール出力をご確認ください。

#[derive(Debug)]
struct User {
    name: String,
    age: u32,
}

fn main() {
    let user = User { name: String::from("佐藤"), age: 40 };
    println!("{user:?}");  // User { name: "佐藤", age: 40 }
    println!("{user:#?}"); // フィールドごとに改行して整形表示
}
Playgroundで開く

この辞書が使われているページ

backlinks 30

  1. 辞書Copyトレイト
  2. 辞書Debugトレイト
  3. 辞書Defaultトレイト
  4. 辞書derive属性
  5. 辞書impl Trait
  6. 辞書pub
  7. 辞書use宣言
  8. 辞書コメント
  9. 辞書ジェネリクス
  10. 辞書タプル構造体
  11. 辞書トレイト
  12. 辞書トレイト境界
  13. 辞書マクロ
  14. 辞書モジュール
  15. 辞書ユニット様構造体
  16. 辞書ライフタイム
  17. 辞書ライフタイム注釈
  18. 辞書型推論
  19. 辞書構造体更新記法
  20. 辞書比較のトレイト
  21. 辞書比較演算子
  22. 辞書列挙型
  23. 本動かして学ぶRustプログラミング問題集 › 第10章 メソッドと関連関数
  24. 本動かして学ぶRustプログラミング問題集 › 第12章 OptionとResult
  25. 本動かして学ぶRustプログラミング問題集 › 第13章 モジュールと公開範囲
  26. 本動かして学ぶRustプログラミング問題集 › 第17章 ジェネリクス
  27. 本動かして学ぶRustプログラミング問題集 › 第18章 トレイト
  28. 本動かして学ぶRustプログラミング問題集 › 第19章 derive属性と標準トレイト
  29. 本動かして学ぶRustプログラミング問題集 › 第22章 ライフタイム
  30. 本動かして学ぶRustプログラミング問題集 › 第9章 構造体