Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Rustでオブジェクト指向エクササイズやってみた / OOP exercise in Rust

Roadagain
November 26, 2018

Rustでオブジェクト指向エクササイズやってみた / OOP exercise in Rust

RustのLT会! Rust入門者の集い #6 での発表資料です

Roadagain

November 26, 2018
Tweet

More Decks by Roadagain

Other Decks in Programming

Transcript

  1. Rustで
    オブジェクト指向エクササイズ
    やってみた
    Roadagain

    View full-size slide

  2. 自己紹介
    Roadagain (@ringoh72)
    メインの言語は特になし
    最近だったら多分JS系?
    Rustはかじった程度です

    View full-size slide

  3. オブジェクト指向エクササイズ
    オブジェクト指向できていますか? という
    発表(の資料)で知りました
    必然的にオブジェクト指向になる極度(Extreme)な
    コーディング規約
    原著に当たろうとしたらAmazonに在庫なし

    View full-size slide

  4. オブジェクト指向エクササイズ
    1. 1つのメソッドにつきインデントは1段階まで
    2. else句を使用しないこと
    3. すべてのプリミティブ型をラップする
    4. 1行につきドットは1つまで
    5. 名前を省略しない
    6. すべてのエンティティを小さくする
    7. 1つのクラスにつきインスタンス変数は2つまで
    8. ファーストクラスコレクションを使用する
    9. Getter Setterを使用しない

    View full-size slide

  5. blackjack.rs
    ロジックが簡単
    大きなオブジェクトが少ない
    ○ プレイヤー
    ○ ディーラー
    ○ 山札
    いけるやろ!

    View full-size slide

  6. blackjack.rs
    ロジックが簡単
    大きなオブジェクトが少ない
    ○ プレイヤー
    ○ ディーラー
    ○ 山札
    いけるやろ! (いけませんでした)

    View full-size slide

  7. 進捗
    Work In Progress

    View full-size slide

  8. リポジトリ
    https://github.com/Roadagain/blackjack.rs
    山札とスコア計算までは完成

    View full-size slide

  9. 感想
    オブジェクト指向わからん
    Rustわからん
    Rustで完遂厳しい気がする

    View full-size slide

  10. 感想
    代表例をピックアップ

    View full-size slide

  11. オブジェクト指向わからん編

    View full-size slide

  12. モジュール分解
    「大きいモジュールを分割しよう!」
    「これは分けられない、これも分けられない」
    「無理じゃん…」

    View full-size slide

  13. Getter禁止...?
    手札からスコア計算しよう→Getterができる

    View full-size slide

  14. Getter禁止...?
    ドローできるかどうかの判断をしよう→Getterができる

    View full-size slide

  15. Getter禁止...?
    むり

    View full-size slide

  16. Rustわからん編

    View full-size slide

  17. extern crate
    外部モジュールを使うにはextern crateが必要←わかる
    モジュール内でやるとhoge::fugaみたいにできない←え?
    rootでextern crateするとhoge::fugaできる←マジか…

    View full-size slide

  18. Score大迷走
    Aは1点としても11点としても振る舞うことができる
    Aが入る特殊なスコア計算のために試行錯誤

    View full-size slide

  19. Score大迷走
    enumが直和型らしいしそれ使おう→場合分けが面倒
    trait化しよう→合算のときに循環参照してしまう…
    特殊なケースってAだけじゃん→has_aceで判断する

    View full-size slide

  20. Rustで完遂厳しい編

    View full-size slide

  21. 1行1ドット制限との戦い
    self.hoge ← これで1ドット
    →キリがないしいちいち代入すると読みにくくなる、許容
    標準入力のメソッドチェーン
    例: buf.split_whitespace().map(|n| u32::from_str(n).unwrap())
    →無理に分割する方が読みにくい、諦める

    View full-size slide

  22. else句厳禁
    C++: ifは文
    Rust: ifは式

    View full-size slide

  23. else句厳禁
    clippy「elseを書け」

    View full-size slide

  24. 注意点
    あくまで「コーディング規約を守ることが難しい」
    というだけ
    オブジェクト指向できないわけではない
    むしろC++よりやりやすいのでは?

    View full-size slide

  25. 次やること

    View full-size slide

  26. 次やること
    頭をRustにする

    View full-size slide

  27. 次やること
    Rustっぽい書き方を知る
    Rustっぽい書き方に慣れる
    RustっぽいRustコードを書く

    View full-size slide