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 11

  1. 辞書pub
  2. 辞書use宣言
  3. 辞書タプル構造体
  4. 辞書モジュール
  5. 辞書ユニット様構造体
  6. 辞書構造体更新記法
  7. 辞書列挙型
  8. 動かして学ぶRustプログラミング問題集 › 第10章 メソッドと関連関数
  9. 動かして学ぶRustプログラミング問題集 › 第12章 OptionとResult
  10. 動かして学ぶRustプログラミング問題集 › 第13章 モジュールと公開範囲
  11. 動かして学ぶRustプログラミング問題集 › 第9章 構造体