まとめ:メディアプレーヤー
CoddyのRustジャーニー「オブジェクト指向プログラミング」セクションの一部。レッスン 34/61。
チャレンジ
簡単trait を通じて異なる media type が共通のインターフェースを共有できる仕組みを示す、シンプルな media player システムを構築しましょう!
コードを次の3つのファイルに分けて整理します。
playable.rs:呼び出されたときに出力を表示するplay(&self)method を持つ public なPlayabletrait を Define します。この trait は、すべての media type が have する共通の機能を表します。media.rs:trait を Implement する2つの public な struct を Create します。Audio:public なtitlefield(String)を持ち、再生するとPlaying audio: {title}を表示しますVideo:public なtitlefield(String)を持ち、再生するとPlaying video: {title}を表示します
main.rs:modules をまとめ、提供された inputs を使って両方の media type の instances を Create します。それぞれでplaymethod を Call し、同じ trait が media type に応じて異なる output を生成する仕組みを示します。
output は次の形式に従う必要があります。
Playing audio: {audio_title}
Playing video: {video_title}たとえば、inputs が Bohemian Rhapsody と The Matrix の場合:
Playing audio: Bohemian Rhapsody
Playing video: The Matrix2つの 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オンラインコンパイラ