Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
refactoring.pdf
Search
Akinori IKEDA
January 20, 2015
Programming
38
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
refactoring.pdf
Presentation materials of refactoring, requested in the Kyoto.
Akinori IKEDA
January 20, 2015
Other Decks in Programming
See All in Programming
R8 の設定見直しでアプリサイズ削減
andpad
0
220
Railsのためのパスキー実践入門 〜マルチテナントSaaSでの意思決定〜
utakaha
2
600
RAG の “R” を Swift で覗いてみる 〜「意味から探す」検索の仕組み〜
nao_randd
0
160
複雑なUIコンポーネントとの ⻑い付き合い⽅:波及するバグからテスト戦略を経て、安全な再設計へ
mixplace
0
420
半永久的に提供し続けられるプライベートクラウドを目指して ― 利用者の認知負荷を抑えるAPI抽象化とハードウェア世代交代の基盤設計
tomokon
0
500
Rでドレミ/Do-Re-Mi_with_R
florets1
0
130
ジョジョの世界をXRで再現する
mofurune
0
170
C#の現在地 進化の歴史と、AI時代の.NET Everywhere
neuecc
5
5.2k
コーディング自動化の次へ。人の介入をゼロにするファクトリーとサポートAIによる実践
timakin
5
3.7k
sbt 2.0: takeoff
eed3si9n
0
160
動作中のプログラムの中身をリアルタイムに覗く / Realtime Debugger for CSharp with Roslyn
prota
1
1.9k
作れる、でも消せるか?──安全に「枯らして消す」機能削除術 / Drain, Then Delete
chobishiba
2
710
Featured
See All Featured
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
630
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
2
410
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
How to Talk to Developers About Accessibility
jct
2
580
Large-scale JavaScript Application Architecture
addyosmani
516
110k
Bridging the Design Gap: How Collaborative Modelling removes blockers to flow between stakeholders and teams @FastFlow conf
baasie
0
730
The SEO Collaboration Effect
kristinabergwall1
1
590
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
280
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
360
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.6k
How to Build an AI Search Optimization Roadmap - Criteria and Steps to Take #SEOIRL
aleyda
1
2.2k
Transcript
# refactoring ϦϑΝΫλϦϯά * मਖ਼Ͱͳ͍ ֦ுͰͳ͍ * ϓϩάϥϜΛ֎෦ࢹͰಈ࡞Λม͑ͣɺ෦ߏΛཧ͢Δ͜ͱ * ·ͩ·ͩൃల్্ͳٕज़(ιϑτΣΞશͯൃల్্ͱݴ͑Δ)
t C # ΑΓίʔυ * Ұਖ਼ৗʹಈ͍ͨͱࢥ͑Διʔείʔυೋͱ৮Δͳ->जΕΛѻ͏ * ͜Εόά͕ग़ͳ͍Α͏ʹ͢Δઌਓͷܙ * ୯ҐͷϓϩδΣΫτͰ
·͊ɺͳΔ΄Ͳͱ * ʑมΘΔཁٕ݅ज़͕௨ৗͱͳ͍ͬͯΔঢ়گ͡Όҙຯͷͳ͍ݴ༿ʹͳΓͭͭ͋Δ͔
# Code smell * ष͏ΑʂةݥͳχΦΠ͕ιʔείʔυ͔Β͢ΔΑʂ
# ष͍ͷͱʁ * ॏෳͨ͠ίʔυ * ͗͢Δϝιου * ڊେͳΫϥε * ଞΫϥεͷϝιουΛաʹ༻͍Δ
* ෆదͳґଘؔ * αϒΫϥεͷͤ͘ʹεʔύʔΫϥεΛແࢹͯ͠ͳ͍͔ʁ * ͦΕɺΦʔόϥΠυͰͳ͘ɺஔ͖͑Ͱʁ * ಉҰ͋Δ͍ಉ༷ͷϝιου͕ෳՕॴʹଘࡏ͠ͳ͍͔ʁ * ؆ܿͳઃܭͰेͳͱ͜ΖʹɺաʹෳࡶͳσβΠϯύλʔϯ * ୯७ʹΘ͚Θ͔ΒΜ 1+2*3 ͱ (1+2)*3 ͱ 1+(2*3)
# How to ͷҰྫ * ࡉԽ(Class / method) ͍ίʔυͦΕ͚ͩͰେม /
Ͱ͔͍Ϋϥεඞ͍ͣͼͭͳܗΛ͍ͯ͠Δ * ؔ࿈ͷҰํԽ ͦͷࢀরඞཁͳͷͩΖ͏͔ʁΦϒδΣΫτࢀর͞Ε͍ͯΔؒੜ͖ଓ͚Δ * ݅ذͷϙϦϞʔϑΟζϜԽ ܧঝҕৡͰ݅ͱͳΔՕॴΛผʹΓ͚Δ * ܧঝ(is-a)Λҕৡ(has-a/use-a) ՄೳͰ͋ΕΔ ذͱ݅ΛΓ͚Δ ੩తܕݴޠͱͯ͠ͷܧঝ݁ߏ੍͕ଟ͍ * ૄ݁߹ͱີ݁߹ ґଘؔग़དྷΔݶΓ࠷খʹ͠Α͏ (javaͱ͔ͳΒɺඇδΣωϦοΫͳimportͷͱ͔ɺͦͷԆͷมͱ͔ࢦඪͷҰͭʹͳΔ) * όϦϡʔΦϒδΣΫτ සൟʹݟΒΕΔಉ͡ҾύλʔϯΛ·ͱΊ໊ͯલΛ͚ͭͯ͋͛Δ * ໊শมߋ ໊લ͕Πέͯͳ͍ͷɺม͑Α͏Α
t # ͦͦ * ϦϑΝΫλϦϯάʹݟ͑ͯ࡞ۀਐḿ͠ͳ͍ɺڪΒ͘θϩ * Ԙ௮͚ཁ͕݅ग़དྷͳ͍->ϓϩάϥϜमਖ਼->εύήοςΟͰΘ͔Μͳ͍Αʂ * ίετߴ͘ͳΔΑ->Θ͔Γ͘͢͠Α͏->ϦϑΝΫλϦϯά͠·ʔ͢ *
ϦϑΝΫλϦϯάʹ͔͚Δίετʁʁʁ * ͓٬͞·ᐌ͘ɺʮ࠷ॳ͔ΒͪΌΜͱͯ͠Εͦͷίετ͍Βͳ͍ΑͶʯ(ཁ݅ସ͑Δͤ͘ʹ࠷ॳ͔Βͬͯ…ཁΦτφͷରԠ) * ࡞ۀ͡Όͳ͍ΜͩΑɺۭؾͳΜͩΑɺͦ͏ࢥ͏ͷ͕ϓϩͩ͠ɺΧΠθϯͬͯͦ͏͍͏͜ͱͩΑͶ
# test! test!! test!!! * est! est!! est!!! ΠλϦΞനϫΠϯͷฑͷҰͭͰ͢ *
ಈ࡞͕มΘ͍ͬͯͳ͍อূςετ݁Ռ͔͠ͳ͍ * େͳܭըͱ৻ॏͳߦಈ * ͱʹ͔͘গͣͭ͠ϢχοτςετલఏͰ
i # ෆ۰ͷ࣌ * ੲͦΜͳ͜ͱΛ͢Δඞཁ͕͋ΔίʔυΛॻ͘͜ͱࣗମ͕ѱ * ͘ྫྷ۰͞Εͳ͘ͳͬͨख๏ͷҰͭ(ඞཁੑ݁ߏײ͡ΒΕ͍ͯͨ) * ͨͩɺಈత࣮ߦͰܕ͕ͳ͘ɺϥΠϒϥϦͷίʔυΛಡΉͷ͕ͨΓલͷੈքͩͬͨSmalltalkͱ͔ͩͱɺϦϑΝΫλ;ͭ͏ͷίτͩͬͨ(ϦϑΝΫλϦϯά͕ϓϩάϥϛϯά࡞ۀͷΈ͍ͨͳײ֮) *
ઃܭॻΛςετۦಈܕTDDΛϕʔεͱ͢Δํ๏ͰޡຐԽ͢͜ͱͰXPԽ͕Ճ͞ΕͯΠΠΧϯδ͔ * ϏϔΠϏΞۦಈܕBDD(ςετίʔυͷΫϥε໊ͱ͔ม໊ͱ͔ʹཁٻ༷Λॻ͘Α͏ͳҙࣝ=ࣗવݴޠʹۙͮ͘(ӳޠ͚ͩͲ))͕͖Ͱ͢
gm g # ख๏ͱखஈ * खஈ৭͍Ζ͋Δ(ओͳ߲લड़ͷͱ͓ΓɺͲͧ͜ͷΞΧσϛοΫͳҒ͍ਓ70௨Γߟ͑ͯ͘ΕͯΔ͔Βɺԕྀͳ͘ωοτͰݕࡧͯͦ͠ΕΛ͍·͠ΐ͏ɺंྠͷ࠶ൃ໌͍Βͳ͍Ͱ͢) * ରͷߜΓ͜Έํ๏ܾ·ͬͨɺΓํͳΜͱͳ͋͘ΔͬͯͩɺΜ͡ΌɺΕΔ͔ʁ
w C w C w C # ༧ઢΛுΓ·͢ * ͔͜͜Βͷ͍(ख๏)ͷͰ͢ɺҟೝΊ·͕͢ɺ·ͣฉ͍ͯ͘Ε
* ҟೝΊΔ͕ɺࠓٞΛ;͔͚ͬΔͷΊͯ͘Ε * Ͱ͖ΕٞདྷੈͰ… * ҼΈʹ݁͋Γ·ͤΜɺฉ͍ͯཉ͍͚ͩ͠Ͱ͢
# όοΫάϥϯυ * ྫ͑ɺιʔείʔυΛݟΔͱϝϯόʔͷ୭͕ॻ͍ͨͷ͔ɺ60%Ґͷ֬ͰΔΜ͡Όͳ͍͔ʁ * 40%εέδϡʔϧʹΘΕ͍ͯΔͱ͔Πϥοͱͯ͠Δͱ͔(ɹʆд´) şŕ!ͱ͔͓ͬͯΔͱ͔ * 60%ʁιϨԿނʁ୲ऀͷόοΫάϥϯυ͕ग़͍ͯΔ *
ໟ͔݀Βʹ͡Έग़ΔोΈ͍ͨʹ * ͦΕɺϘΩϟϒϥϦɺᅂɺड͚ͨڭҭɺͦͷଞϞϩϞϩ
o o # ੩తߏͱಈతߏ * फڭͱ੩తߏɺಈతߏͷؔͬͯݟํ͕͋Δ * फڭΛ͢ΔͭΓͰͳ͘ɺߏͷͰ͢ * ͦͦπϦʔߏͲͪΒ͔ͱݴ͏ͱ།ҰਆΩϦετڭɺϐϥϛουߏ
* ਆΦϒδΣΫτ(ͳΜͰ࣋ͬͯΔ)ͷ࣮ࡏ݁ߏ͋Δ * ΞϦετςϨεͷΠσΞͬͯͬͯ·͔͢ʁ * ീඦສͷਆʑͱ͔Λͬͯଚ͠ͱͳ͢ͱ͔ຊจԽνοΫ ീඦສͷਆʑΛҰͭʹͯ͠ਆΦϒδΣΫτΛΔͱͱΜͰͳ͍͜ͱʹͳΔ͆ * ڭჭᣡཏ༷͍ͬͺ͍͍Δ * Ͳ͏ɺ༸ͱ౦༸ͷ͕ࠩ͋ΔΈ͍ͨ(ܧঝͱҕৡ) * ࠷ۙͷ࡞ۀΛৼΓฦͬͯɺΫϥεͷߏؔͱ͔ಈ࡞࣌ͷΦϒδΣΫτؔͱ͔Ͳ͏ʁ
rn la # දݱͱൺᄻ * ຊޠͬͯɺදݱํ๏͕ੌ·͍͡ * ྫ͑ɺӍ ** ໄӍɺখߙ(͜͵͔)ӍɺখӍ:
Ӎͷਫణͷܗঢ়Λࢦͨ͠ݴ༿ ** ࣌Ӎ(;ͬͨΓΜͩΓ)ɺʹΘ͔Ӎ(͙͢ʹΉ): Ӎͷঢ়گ(߱Γํ)Λࢦͨ͠ݴ༿ ** य़Ӎɺޒ݄ӍɺകӍɺळӍɺ༦ཱ: ࣌ؒقઅΛؚΈ࣋ͭ͜ͱʹͳͬͨݴ༿ * Ͱɺྫ͑ɺޒ݄Ӎ ** കӍ࣌ظͷӍͷ͜ͱ ** όϥόϥͱஅଓతͳ͜ͱ ** ຊւ܉ۦஞ؋ɺ؋͜Εͷ؋໊ͳͷউखʹ͍ٞͯͩ͘͠͞
# ϨτϦοΫ * ᄻ: َͷΑ͏ʹڧ͍(َͷΓ߹͍ډͳ͍͚ͲɺԿͱͳ͔͘Δ)(َΈ͍ͨͳਓͷΓ߹͍݁ߏ͍Δ) ྨࣅੑΛ࣋ͭԿ͔ʹྫ͑Δ * Ӆᄻ: (ϜεΧ)ݟΖʂਓ͕ΰϛͷΑ͏ͩ(ੜ͝Έͱ͔ݴ͍ͬͯΔͷͰͳ͘ɺΰϛΫζͷΑ͏ʹେྔͰࣺͯΒΕ͍ͯΔΑ͏ͳײ͡(͔ͨ͠ɺ࣮ࡍམ͍ͪͯͨ)) ϝλϑΝʔͱ͍͏ͷίϨͷ͜ͱɺᄻΛߋʹ؆ܿʹͨ͠ײ͡
* ᄻ: ͖ͣΜͪΌΜ(গঁ͕͍಄ۊΛඃ͍ͬͯΔͷͰ͋Γɺ͍಄ۊʹࣅ͍ͯΔͷͰͳ͍ɺҼΈʹനઇඣ(ઇͷΑ͏ʹന͍ഽͷ͓ඣ༷)Ӆᄻ * ఏᄻ: ηϩςʔϓ(͋ΔͷΛߋʹҰൠతͳݴ͍ํͰݴ͍͑Δ) * ๏େֶ ཧֶ෦ ੜՊֶՊ ڭत ۄҪ༤ ࢯ * ژ࢈ۀେֶ ίϯϐϡʔλཧֶ෦ ίϯϐϡʔλαΠΤϯεֶՊ ڭत ੨३ ࢯ
la H # ൺᄻͱΦϒδΣΫτࢦ * ΦϒδΣΫτࢦʹݴ͍͑Δͱɺ ** ᄻ=ू=has-a(part-of)=நσʔλܕ ** ఏᄻ=ҰൠԽ=is-a(kind-of)=ΠϯϔϦλϯε
** Ӆᄻ=ϙϦϞʔϑΟζϜ
H o c # ΦϒδΣΫτࢦతʹ৺͕͚Δίτͱ͔ * ΧϓηϧԽ(ఆٛ৭ʑ͋Δ͚ͲɺσʔλӅṭͰ) * ඒຯ͍͠ϋϯόʔάͷ͓ళ *
قͷೖͬͨίοΫ͞Μͷٕ * ࣮ϨτϧτύοΫͩͬͨΓͯ͠ * ඒຯ͍͠ϋϯόʔάͱ͍͏ཁٻʹԠ͍͑ͯΔ * ͖Ε͍ͳ͓Ͷʔ͞ΜͷډΔ͓ళ * ࣮୴ಹࢠ࣋ͪ->ͳ͍ɺӕͰͳ͍ * ࣮உ->͓Ͷʔ͞ΜͷఆٛΛ͏Ұ * ඒܗ͕ډΔ->உঁผ࣋ͪग़͍ͯ͠ͳ͍ͷͰηʔϑ͕ͩɺίϯςΩετ͕ * ίϯςΩετͬͯʁ * ·͊ɺจ຺ɻϥʔϝϯ৯ͬͨޙʹɺAళඒຯ͍͔͠Βࠓߦ͜͏ͱݴΘΕͨAళ͕ϋϯόʔάͩͬͨΒɺͦΕҧ͏ͩΖ
o c # ίϯςΩετతʹ৺͕͚Δίτͱ͔ * ࣮ՈͷۙॴͰԼͷ໊લͰ௨ΔɺබࣈΛ໊Δඞཁ΄΅ͳ͍ * ࣮Ոݍ(2km?)͔Βग़Δͱ௨༻͠ͳ͍ * ߋʹ໊ࣾͱ͔ݞॻͱ͔
* ߋʹࠃͱ͔ * ͋ΔྖҬൣғͰ໋໊ͯ͘ͳ͍ * ຊʹʁ * public͡Όͳ͚Ε… * privateϝιουͷதͷϩʔΧϧมͳΜͯͳΜͰ͍͍͡ΌΜ * Ͱɺͦͷϝιουɺ1000͍ۙεςοϓ * privateϝιουͷϩʔΧϧมͷఆٛʹՃ͢Δͷ͕ग़ͯ͘Δ * దͳ໊শΛ͚Δ͖ vs ͍ͷ͕ͦͦมͩΖ
f! ds e: # ࡶײ:ඞཁͩͱࢥ͍ͬͯΔίτ * ಡॻ: ٕज़ॻͰ৽ฉͰখઆͰϚϯΨͰԿͰ͍͍ɺͱʹ͔͘ϘΩϟϒϥϦΛ૿ͤ * өըͱ͔Ͱྑ͍ɺදݱྗ૿ͦ͏
* ٕज़ݪॻΛಡΜͩ͜ͱ͋Γ·͔͢ʁ։ൃํ๏ͷจॻͰγΣΠΫεϐΞͰྫ͑ΒΕͯཧղͰ͖·͔͢ʁ * ӳޠ͔ͩΒΘ͔Βͳ͍ͱͨΓલͷΑ͏ʹݴ͏ͳɺԶͩͬͯΘ͔Μͳ͍͔ΒࣙॻҾ͍ͯΔΑ * ҼΈʹɺεϖϧϛεஏ͔͍͔ͣ͠ΒҙͤΑ * ΄Μͱ͏ͷҙຯͰͷଟࠃ੶νʔϜͷ։ൃΛૣ͘ܦݧ͠Α͏ɺϝϯόʔؒͷߟ͑ํͷ֨ࠩʹโવ * Ͱ͖Εɺֶͷ͕ࣝ͋Δͱ໘ന͘ͳΔͱࢥ͏ɺཧతͳߟΛڧ͍ΒΕΔ͔Β * ͨ·ʹҊ݅Ͱඞཁͳ͜ͱ(ۚ༥ͱ͔)ɺ࣮ࡍɺͱ͋ΔҊ݅ͰMD5ϋογϡ҉߸ԽॲཧΛjavaͰॻ͍ͨͱ͖ʹɺjava.lang.mathͱ͔͍·ͨ͠(͔ͨ͠ɺࡾ֯ؔʁɺsin͔ͩͬͨͱ) * ϋπʔຊʹཔΔͳɺ͑ͷΈͳΒͣɺ͑ͷ୳͠ํඞཁͳίτͰ͢ * ϚωδϝϯτʹʮϋΠʯͱฦࣄ͠Ζɻͯࣗ͠ͷ͕࣌ؒΒΕΔ͚ͩͩ * ࣗݾओுͱൃҧ͏ * આ໌͢Δ͖͕ͩɺΞϗͳ࣭ʹʮάάΕʯͰेɻແࡑɻ͔ͭɺ૬खɺ͜ͷۀքͷਓͩΑͶʁ * ߟ͑ํͷస: ਓؒݪཧӉͬͯͬͯ·͔͢ʁ * ҥ৯ॅΓͯྱઅΛΔɺ͋ͱɺਭ͔ͳ * ॴḨɺ͜ͷੈञͱۚ