RustのLT会! Rust入門者の集い #6 での発表資料です
Rustでオブジェクト指向エクササイズやってみたRoadagain
View Slide
自己紹介Roadagain (@ringoh72)メインの言語は特になし最近だったら多分JS系?Rustはかじった程度です
オブジェクト指向エクササイズオブジェクト指向できていますか? という発表(の資料)で知りました必然的にオブジェクト指向になる極度(Extreme)なコーディング規約原著に当たろうとしたらAmazonに在庫なし
オブジェクト指向エクササイズ1. 1つのメソッドにつきインデントは1段階まで2. else句を使用しないこと3. すべてのプリミティブ型をラップする4. 1行につきドットは1つまで5. 名前を省略しない6. すべてのエンティティを小さくする7. 1つのクラスにつきインスタンス変数は2つまで8. ファーストクラスコレクションを使用する9. Getter Setterを使用しない
blackjack.rsロジックが簡単大きなオブジェクトが少ない○ プレイヤー○ ディーラー○ 山札いけるやろ!
blackjack.rsロジックが簡単大きなオブジェクトが少ない○ プレイヤー○ ディーラー○ 山札いけるやろ! (いけませんでした)
進捗 Work In Progress
リポジトリhttps://github.com/Roadagain/blackjack.rs山札とスコア計算までは完成
感想オブジェクト指向わからんRustわからんRustで完遂厳しい気がする
感想代表例をピックアップ
オブジェクト指向わからん編
モジュール分解「大きいモジュールを分割しよう!」「これは分けられない、これも分けられない」「無理じゃん…」
Getter禁止...?手札からスコア計算しよう→Getterができる
Getter禁止...?ドローできるかどうかの判断をしよう→Getterができる
Getter禁止...?むり
Rustわからん編
extern crate外部モジュールを使うにはextern crateが必要←わかるモジュール内でやるとhoge::fugaみたいにできない←え?rootでextern crateするとhoge::fugaできる←マジか…
Score大迷走Aは1点としても11点としても振る舞うことができるAが入る特殊なスコア計算のために試行錯誤
Score大迷走enumが直和型らしいしそれ使おう→場合分けが面倒trait化しよう→合算のときに循環参照してしまう…特殊なケースってAだけじゃん→has_aceで判断する
詰んだ
Rustで完遂厳しい編
1行1ドット制限との戦いself.hoge ← これで1ドット→キリがないしいちいち代入すると読みにくくなる、許容標準入力のメソッドチェーン例: buf.split_whitespace().map(|n| u32::from_str(n).unwrap())→無理に分割する方が読みにくい、諦める
else句厳禁C++: ifは文Rust: ifは式
else句厳禁clippy「elseを書け」
注意点あくまで「コーディング規約を守ることが難しい」というだけオブジェクト指向できないわけではないむしろC++よりやりやすいのでは?
次やること
次やること頭をRustにする
次やることRustっぽい書き方を知るRustっぽい書き方に慣れるRustっぽいRustコードを書く