Menu
Coddy logo textTech

まとめ:メディアプレーヤー

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

challenge icon

チャレンジ

簡単

トレイトを通じて、異なるメディアタイプがどのように共通のインターフェースを共有できるかを示す、シンプルなメディアプレーヤーシステムを構築しましょう!

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

  • playable.rs: 呼び出されたときに出力を表示する play(&self) メソッドを持つ、パブリックな Playable トレイトを定義します。このトレイトは、すべてのメディアタイプが持つ共通の機能を表します。
  • media.rs: トレイトを実装する2つのパブリックな構造体を作成します:
    • Audio — パブリックな title フィールド (String) を持ち、再生時に Playing audio: {title} と表示します
    • Video — パブリックな title フィールド (String) を持ち、再生時に Playing video: {title} と表示します
  • main.rs: モジュールをまとめ、提供された入力を使用して両方のメディアタイプのインスタンスを作成します。それぞれの play メソッドを呼び出し、同じトレイトがメディアタイプに基づいてどのように異なる出力を生成するかを確認します。

出力は以下の形式に従う必要があります:

Playing audio: {audio_title}
Playing video: {video_title}

例えば、入力が Bohemian RhapsodyThe Matrix の場合:

Playing audio: Bohemian Rhapsody
Playing video: The Matrix

オーディオのタイトルとビデオのタイトルの2つの入力を受け取ります。

自分で試してみよう

mod playable;
mod media;

use media::{Audio, Video};
use playable::Playable;

fn main() {
    // 入力を読み込む
    let mut audio_title = String::new();
    std::io::stdin().read_line(&mut audio_title).expect("Failed to read line");
    let audio_title = audio_title.trim().to_string();
    
    let mut video_title = String::new();
    std::io::stdin().read_line(&mut video_title).expect("Failed to read line");
    let video_title = video_title.trim().to_string();
    
    // TODO: audio_title を使用して Audio インスタンスを作成する
    
    // TODO: video_title を使用して Video インスタンスを作成する
    
    // TODO: 両方のインスタンスで play() を呼び出す
}

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