目次

Rustの勉強[RustのOOP その3]

ぎじゅつ

はじめに

#

NO IMAGEThe Rust Programming Language 日本語版 - The Rust Programming Language 日本語版
を読んでいる

  • 早起きした
  • 久々にこの体調を経験したが二度とやりたくない
    • 寝たのに全然体は起きない
    • 現場仕事していた時期からそう

お勉強

#

NO IMAGEトレイトオブジェクトで異なる型の値を許容する - The Rust Programming Language 日本語版

  • これっぽい

NO IMAGEオブジェクト指向デザインパターンを実装する - The Rust Programming Language 日本語版

  • こっちだった

メモ

#

ステートパターンは、オブジェクト指向デザインパターンの1つです。 このパターンの肝は、値が内部的に持つことができる状態の集合を定義するということです。

  • ステートレスなんて話よく聞くから今なら馴染むな
  • Mutexとかこれで使えそうだよな
pub struct Post {
    state: Option<Box<dyn State>>,
    content: String,
}

impl Post {
    pub fn new() -> Post {
        Post {
            state: Some(Box::new(Draft {})),
            content: String::new(),
        }
    }
}

trait State {}

struct Draft {}

impl State for Draft {}
  • このdynやってない気がする
  • んー言うことないな
    • 結局、Javaの継承の思考と同じ
    • クラスやインターフェースの役割をトレイトが担ってるからtrait boundでエラーが起きないようにする
  • 強いて言うならトレイトの振る舞いがgetter、setterの脳死実装じゃないからちゃんと仕組み化してあることぐらい
  • how toすぎるので実装する時に調べればいいな
  • もう一つのパターンがあるらしい
pub struct Post {
    content: String,
}

pub struct DraftPost {
    content: String,
}

impl Post {
    pub fn new() -> DraftPost {
        DraftPost {
            content: String::new(),
        }
    }

    pub fn content(&self) -> &str {
        &self.content
    }
}

impl DraftPost {
    pub fn add_text(&mut self, text: &str) {
        self.content.push_str(text);
    }
}
  • 俺だったらこっちで書くな

まとめ

#
  • 特に目新しいことはない

    • 当たり前、というかやって理解してきたことが書いてあった
  • いろんな2〜3年で色々な職場みたけどこの思想を持った実装に出会ったことないなと思った

    • 辛いね
  • 次ここ、長いな

NO IMAGEオブジェクト指向デザインパターンを実装する - The Rust Programming Language 日本語版