Menu
Coddy logo textTech

まとめ - Shape Enum

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

challenge icon

チャレンジ

簡単

異なる図形を表現するために enum を使用し、それぞれの図形が独自の寸法を保持する幾何学計算機を作成しましょう。この Shape enum は、単一の型がどのように異なるデータ構造を保持し、メソッドを通じて統一された動作を提供できるかを示します。

コードを整理するために、2つのファイルを作成します:

  • shape.rs: 2つのバリアントを持つパブリックな Shape enum を定義します:
    • Circle — 半径を表す単一の f64 を保持します(タプル構文)
    • Rectangle — 名前付きフィールド width (f64) と height (f64) を保持します
    パターンマッチングを使用して、バリアントに基づいて正しい面積を計算する area メソッドを実装してください。円の場合、π として 3.14159 を使用してください。
  • main.rs: shape モジュールを取り込み、提供された入力を使用して各図形バリアントのインスタンスを1つずつ作成し、各図形の面積を出力します。

area メソッドは f64 を返す必要があります。マッチングを行う際は、各バリアントをデストラクト(構造分解)して寸法を取り出し、適切な公式を適用してください:

  • 円の面積: π × radius²
  • 長方形の面積: width × height

出力は、各図形の面積をそれぞれの行に、小数点以下ちょうど1桁で表示する必要があります:

Circle area: {area}
Rectangle area: {area}

例えば、円の半径が 5.0、長方形の幅が 4.0、高さが 6.0 の場合、出力は以下のようになります:

Circle area: 78.5
Rectangle area: 24.0

入力として、円の半径、長方形の幅、長方形の高さの3つを受け取ります。

自分で試してみよう

mod shape;

use shape::Shape;

fn main() {
    // 入力を読み込む
    let mut radius_input = String::new();
    std::io::stdin().read_line(&mut radius_input).expect("Failed to read line");
    let radius: f64 = radius_input.trim().parse().expect("Invalid number");

    let mut width_input = String::new();
    std::io::stdin().read_line(&mut width_input).expect("Failed to read line");
    let width: f64 = width_input.trim().parse().expect("Invalid number");

    let mut height_input = String::new();
    std::io::stdin().read_line(&mut height_input).expect("Failed to read line");
    let height: f64 = height_input.trim().parse().expect("Invalid number");

    // TODO: radius を使用して Circle シェイプを作成する
    
    // TODO: width と height を使用して Rectangle シェイプを作成する
    
    // TODO: 各シェイプの面積を小数点第1位まで表示する
    // 形式: "Circle area: {area}" および "Rectangle area: {area}"
}

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