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
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
830
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
Hatena Engineer Seminar #37「言語モデルの活用に関する研究」
slashnephy
0
510
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
110
才能?センス?知らん、 続けたもん勝ちだ。-- 結婚・出産・癌を越えてなお、私がプロダクトを創り続ける理由
16bitidol
2
840
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
140
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
260
Vite+ Unified Toolchain for the Web
naokihaba
0
740
鹿野さんに聞く!『TypeScriptコードレシピ集』で磨く実践力
tonkotsuboy_com
4
1.1k
アルゴリズムは何を圧縮しているのか ─ Haskell から育った「圧縮代数」というメンタルモデル
naoya
16
3.3k
コーディングルールの鮮度を保ちたい for SRE NEXT 2026 / keep-fresh-go-internal-conventions-sre-next-2026
handlename
0
140
Honoでのサプライチェーン侵害対策 〜 3つのライブラリに学ぶ
yusukebe
7
1.8k
これからAgentCoreを触る方へトレンドはGatewayです
har1101
6
480
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
12
4.7k
Featured
See All Featured
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
35
3.6k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Done Done
chrislema
186
16k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
880
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Stewardship and Sustainability of Urban and Community Forests
pwiseman
0
280
sira's awesome portfolio website redesign presentation
elsirapls
0
300
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
690
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Embracing the Ebb and Flow
colly
88
5.1k
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
190
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