Menu
Coddy logo textTech

テキストコンポーネント

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

challenge icon

チャレンジ

簡単

前回のレッスンで作成した Draw トレイトを基に、最初の本格的なUIコンポーネントである TextField を追加しましょう。このコンポーネントは、ドキュメントシステムにおけるテキスト表示要素を表します。

新しいモジュールファイルを使用してプロジェクトを拡張します。

  • draw.rs: 前回のチャレンジで作成した Draw トレイトをそのまま保持します。
  • text_field.rs: パブリックな content フィールド(String 型)を持つ TextField 構造体を作成します。TextField に対して Draw トレイトを実装し、draw() を呼び出すと Text: {content} という特定の形式でテキストが出力されるようにします。
  • main.rs: 両方のモジュールを取り込み、TextField インスタンスを作成します。その draw() メソッドを呼び出してコンポーネントをレンダリングします。

text_field モジュールは draw モジュールの Draw トレイトを使用する必要があることに注意してください。両方のモジュールは同じクレートの一部であるため、crate::draw::Draw でアクセスできます。

以下の入力が提供されます:

  • テキストフィールドの内容を表す文字列

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

Text: Hello World

自分で試してみよう

mod draw;
mod text_field;

use draw::Draw;

pub struct Label {
    pub text: String,
}

impl Draw for Label {
    fn draw(&self) {
        println!("{}", self.text);
    }
}

fn main() {
    let mut input = String::new();
    std::io::stdin().read_line(&mut input).expect("Failed to read line");
    let content = input.trim().to_string();

    // TODO: TextFieldのインスタンスを作成し、その上でdraw()を呼び出す
}

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