Menu
Coddy logo textTech

まとめ:表示可能な Point

CoddyのRustジャーニー「Object Oriented Programming」セクションの一部 — レッスン 39/61。

challenge icon

チャレンジ

簡単

デバッグ、美しい表示、そして等価性の比較が可能な、フル機能の Point 構造体を作成することで、これまでに学んだすべての標準トレイトをまとめてみましょう!

コードは2つのファイルに分けて構成します:

  • point.rs: 公開された x および y フィールド(どちらも i32)を持つ公開 Point 構造体を定義します。Pointは以下の3つの機能をサポートする必要があります:
    • {:?} によるデバッグ出力 — これを自動的に derive します
    • (x, y) 形式の {} によるユーザーフレンドリーな表示 — std::fmt::Display を使用して手動で実装します
    • == による等価比較 — PartialEq を derive します
  • main.rs: pointモジュールを取り込み、提供された入力を使用して2つの Point インスタンスを作成します。最初のポイントをデバッグ形式で出力し、2番目のポイントを表示形式で出力し、2つのポイントが等しいかどうかを比較することで、3つの機能すべてを実証してください。

出力には、3つのトレイト機能がすべて動作していることを示す必要があります:

Debug: Point { x: {x1}, y: {y1} }
Display: ({x2}, {y2})
Equal: {true/false}

例えば、入力が 3, 5, 3, 5 の場合:

Debug: Point { x: 3, y: 5 }
Display: (3, 5)
Equal: true

また、入力が 10, 20, 5, 15 の場合:

Debug: Point { x: 10, y: 20 }
Display: (5, 15)
Equal: false

4つの入力を受け取ります:最初のポイントのx座標とy座標、続いて2番目のポイントのx座標とy座標です。それぞれを i32 としてパースしてください。

自分で試してみよう

mod point;

use point::Point;

fn main() {
    // 4つの入力 x1, y1, x2, y2 を読み込む
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x1: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y1: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let x2: i32 = input.trim().parse().expect("Invalid input");

    input.clear();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let y2: i32 = input.trim().parse().expect("Invalid input");

    // TODO: 入力を使用して2つの Point インスタンスを作成する

    // TODO: デバッグフォーマット {:?} を使用して1つ目のポイントを表示する
    // フォーマット: "Debug: Point { x: ..., y: ... }"

    // TODO: ディスプレイフォーマット {} を使用して2つ目のポイントを表示する
    // フォーマット: "Display: (..., ...)"

    // TODO: 2つのポイントを比較して結果を表示する
    // フォーマット: "Equal: true" または "Equal: false"
}

Object Oriented Programmingのすべてのレッスン