Menu
Coddy logo textTech

構造体の概要

CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 21/66。

構造体(struct)が何であるかを理解したところで、実際にそれらを作成して使用する方法を学びましょう。これには2つのステップが含まれます。まず構造体の構造を定義し、次にそのインスタンスを作成します。

構造体を定義するには、structキーワードに続けて、構造体名と波括弧内のフィールドを指定します。各フィールドには名前と型があります:

struct User {
    username: String,
    active: bool,
}

これは、2つのフィールドを持つUser構造体の設計図を作成します。String型のusernameと、bool型のactiveです。


Rustの構造体名はパスカルケース(キャメルケースとも呼ばれます)に従います。各単語は大文字で始まり、アンダースコアは使用しません。例えば、UserBlogPostGamePlayerなどです。

構造体を定義したら、各フィールドの値を指定することで、そのインスタンスを作成できます。

let user1 = User {
    username: String::from("alice"),
    active: true,
};

構造体名の後に、各フィールド名、コロン、およびその値を波括弧で囲んで指定することに注意してください。フィールドの順序は、定義時の順序と一致している必要はありません。

構造体インスタンスのフィールド値にアクセスするには、ドット記法(インスタンス名の後にドットとフィールド名を続ける形式)を使用します:

println!("{}", user1.username); // alice
println!("{}", user1.active);   // true

インスタンスがlet mutで宣言されていれば、ドット記法を使ってフィールドの値を更新することも可能です:

let mut user1 = User {
    username: String::from("alice"),
    active: true,
};
user1.active = false;
challenge icon

チャレンジ

簡単

3つの入力(製品名、価格(小数)、在庫数(整数))を受け取ります。3つのフィールド(String型のnamef64型のpricei32型のstock)を持つProduct構造体を定義してください。次に、入力値を使用してこの構造体のインスタンスを作成し、製品情報を出力してください。

要件:

  • フィールドname: Stringprice: f64stock: i32を持つProduct構造体を定義する
  • 最初の入力を製品名として読み込む
  • 2番目の入力を読み込み、価格としてf64に変換する
  • 3番目の入力を読み込み、在庫数としてi32に変換する
  • これらの値を使用してProduct構造体のインスタンスを作成する
  • 以下の形式で製品情報を出力する

入力:

  • 1行目: 製品名 (例: Laptop)
  • 2行目: 小数としての価格 (例: 999.99)
  • 3行目: 整数としての在庫数 (例: 15)

出力:

  • 1行目: Product: [name]
  • 2行目: Price: $[price]
  • 3行目: Stock: [quantity]

チートシート

構造体名は PascalCase(例:UserAccount)を使用します。構造体を定義するには、struct キーワードの後に構造体名と、波括弧の中にそのフィールドを記述します:

struct User {
    username: String,
    active: bool,
}

各フィールドには名前と型があります。

構造体のインスタンスを作成するには、各フィールドの値を指定します:

let user1 = User {
    username: String::from("alice"),
    active: true,
};

インスタンス内のフィールドの順序は、定義時の順序と一致している必要はありません。

フィールドにアクセスするには、ドット記法(インスタンス名の後にドットとフィールド名を続ける)を使用します:

println!("{}", user1.username); // 出力: alice
println!("{}", user1.active);   // 出力: true

自分で試してみよう

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腕試し

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

Logic & Flowのすべてのレッスン