構造体の定義と利用
タプル構造体やユニット風構造体を含む構造体でカスタムデータ構造を作成し、関連するデータをまとめる方法を学びます。
「構造体の定義と利用」はCoddyKit上の無料Learn Rust Codingレッスンです。 これはレッスン1/3です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはLearn Rust Coding学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Learn Rust Codingコースには全3レッスンが含まれています。
構造体入門:カスタムデータ型
Rustの構造体(structureの略)は、複数の関連する値に名前を付け、意味のあるグループとしてまとめるカスタムデータ型を作成する仕組みです。
構造体は、ユーザーや色、空間上の点の設計図だと考えることができます。ユーザーの名前、メールアドレス、年齢を別々の変数にする代わりに、それらをすべて User 構造体にまとめられます。
これにより、データを論理的に整理でき、コードの読みやすさと保守性も向上します。
基本的な構造体の定義
最も一般的な構造体は通常の構造体です。データの各要素に名前を付けます。この要素をフィールドと呼びます。定義方法は次のとおりです。
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
// This code only defines the struct blueprint.
// No actual user has been created yet!
println!("Struct 'User' blueprint defined.");
}構造体のインスタンスの作成
構造体を定義したら、具体的なインスタンスを作成できます。各インスタンスは、フィールドに固有の値を保持します。インスタンスを作成するには、各フィールドに具体的な値を指定します。
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("User instance created!");
}構造体フィールドへのアクセス
構造体のインスタンスからデータを取得するには、ドット記法を使います。インスタンス名、ドット(.)、フィールド名の順に記述します。
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("User's username: {}", user1.username);
println!("User's email: {}", user1.email);
}構造体の可変性
通常の変数と同じように、mut キーワードを使って構造体のインスタンス全体を可変にできます。インスタンスが可変なら、すべてのフィールドを変更できます。
特定のフィールドだけを可変にすることはできません。可変性は構造体のインスタンス全体に適用されます。
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let mut user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
println!("Old email: {}", user1.email);
user1.email = String::from("new_alice@example.com");
println!("New email: {}", user1.email);
}タプル構造体:名前のないフィールド
タプル構造体は、タプルに似た見た目を持ちながら名前が付いている、もう1つの構造体形式です。タプルに固有の型名を付けたい一方で、個々のフィールドに名前を付ける必要がない場合に便利です。
たとえば、Color(i32, i32, i32) は3つの整数をまとめた名前付きタプルです。
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
fn main() {
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
println!("Tuple structs 'Color' and 'Point' defined.");
}タプル構造体の使用
タプル構造体のインスタンス作成方法は、通常のタプルと似ています。内部の値にアクセスするには、0 から始まるインデックスを使ったドット記法を使用します。
struct Color(i32, i32, i32);
struct Point(i32, i32, i32);
fn main() {
let black = Color(0, 0, 0);
let origin = Point(0, 0, 0);
println!("Black color: R={}, G={}, B={}", black.0, black.1, black.2);
println!("Origin point: X={}, Y={}, Z={}", origin.0, origin.1, origin.2);
}ユニット風構造体:マーカー
フィールドをまったく持たない構造体も定義できます。これらはユニット型 () と似た動作をするため、ユニット風構造体と呼ばれます。
データ自体は重要ではなく、特定の型にあるtraitを実装することを示すマーカーとして、よく使用されます。
struct AlwaysTrue;
fn main() {
let subject = AlwaysTrue;
// Unit-like structs don't store data directly,
// but they can be instantiated and used as types.
println!("Unit-like struct 'AlwaysTrue' created.");
}構造体更新構文
既存の構造体インスタンスをもとに新しいインスタンスを作成し、一部のフィールド値だけを変更したい場合、Rustでは便利な構造体更新構文(..)を使用できます。
この構文は、残りのフィールドを指定したインスタンスからムーブします。そのため、元のインスタンスに Copy を実装していないフィールドが含まれている場合、元のインスタンスは使用できなくなります。
struct User {
username: String,
email: String,
sign_in_count: u64,
active: bool,
}
fn main() {
let user1 = User {
email: String::from("alice@example.com"),
username: String::from("alice123"),
active: true,
sign_in_count: 1,
};
let user2 = User {
email: String::from("bob@example.com"),
username: String::from("bob456"),
..user1 // Copy remaining fields from user1
};
println!("User 2 email: {}", user2.email);
println!("User 2 active: {}", user2.active);
// user1.username is now moved, so user1 can't be used here.
}構造体クイズ
Rustの構造体についての理解度を確認しましょう。
まとめ:構造体の概要
Rustで構造体を定義し、使用する方法を学びました。
- 通常の構造体は、名前付きフィールドをまとめてカスタムデータ型を作成します。
- タプル構造体は名前付きタプルで、フィールド名が必須でない場合に便利です。
- ユニット風構造体にはフィールドがなく、マーカーとして機能します。
- 構造体のインスタンスを
mutにすると、フィールドを変更できます。 ..構文を使うと、既存のインスタンスから新しいインスタンスを作成できます。
構造体は、Rustプログラムで関連するデータを整理するための基本要素です。コードがより構造化され、読みやすくなります。
よくある質問
「構造体の定義と利用」レッスンは無料ですか?
はい。「構造体の定義と利用」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Learn Rust Codingコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Learn Rust Codingコースには全3レッスンが含まれています。
「構造体の定義と利用」で何を学びますか?
タプル構造体やユニット風構造体を含む構造体でカスタムデータ構造を作成し、関連するデータをまとめる方法を学びます。 ブラウザで直接実行するハンズオンコードでLearn Rust Codingを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Learn Rust Codingを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのLearn Rust Codingは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/3です。
「構造体の定義と利用」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このLearn Rust Codingレッスンでコードを書いて実行できますか?
はい。すべてのLearn Rust Codingレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 構造体の定義と利用
- カスタム型のための列挙型
- 強力なパターンマッチング