Menu
Coddy logo textTech

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

CoddyのRustジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 34/61。

challenge icon

チャレンジ

簡単

trait を通じて異なる media type が共通のインターフェースを共有できる仕組みを示す、シンプルな media player システムを構築しましょう!

コードを次の3つのファイルに分けて整理します。

  • playable.rs:呼び出されたときに出力を表示する play(&self) method を持つ public な Playable trait を Define します。この trait は、すべての media type が have する共通の機能を表します。
  • media.rs:trait を Implement する2つの public な struct を Create します。
    • Audio:public な title field(String)を持ち、再生すると Playing audio: {title} を表示します
    • Video:public な title field(String)を持ち、再生すると Playing video: {title} を表示します
  • main.rs:modules をまとめ、提供された inputs を使って両方の media type の instances を Create します。それぞれで play method を Call し、同じ trait が media type に応じて異なる output を生成する仕組みを示します。

output は次の形式に従う必要があります。

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

たとえば、inputs が Bohemian RhapsodyThe Matrix の場合:

Playing audio: Bohemian Rhapsody
Playing video: The Matrix

2つの inputs、つまり audio title と video title が与えられます。

自分で試してみよう

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() を呼び出す
}

オブジェクト指向プログラミングのすべてのレッスン

自分で練習してみよう: Rustオンラインコンパイラ