Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

進捗 Work In Progress

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

Getter禁止...? むり

Slide 16

Slide 16 text

Rustわからん編

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

詰んだ

Slide 21

Slide 21 text

Rustで完遂厳しい編

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

else句厳禁 clippy「elseを書け」

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

次やること

Slide 27

Slide 27 text

次やること 頭をRustにする

Slide 28

Slide 28 text

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