構造体の概要
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 21/66。
構造体が何であるかを理解したところで、実際にそれらを作成して使用する方法を学びましょう。これには2つのステップが含まれます。まず構造体の構造を定義し、次にそのインスタンスを作成することです。
構造体を定義するには、structキーワードの後に構造体名と、波括弧の中にそのフィールドを記述します。各フィールドには名前と型があります:
struct User {
username: String,
active: bool,
}これは、String 型の username と bool 型の active という2つのフィールドを持つ User 構造体の設計図を作成します。
命名規則: Rustにおける構造体名は、PascalCase(アッパーキャメルケースとも呼ばれます)を使用する必要があります。これは、各単語が大文字で始まることを意味します。例えば、User、ProductItem、ShoppingCartなどです。この規則に従わない場合、Rustは警告を表示します。
構造体を定義したら、各フィールドの値を指定することで、そのインスタンスを作成できます。
let user1 = User {
username: String::from("alice"),
active: true,
};構造体名の後に、各フィールド名、コロン、およびその値を含む波括弧を記述することに注意してください。フィールドの順序は、定義時の順序と一致している必要はありません。
構造体のインスタンスのフィールドにアクセスするには、ドット記法を使用します。インスタンス名の後にドットとフィールド名を記述します:
println!("Username: {}", user1.username);
println!("Active: {}", user1.active);ここでは、user1.username は user1 の username フィールドにアクセスし、user1.active は active フィールドにアクセスします。これらのフィールド値は、通常の変数を使用する場所であればどこでも使用できます。
チャレンジ
簡単3つの入力(製品名、価格(小数)、在庫数(整数))を受け取ります。3つのフィールド(String型のname、f64型のprice、i32型のstock)を持つProduct構造体を定義してください。次に、入力値を使用してこの構造体のインスタンスを作成し、製品情報を出力してください。
要件:
- フィールド
name: String、price: f64、stock: i32を持つProduct構造体を定義する - 最初の入力を製品名として読み込む
- 2番目の入力を読み込み、価格として
f64に変換する - 3番目の入力を読み込み、在庫数として
i32に変換する - これらの値を使用して
Product構造体のインスタンスを作成する - 以下に示す正確な形式で製品情報を出力する
入力:
- 1行目: 製品名 (例:
Laptop) - 2行目: 小数としての価格 (例:
999.99) - 3行目: 整数としての在庫数 (例:
15)
出力:
- 1行目:
Product: [name] - 2行目:
Price: $[price] - 3行目:
Stock: [quantity]
自分で試してみよう
use std::io;
// TODO: ここで Product 構造体を定義します
fn main() {
// 製品名を読み取ります
let mut name = String::new();
io::stdin().read_line(&mut name).expect("Failed to read line");
let name = name.trim().to_string();
// 価格を読み取ります
let mut price_input = String::new();
io::stdin().read_line(&mut price_input).expect("Failed to read line");
let price: f64 = price_input.trim().parse().expect("Failed to parse price");
// 在庫数を読み取ります
let mut stock_input = String::new();
io::stdin().read_line(&mut stock_input).expect("Failed to read line");
let stock: i32 = stock_input.trim().parse().expect("Failed to parse stock");
// TODO: 入力値を使用して Product 構造体のインスタンスを作成します
// TODO: 指定された形式で製品情報を出力します
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。