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
リファクタリング・チャレンジ リバーシ編
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Yuki Yasoshima
May 16, 2020
Programming
210
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
リファクタリング・チャレンジ リバーシ編
Yuki Yasoshima
May 16, 2020
More Decks by Yuki Yasoshima
See All by Yuki Yasoshima
空間オーディオの活用
objectiveaudio
0
180
Swift Concurrency - 状態監視の罠
objectiveaudio
2
820
Swift Concurrencyとレースコンディション
objectiveaudio
2
800
モーダルの遷移を理解する
objectiveaudio
4
2.8k
オーディオ波形を表示するために知っておくべきこと
objectiveaudio
0
1.1k
AVAudioEngineでリアルタイムレンダリング
objectiveaudio
1
940
UIKitは2度ベルを鳴らす
objectiveaudio
0
360
iOSDC2018.pdf
objectiveaudio
1
2.4k
Objective-C++を使ってMRCで快適に開発する
objectiveaudio
0
24k
Other Decks in Programming
See All in Programming
Webフレームワークの ベンチマークについて
yusukebe
0
180
dRuby over BLE
makicamel
2
390
技術的負債解消で開発者の未来を開く- AIの力でコード刷新
kmd2kmd
0
120
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
Strategic Design in the Frontend: Moduliths & Micro Frontends @DDDEurope
manfredsteyer
PRO
0
130
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
180
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
260
The ROI of Quarkus for Spring Boot Applications
hollycummins
0
140
そのテスト、説明できますか?~LWテスト戦略FW~のご紹介
nakahara
0
170
Observability in Practice:Grafana 與 Edge Device SRE 的那些事
blueswen
0
180
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.8k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
2
260
Featured
See All Featured
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
1
2.1k
Discover your Explorer Soul
emna__ayadi
2
1.1k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
1.1k
The untapped power of vector embeddings
frankvandijk
2
1.8k
First, design no harm
axbom
PRO
2
1.2k
We Are The Robots
honzajavorek
0
260
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.6k
Redefining SEO in the New Era of Traffic Generation
szymonslowik
1
350
Visualization
eitanlees
152
17k
Thoughts on Productivity
jonyablonski
76
5.2k
Transcript
:VLJ:BTPTIJNB!ZBTP@TBO ϦϑΝΫλϦϯάɾνϟϨϯδ Ϧόʔγฤ IUUQTHJUIVCDPNPCKFDUJWFBVEJPSFWFSTJJPT
ԿΛϦϑΝΫλϦϯά͢Δͷ͔ w ͦΜͳʹ'BUͰͳ͍ͷͰʁ w ήʔϜͷίʔυͱͯͪ͠ΌΜͱཧ͞Ε͍ͯͳ͍ํ͕ʁ w ࣌ؒ࣠ํͷঢ়ଶཧ͕࠷ॏཁ w ઃܭύλʔϯΏΔ;ΘͰ w
֎෦ϥΠϒϥϦΘͳ͍ɻ7JFXʹखΛ͚ͭͳ͍
Ͳ͏ͬͯίʔυΛཧ͢Δ͔ w ίʔυΛ͋Δ͖ܗʹ͢ΔʢύλʔϯʹΊΔͷͰͳ͍ʣ w ᐆດ͞Λͳ͘͢ʢܕؔͷ࡞ΓํͳͲʣ w ҙຯ͕Θ͔ΔΑ͏ʹ͢Δʢ໊લͷ͚ํɺॲཧͷྲྀΕͳͲʣ w ͭΛղܾ͢Εผͷղܾ͘͢͠ͳΔ w
Ͳ͜·ͰΔ͔ཧͱ࣌ؒͱͷ݉Ͷ߹͍
ঢ়ଶͷཧ
େ·͔ͳঢ়ଶભҠ ήʔϜ݁Ռ ։࢝ 6*ͪ ૢ࡞ͪ ύεͪ ஔத Ϧηοτ MBVODIJOH QBTTJOH
PQFSBUJOH QMBDJOH SFTVMU ή ʔ Ϝ ऴ ྃ ήʔϜத ४උྃ ࣍ͷϓϨʔϠ͚ͩ ஔ͚ͳ͍ ύε͢Δ ϓϨʔϠަ ஔ͘ ͲͪΒ ஔ͚ͳ͍ ϓϨʔϠަ
ήʔϜͷঢ়ଶΛFOVNͰఆٛ enum State { case launching(side: Side) case operating(side: Side,
player: Player) case passing(side: Side) case placing(side: Side, positions: [Position]) case result(Result) case resetting, branching, next } w ڞ༻ܕͷFOVNͳΒ֤εςʔτ͝ͱʹඞཁͳ͚ͩΛ࣋ͯΔ
શମͷߏ
Ϋϥεߏ 7JFX$POUSPMMFS 1SFTFOUFS *OUFSBDUPS ݺͼग़͠ ݺͼग़͠ ௨ ௨ %BUB4UPSF อଘ
ಡΈࠐΈ w *OUFSBDUPSήʔϜͷঢ়ଶΛཧɻΞϓϦͷத৺ w 1SFTFOUFS*OUFSBDUPSͱ7$ͷڮ͠
ΦϒδΣΫτͷࢀর 7JFX$POUSPMMFS 1SFTFOUFS *OUFSBDUPS 4USPOH 8FBL w ສ͕Ұ7$͕κϯϏʹͳͬͯ*OUFSBDUPSͱܨ͕ͬͯͳ͚Ε༨ܭͳΠϕϯτ ΛແࢹͰ͖Δ γϯάϧτϯ
ࡉ͔͍ίʔυͷཧͷྫ
OFYU5VSO ϦϑΝΫλϦϯάલ func nextTurn() { guard var turn = self.turn
else { return } turn.flip() if validMoves(for: turn).isEmpty { if validMoves(for: turn.flipped).isEmpty { self.turn = nil // ...ॲཧ͍Ζ͍Ζ } else { self.turn = turn // ...ॲཧ͍Ζ͍Ζ } } else { self.turn = turn // ...ॲཧ͍Ζ͍Ζ } } w UVSO͕OJMͰདྷͯྑ͍ͷ͔ʁ w UVSOͷঢ়ଶ͕Θ͔Γʹ͍͘ w ذͨ͠ޙͷॲཧ͕ଟ͍
OFYU5VSO ϦϑΝΫλϦϯάத w UVSOΛTJEFʹͯ͠OJMΛ࠷ ॳ͔Βআ֎ w DVSSFOUͱOFYUʹ͚Δ w CPBSEͰWBMJE.PWFT w
ذͨ͠ޙͷॲཧ࣍ͷ εςʔτΛฦ͚ͩ͢ func nextTurnState(from currentSide: Side) -> State { let nextSide = currentSide.flipped if board.validMoves(for: nextSide).isEmpty { if board.validMoves(for: currentSide).isEmpty { return .result(board.result()) } else { return .passing(side: nextSide) } } else { return .operating(side: nextSide, player: player(for: nextSide)) } }
OFYU5VSO ϦϑΝΫλϦϯάޙ w WBMJE.PWFTJT&NQUZ ΛDBO1MBDFʹஔ͖͑ w ωετΛઙ͘͢Δ func nextTurnState(from currentSide:
Side) -> State { let nextSide = currentSide.flipped if board.canPlace(for: nextSide) { return .operating(side: nextSide, player: player(for: nextSide)) } else if board.canPlace(for: currentSide) { return .passing(side: nextSide) } else { return .resulting(board.result()) } }
·ͱΊ w Կͳ͘ͱঢ়ଶཧ w ঢ়ଶ͕ཧͰ͖ΕߟྀෆΛݟ͚͍ͭ͢ w ᐆດ͞Λল͘ɺҙຯ͕௨͡Α͏ʹ͢Δ w 7JFX$POUSPMMFS7JFXΛཧ͢Δ͚ͩɻΞϓϦͷຊମผ IUUQTHJUIVCDPNPCKFDUJWFBVEJPSFWFSTJJPT