メインコンテンツにスキップ
モジュール 4 · レッスン 1 / 2コース内の 7/14~12 min
モジュールのレッスン (1/2)

構造体の定義とインスタンス化

Rust の Structs (または構造体) は、複数の関連する値をグループ化できるカスタム データ型です。これらは他の言語のオブジェクトやクラスに似ていますが、継承はありません。

構造体の定義

構造体を定義するには、struct キーワードの後に​​ PascalCase の名前を続けます。内部では、フィールドの名前と型を定義します。

Rust
struct User {
    username: String,
    email: String,
    active: bool,
    sign_in_count: u64,
}

インスタンスの作成

構造体を使用するには、指定されたフィールドをすべて入力してインスタンスを作成する必要があります。

Rust
fn main() {
    let user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    // Access fields using dot notation
    println!("Is user {} active? {}", user1.username, user1.active);
}

構造体の可変性

Rust では、フィールドのいずれかを変更したい場合、インスタンス全体を可変 (mut) としてマークする必要があります。 Rust では、特定のフィールドのみを可変としてマークすることはできません。

Rust
fn main() {
    let mut user1 = User {
        email: String::from("alice@example.com"),
        username: String::from("alice123"),
        active: true,
        sign_in_count: 1,
    };

    user1.active = false; // Valid because user1 is mutable!
}

タプル構造体とユニット状構造体

Rust は、古典的な名前付きフィールド構造体以外に、他の 2 つの構造体形式もサポートしています。

  1. タプル構造体: 関連付けられた名前がありますが、フィールドには個別の名前はなく、タイプのみがあります。これらは、特定のタイプを定義および区別するのに役立ちます。
    Rust
    struct Point(i32, i32, i32);
    let origin = Point(0, 0, 0);
  2. ユニット状構造体: フィールドは定義されません。これらは () ユニット タイプのように動作します。これらは、データを格納せずに型の動作 (特性) を実装する必要がある場合に役立ちます。

自分で試してみてください

運動#rust.m4.l1.e1
試行回数: 0読み込み中…

main の上に username (String 型) および active (bool 型) フィールドを含む User 構造体を定義します。

エディターを読み込み中…
ヒントを表示

「main」の前に「struct User { username: String, active: bool }」と書きます。

3 回の試行後に解決策が利用可能になります

運動#rust.m4.l1.e2
試行回数: 0読み込み中…

user1 を変更して変更可能にし (mut user1 にさせます)、印刷前にアクティブなフィールドを false に変更します。

エディターを読み込み中…
ヒントを表示

「let user1」に「mut」を追加して「let mut user1」にし、「user1.active = false;」を挿入します。

3 回の試行後に解決策が利用可能になります

運動#rust.m4.l1.e3
試行回数: 0読み込み中…

3 つの i32 フィールドを含む Color という名前のタプル構造体を定義します。 main では、変数 my_color に代入する値 255、0、および 100 を使用して Color をインスタンス化し、println! を使用してその最初の要素 (赤色の値) を出力します。

エディターを読み込み中…
ヒントを表示

`struct Color(i32, i32, i32);` でタプル構造体を定義します。 main では、`let my_color = Color(255, 0, 100);` としてインスタンス化し、`my_color.0` で赤色の値を出力します。

3 回の試行後に解決策が利用可能になります