Menu
Coddy logo textTech

構造体の概要

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 とも呼ばれます)を使用します。これは各単語を大文字で始める形式です。例: UserProductItemShoppingCart。この規則に従わない場合、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.usernameuser1username フィールドにアクセスし、user1.activeactive フィールドにアクセスします。これらのフィールド値は、通常の変数を使用する場所ならどこでも使用できます。

challenge icon

チャレンジ

簡単

3つの入力を受け取ります: product name、price(小数値)、stock quantity(整数)。3つのフィールドを持つProduct structを定義します: 型がStringname、型がf64price、型がi32stockです。その後、input valuesを使用してこのstructのinstanceを作成し、product informationを出力します。

要件:

  • フィールドがname: Stringprice: f64stock: i32であるProduct structを定義する
  • 1つ目のinputをproduct nameとしてreadする
  • 2つ目のinputをreadし、price用にf64へ変換する
  • 3つ目のinputをreadし、stock quantity用にi32へ変換する
  • これらのvaluesを使用してProduct structの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: 必要な形式で商品情報を出力する
    
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

論理とフローのすべてのレッスン

自分で練習してみよう: Rustオンラインコンパイラ