タプル構造体
CoddyのRustジャーニー「Logic & Flow」セクションの一部 — レッスン 25/66。
通常の構造体は名前付きフィールドを使用しますが、Rustはタプル構造体と呼ばれる別の型も提供しています。これらは、各フィールドに個別に名前を付ける必要がない場合に、カスタム型をより簡潔に作成する方法を提供します。
タプル構造体は、新しい型を作成する利点とタプルの簡潔さを組み合わせたものです。structキーワードの後に型名と、括弧で囲まれたフィールドの型を続けて定義します:
struct Color(i32, i32, i32);これにより、RGBカラー値を表す3つのi32値を保持するColor型が作成されます。通常の構造体とは異なり、フィールド名を指定しません。タプルと同じように、位置によって値にアクセスします。
タプル構造体のインスタンスを作成するには、括弧の中に値を指定します:
let red = Color(255, 0, 0);フィールドのインデックスを指定したドット記法を使用して、個々のフィールドにアクセスできます:red.0 は最初の値を返し、red.1 は2番目の値を返します。以降も同様です。
チャレンジ
簡単3つの入力(赤の値、緑の値、青の値、すべて整数)を受け取ります。RGBカラーコンポーネントを表す3つの i32 型の値を保持する Color タプル構造体を定義してください。入力値を使用してこのタプル構造体のインスタンスを作成し、インデックス表記を使用して各カラーコンポーネントにアクセスし、出力してください。
要件:
- 3つの
i32フィールドを持つColorタプル構造体を定義する - 最初の入力を読み込み、赤の値として
i32に変換する - 2番目の入力を読み込み、緑の値として
i32に変換する - 3番目の入力を読み込み、青の値として
i32に変換する - これらの値を使用して
Colorタプル構造体のインスタンスを作成する - インデックス(0, 1, 2)を用いたドット記法を使用して各フィールドにアクセスし、以下の形式でカラー情報を出力する
入力:
- 1行目: 整数としての赤の値 (例:
255) - 2行目: 整数としての緑の値 (例:
128) - 3行目: 整数としての青の値 (例:
0)
出力:
- 1行目:
Red: [red_value] - 2行目:
Green: [green_value] - 3行目:
Blue: [blue_value]
チートシート
タプル構造体は、名前付きフィールドを持たない構造体です。これは、新しい型を作成する利点と、タプルのシンプルさを兼ね備えています。
structキーワードを使用し、その後に型名と括弧内のフィールド型を続けてタプル構造体を定義します。
struct Color(i32, i32, i32);括弧内に値を指定してインスタンスを作成します。
let red = Color(255, 0, 0);フィールドのインデックスを指定したドット記法を使用して、フィールドにアクセスします。
red.0 // 1番目の値
red.1 // 2番目の値
red.2 // 3番目の値自分で試してみよう
use std::io;
// TODO: ここでColorタプル構造体を定義してください
fn main() {
// 赤の値を読み取る
let mut red_input = String::new();
io::stdin().read_line(&mut red_input).expect("Failed to read line");
let red: i32 = red_input.trim().parse().expect("Invalid input");
// 緑の値を読み取る
let mut green_input = String::new();
io::stdin().read_line(&mut green_input).expect("Failed to read line");
let green: i32 = green_input.trim().parse().expect("Invalid input");
// 青の値を読み取る
let mut blue_input = String::new();
io::stdin().read_line(&mut blue_input).expect("Failed to read line");
let blue: i32 = blue_input.trim().parse().expect("Invalid input");
// TODO: 入力値を使用してColorタプル構造体のインスタンスを作成してください
// TODO: インデックス記法を使用して各色の成分にアクセスし、表示してください
// フォーマット: Red: [value], Green: [value], Blue: [value]
}このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。