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 Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  7. 進捗
    Work In Progress

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. Getter禁止...?
    むり

    View Slide

  16. Rustわからん編

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  20. 詰んだ

    View Slide

  21. Rustで完遂厳しい編

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  26. 次やること

    View Slide

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

    View Slide

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

    View Slide