Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Rustでオブジェクト指向エクササイズやってみた / OOP exercise in Rust
Search
Roadagain
November 26, 2018
Programming
0
420
Rustでオブジェクト指向エクササイズやってみた / OOP exercise in Rust
RustのLT会! Rust入門者の集い #6 での発表資料です
Roadagain
November 26, 2018
Tweet
Share
More Decks by Roadagain
See All by Roadagain
StorybookでモジュールモードのVuex storeを利用する / Use Modules mode Vuex store in Storybook
roadagain
0
1.1k
@slack/bolt on Cloud Functions for Firebase
roadagain
2
990
HL-Report コントラクト開発裏話 / Developing Contracts of HL-Report
roadagain
1
680
RegExp the lifehack
roadagain
0
110
Other Decks in Programming
See All in Programming
VS Code Update for GitHub Copilot
74th
2
660
#QiitaBash MCPのセキュリティ
ryosukedtomita
1
1.4k
なぜ適用するか、移行して理解するClean Architecture 〜構造を超えて設計を継承する〜 / Why Apply, Migrate and Understand Clean Architecture - Inherit Design Beyond Structure
seike460
PRO
3
780
Google Agent Development Kit でLINE Botを作ってみた
ymd65536
2
260
「テストは愚直&&網羅的に書くほどよい」という誤解 / Test Smarter, Not Harder
munetoshi
0
180
Composerが「依存解決」のためにどんな工夫をしているか #phpcon
o0h
PRO
1
270
ニーリーにおけるプロダクトエンジニア
nealle
0
870
PipeCDのプラグイン化で目指すところ
warashi
1
280
#kanrk08 / 公開版 PicoRubyとマイコンでの自作トレーニング計測装置を用いたワークアウトの理想と現実
bash0c7
1
790
ペアプロ × 生成AI 現場での実践と課題について / generative-ai-in-pair-programming
codmoninc
2
19k
おやつのお供はお決まりですか?@WWDC25 Recap -Japan-\(region).swift
shingangan
0
140
効率的な開発手段として VRTを活用する
ishkawa
0
150
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
462
33k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
740
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
45
7.5k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3.1k
Adopting Sorbet at Scale
ufuk
77
9.5k
The Power of CSS Pseudo Elements
geoffreycrofte
77
5.9k
Writing Fast Ruby
sferik
628
62k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Site-Speed That Sticks
csswizardry
10
690
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
29
9.6k
Statistics for Hackers
jakevdp
799
220k
Git: the NoSQL Database
bkeepers
PRO
430
65k
Transcript
Rustで オブジェクト指向エクササイズ やってみた Roadagain
自己紹介 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コードを書く