構造体の概要
CoddyのRustジャーニー「論理とフロー」セクションの一部。レッスン 21/66。
structとは何かを理解できたので、次は実際にstructを作成して使用する方法を学びましょう。これには2つの手順があります。まずstructの構造を定義し、次にそのinstanceを作成します。
structを定義するには、structキーワードの後にstructの名前を記述し、波括弧の中にフィールドを指定します。各フィールドには名前と型があります。
struct User {
username: String,
active: bool,
}これは、2つのフィールドを持つUser構造体の設計図を作成します。String型のusernameと、bool型のactiveです。
命名規則: Rust の Struct 名には PascalCase(UpperCamelCase とも呼ばれます)を使用します。これは各単語を大文字で始める形式です。例: User、ProductItem、ShoppingCart。この規則に従わない場合、Rust は警告を表示します。
struct を Define したら、各フィールドの values を指定して、その instance を作成できます:
let user1 = User {
username: String::from("alice"),
active: true,
};struct 名の後に、各フィールド名、コロン、値を含む波括弧を記述していることに注目してください。フィールドの順序は定義した順序と一致している必要はありません。
struct instance のフィールドにアクセスするには、ドット記法を使用します。instance name の後にドットとフィールド名を続けて記述します:
println!("Username: {}", user1.username);
println!("Active: {}", user1.active);ここでは、user1.username は user1 の username フィールドにアクセスし、user1.active は active フィールドにアクセスします。これらのフィールド値は、通常の変数を使用する場所ならどこでも使用できます。
チャレンジ
簡単3つの入力を受け取ります: product name、price(小数値)、stock quantity(整数)。3つのフィールドを持つProduct structを定義します: 型がStringのname、型がf64のprice、型がi32のstockです。その後、input valuesを使用してこのstructのinstanceを作成し、product informationを出力します。
要件:
- フィールドが
name: String、price: f64、stock: i32であるProductstructを定義する - 1つ目のinputをproduct nameとしてreadする
- 2つ目のinputをreadし、price用に
f64へ変換する - 3つ目のinputをreadし、stock quantity用に
i32へ変換する - これらのvaluesを使用して
Productstructのinstanceを作成する - 以下に示すexact formatでproduct informationを出力する
入力:
- 1行目: Product name(例:
Laptop) - 2行目: 小数値としてのPrice(例:
999.99) - 3行目: 整数としてのStock quantity(例:
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: 必要な形式で商品情報を出力する
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
論理とフローのすべてのレッスン
自分で練習してみよう: Rustオンラインコンパイラ