まとめ:メディアプレーヤー
CoddyのRustジャーニー「Object Oriented Programming」セクションの一部 — レッスン 34/61。
チャレンジ
簡単トレイトを通じて、異なるメディアタイプがどのように共通のインターフェースを共有できるかを示す、シンプルなメディアプレーヤーシステムを構築しましょう!
コードは以下の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 Rhapsody と The 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() を呼び出す
}