Upgrade to Pro — share decks privately, control downloads, hide ads and more …

refactoring.pdf

 refactoring.pdf

Presentation materials of refactoring, requested in the Kyoto.

Avatar for Akinori IKEDA

Akinori IKEDA

January 20, 2015

Other Decks in Programming

Transcript

  1. # ष͍ͷ΋ͱ͸ʁ * ॏෳͨ͠ίʔυ * ௕͗͢Δϝιου * ڊେͳΫϥε * ଞΫϥεͷϝιουΛա౓ʹ༻͍Δ

    * ෆద੾ͳґଘؔ܎ * αϒΫϥεͷͤ͘ʹεʔύʔΫϥεΛແࢹͯ͠ͳ͍͔ʁ * ͦΕɺΦʔόϥΠυͰ͸ͳ͘ɺஔ͖׵͑Ͱ͸ʁ * ಉҰ͋Δ͍͸ಉ༷ͷϝιου͕ෳ਺Օॴʹଘࡏ͠ͳ͍͔ʁ * ؆ܿͳઃܭͰे෼ͳͱ͜Ζʹɺա৒ʹෳࡶͳσβΠϯύλʔϯ * ୯७ʹΘ͚Θ͔ΒΜ 1+2*3 ͱ (1+2)*3 ͱ 1+(2*3)
  2. # How to ͷҰྫ * ࡉ෼Խ(Class / method) ௕͍ίʔυ͸ͦΕ͚ͩͰେม /

    Ͱ͔͍Ϋϥε͸ඞ͍ͣͼͭͳܗΛ͍ͯ͠Δ * ؔ࿈ͷҰํ޲Խ ͦͷࢀর͸ඞཁͳͷͩΖ͏͔ʁΦϒδΣΫτ͸ࢀর͞Ε͍ͯΔؒੜ͖ଓ͚Δ * ৚݅෼ذͷϙϦϞʔϑΟζϜԽ ܧঝ΍ҕৡͰ৚݅ͱͳΔՕॴΛผʹ੾Γ෼͚Δ * ܧঝ(is-a)Λҕৡ(has-a/use-a)΁ ՄೳͰ͋Ε͹΍Δ ෼ذͱ৚݅Λ੾Γ෼͚Δ ੩తܕݴޠͱͯ͠ͷܧঝ͸݁ߏ੍໿͕ଟ͍ * ૄ݁߹ͱີ݁߹ ґଘؔ܎͸ग़དྷΔݶΓ࠷খʹ͠Α͏ (javaͱ͔ͳΒɺඇδΣωϦοΫͳimportͷ਺ͱ͔ɺͦͷԆ௕ͷม਺ͱ͔ࢦඪͷҰͭʹͳΔ) * όϦϡʔΦϒδΣΫτ සൟʹݟΒΕΔಉ͡Ҿ਺ύλʔϯΛ·ͱΊ໊ͯલΛ͚ͭͯ͋͛Δ * ໊শมߋ ໊લ͕Πέͯͳ͍ͷɺม͑Α͏Α
  3. t # ͦ΋ͦ΋࿦ * ϦϑΝΫλϦϯά͸໨ʹݟ͑ͯ࡞ۀਐḿ͠ͳ͍ɺڪΒ͘θϩ * Ԙ௮͚ཁ͕݅ग़དྷͳ͍->ϓϩάϥϜमਖ਼->εύήοςΟͰΘ͔Μͳ͍Αʂ * ίετߴ͘ͳΔΑ->Θ͔Γ΍͘͢͠Α͏->ϦϑΝΫλϦϯά͠·ʔ͢ *

    ϦϑΝΫλϦϯάʹ͔͚Δίετ͸ʁʁʁ * ͓٬͞·ᐌ͘ɺʮ࠷ॳ͔ΒͪΌΜͱͯ͠Ε͹ͦͷίετ͍Βͳ͍ΑͶʯ(ཁ݅ସ͑Δͤ͘ʹ࠷ॳ͔Βͬͯ…ཁΦτφͷରԠ) * ࡞ۀ͡Όͳ͍ΜͩΑɺۭؾͳΜͩΑɺͦ͏ࢥ͏ͷ͕ϓϩͩ͠ɺΧΠθϯͬͯͦ͏͍͏͜ͱͩΑͶ
  4. # test! test!! test!!! * est! est!! est!!! ͸ΠλϦΞനϫΠϯͷ໏ฑͷҰͭͰ͢ *

    ಈ࡞͕มΘ͍ͬͯͳ͍อূ͸ςετ݁Ռ͔͠ͳ͍ * େ୾ͳܭըͱ৻ॏͳߦಈ * ͱʹ͔͘গͣͭ͠ϢχοτςετલఏͰ
  5. i # ෆ۰ͷ࣌୅ * ੲ͸ͦΜͳ͜ͱΛ͢Δඞཁ͕͋ΔίʔυΛॻ͘͜ͱࣗମ͕ѱ * ઴͘ྫྷ۰͞Εͳ͘ͳͬͨख๏ͷҰͭ(ඞཁੑ͸݁ߏײ͡ΒΕ͍ͯͨ) * ͨͩɺಈత࣮ߦͰܕ͕ͳ͘ɺϥΠϒϥϦͷίʔυΛಡΉͷ͕౰ͨΓલͷੈքͩͬͨSmalltalkͱ͔ͩͱɺϦϑΝΫλ͸;ͭ͏ͷίτͩͬͨ(ϦϑΝΫλϦϯά͕ϓϩάϥϛϯά࡞ۀͷ൒෼Έ͍ͨͳײ֮) *

    ઃܭॻΛςετۦಈܕTDDΛϕʔεͱ͢Δํ๏ͰޡຐԽ͢͜ͱͰXPԽ͕Ճ଎͞ΕͯΠΠΧϯδ͔΋ * ๻͸ϏϔΠϏΞۦಈܕBDD(ςετίʔυͷΫϥε໊ͱ͔ม਺໊ͱ͔ʹཁٻ࢓༷Λॻ͘Α͏ͳҙࣝ=ࣗવݴޠʹۙͮ͘(ӳޠ͚ͩͲ))͕޷͖Ͱ͢
  6. w C w C w C # ༧๷ઢΛுΓ·͢ * ͔͜͜Β͸๻ͷ૝͍(ख๏)ͷ࿩Ͱ͢ɺҟ࿦͸ೝΊ·͕͢ɺ·ͣ͸ฉ͍ͯ͘Ε

    * ҟ࿦͸ೝΊΔ͕ɺࠓ೔ٞ࿦Λ;͔͚ͬΔͷ͸΍Ίͯ͘Ε * Ͱ͖Ε͹ٞ࿦͸དྷੈͰ… * ҼΈʹ݁࿦͸͋Γ·ͤΜɺฉ͍ͯཉ͍͚ͩ͠Ͱ͢
  7. o o # ੩తߏ଄ͱಈతߏ଄ * फڭͱ੩తߏ଄ɺಈతߏ଄ͷؔ܎ͬͯݟํ͕͋Δ * फڭ࿦Λ͢Δͭ΋ΓͰ͸ͳ͘ɺߏ଄ͷ࿩Ͱ͢ * ͦ΋ͦ΋πϦʔߏ଄͸ͲͪΒ͔ͱݴ͏ͱ།ҰਆΩϦετڭɺϐϥϛουߏ଄

    * ਆΦϒδΣΫτ(ͳΜͰ΋࣋ͬͯΔ)ͷ࣮ࡏ͸݁ߏ͋Δ * ΞϦετςϨεͷΠσΞ࿦ͬͯ஌ͬͯ·͔͢ʁ * ീඦສͷਆʑͱ͔࿨Λ΋ͬͯଚ͠ͱͳ͢ͱ͔೔ຊจԽνοΫ ീඦສͷਆʑΛҰͭʹͯ͠ਆΦϒδΣΫτΛ΍ΔͱͱΜͰ΋ͳ͍͜ͱʹͳΔ͆ * ෹ڭჭᣡཏ΋෹༷͍ͬͺ͍͍Δ * Ͳ͏΋ɺ੢༸ͱ౦༸ͷ͕ࠩ͋ΔΈ͍ͨ(ܧঝͱҕৡ) * ࠷ۙͷ࡞ۀΛৼΓฦͬͯɺΫϥεͷߏ଄ؔ܎ͱ͔ಈ࡞࣌ͷΦϒδΣΫτؔ܎ͱ͔Ͳ͏ʁ
  8. rn la # දݱͱൺᄻ * ೔ຊޠͬͯɺදݱํ๏͕ੌ·͍͡ * ྫ͑͹ɺӍ ** ໄӍɺখߙ(͜͵͔)ӍɺখӍ:

    Ӎͷਫణͷܗঢ়Λࢦͨ͠ݴ༿ ** ࣌Ӎ(;ͬͨΓ΍ΜͩΓ)ɺʹΘ͔Ӎ(͙͢ʹ΍Ή): Ӎͷঢ়گ(߱Γํ)Λࢦͨ͠ݴ༿ ** य़Ӎɺޒ݄ӍɺകӍɺळӍɺ༦ཱ: ࣌ؒ΍قઅΛؚΈ࣋ͭ͜ͱʹͳͬͨݴ༿ * Ͱɺྫ͑͹ɺޒ݄Ӎ ** കӍ࣌ظͷӍͷ͜ͱ ** όϥόϥͱஅଓతͳ͜ͱ ** ೔ຊւ܉ۦஞ؋ɺ؋͜Εͷ؋໊ͳͷ͸উखʹٞ࿦͍ͯͩ͘͠͞
  9. # ϨτϦοΫ * ௚ᄻ: َͷΑ͏ʹڧ͍(َͷ஌Γ߹͍ډͳ͍͚ͲɺԿͱͳ͘෼͔Δ)(َΈ͍ͨͳਓͷ஌Γ߹͍͸݁ߏ͍Δ) ྨࣅੑΛ࣋ͭԿ͔ʹྫ͑Δ * Ӆᄻ: (ϜεΧ)ݟΖʂਓ͕ΰϛͷΑ͏ͩ(ੜ͝Έͱ͔ݴ͍ͬͯΔͷͰ͸ͳ͘ɺΰϛΫζͷΑ͏ʹେྔͰࣺͯΒΕ͍ͯΔΑ͏ͳײ͡(͔ͨ͠ɺ࣮ࡍ͸མ͍ͪͯͨ)) ϝλϑΝʔͱ͍͏ͷ͸ίϨͷ͜ͱɺ௚ᄻΛߋʹ؆ܿʹͨ͠ײ͡

    * ׵ᄻ: ੺͖ͣΜͪΌΜ(গঁ͕੺͍಄ۊΛඃ͍ͬͯΔͷͰ͋Γɺ੺͍಄ۊʹࣅ͍ͯΔͷͰ͸ͳ͍ɺҼΈʹനઇඣ(ઇͷΑ͏ʹന͍ഽͷ͓ඣ༷)͸Ӆᄻ * ఏᄻ: ηϩςʔϓ(͋Δ΋ͷΛߋʹҰൠతͳݴ͍ํͰݴ͍׵͑Δ) * ๏੓େֶ ཧ޻ֶ෦ ૑ੜՊֶՊ ڭत ۄҪ఩༤ ࢯ * ژ౎࢈ۀେֶ ίϯϐϡʔλཧ޻ֶ෦ ίϯϐϡʔλαΠΤϯεֶՊ ڭत ੨໦३ ࢯ
  10. H o c # ΦϒδΣΫτࢦ޲తʹ৺͕͚Δίτͱ͔ * ΧϓηϧԽ(ఆٛ͸৭ʑ͋Δ͚ͲɺσʔλӅṭͰ) * ඒຯ͍͠ϋϯόʔάͷ͓ళ *

    ೥قͷೖͬͨίοΫ͞Μͷٕ * ࣮͸ϨτϧτύοΫͩͬͨΓͯ͠ * ඒຯ͍͠ϋϯόʔάͱ͍͏ཁٻʹ͸Ԡ͍͑ͯΔ * ͖Ε͍ͳ͓Ͷʔ͞ΜͷډΔ͓ళ * ࣮͸୴ಹࢠ࣋ͪ->໰୊ͳ͍ɺӕͰ͸ͳ͍ * ࣮͸உ->͓Ͷʔ͞ΜͷఆٛΛ΋͏Ұ౓ * ඒܗ͕ډΔ->உঁผ͸࣋ͪग़͍ͯ͠ͳ͍ͷͰηʔϑ͕ͩɺίϯςΩετ͕໰୊ * ίϯςΩετͬͯʁ * ·͊ɺจ຺ɻϥʔϝϯ৯ͬͨޙʹɺAళ΋ඒຯ͍͔͠Βࠓ౓ߦ͜͏ͱݴΘΕͨAళ͕ϋϯόʔά԰ͩͬͨΒɺͦΕ͸ҧ͏ͩΖ
  11. o c # ίϯςΩετతʹ৺͕͚Δίτͱ͔ * ࣮ՈͷۙॴͰ͸Լͷ໊લͰ௨ΔɺබࣈΛ໊৐Δඞཁ͸΄΅ͳ͍ * ࣮Ոݍ಺(2km?)͔Βग़Δͱ௨༻͠ͳ͍ * ߋʹ͸໊ࣾͱ͔ݞॻͱ͔

    * ߋʹ͸ࠃͱ͔ * ͋ΔྖҬൣғͰ͸໋໊͸୹ͯ͘໰୊ͳ͍ * ຊ౰ʹʁ * public͡Όͳ͚Ε͹… * privateϝιουͷதͷϩʔΧϧม਺ͳΜͯͳΜͰ΋͍͍͡ΌΜ * Ͱ΋ɺͦͷϝιουɺ1000͍ۙεςοϓ਺ * privateϝιουͷϩʔΧϧม਺ͷఆٛʹ௥Ճ͢Δ΋ͷ͕ग़ͯ͘Δ * ద੾ͳ໊শΛ෇͚Δ΂͖ vs ௕͍ͷ͕ͦ΋ͦ΋มͩΖ
  12. f! ds e: # ࡶײ:ඞཁͩͱࢥ͍ͬͯΔίτ * ಡॻ: ٕज़ॻͰ΋৽ฉͰ΋খઆͰ΋ϚϯΨͰ΋ԿͰ΋͍͍ɺͱʹ͔͘ϘΩϟϒϥϦΛ૿΍ͤ * өըͱ͔Ͱ΋ྑ͍ɺදݱྗ΋૿΍ͦ͏

    * ٕज़ݪॻΛಡΜͩ͜ͱ͋Γ·͔͢ʁ։ൃํ๏࿦ͷจॻ಺ͰγΣΠΫεϐΞͰྫ͑ΒΕͯཧղͰ͖·͔͢ʁ * ӳޠ͔ͩΒΘ͔Βͳ͍ͱ౰ͨΓલͷΑ͏ʹݴ͏ͳɺԶͩͬͯΘ͔Μͳ͍͔ΒࣙॻҾ͍ͯΔΑ * ҼΈʹɺεϖϧϛε͸ஏ͔͍͔ͣ͠Β஫ҙͤΑ * ΄Μͱ͏ͷҙຯͰͷଟࠃ੶νʔϜͷ։ൃΛૣ͘ܦݧ͠Α͏ɺϝϯόʔؒͷߟ͑ํͷ֨ࠩʹโવ * Ͱ͖Ε͹ɺ਺ֶͷ஌͕ࣝ͋Δͱ໘ന͘ͳΔͱࢥ͏ɺ࿦ཧతͳߟ࡯Λڧ͍ΒΕΔ͔Β * ͨ·ʹҊ݅Ͱ͸ඞཁͳ͜ͱ΋(ۚ༥ͱ͔)ɺ࣮ࡍɺ๻͸ͱ͋ΔҊ݅ͰMD5ϋογϡ҉߸ԽॲཧΛjavaͰॻ͍ͨͱ͖ʹɺjava.lang.mathͱ͔࢖͍·ͨ͠(͔ͨ͠ɺࡾ֯ؔ਺ʁɺsin͔ͩͬͨͱ) * ϋ΢πʔຊʹ͸པΔͳɺ౴͑ͷΈͳΒͣɺ౴͑ͷ୳͠ํ΋ඞཁͳίτͰ͢ * Ϛωδϝϯτʹ͸ʮϋΠʯͱฦࣄ͠Ζɻ൓࿦ͯ͠΋ࣗ෼ͷ͕࣌ؒ࡟ΒΕΔ͚ͩͩ * ࣗݾओுͱ൓ൃ͸ҧ͏ * આ໌͸͢Δ΂͖͕ͩɺΞϗͳ࣭໰ʹ͸ʮάάΕʯͰे෼ɻແ஌͸ࡑɻ͔ͭɺ૬खɺ͜ͷۀքͷਓͩΑͶʁ * ߟ͑ํͷ൓స: ਓؒݪཧӉ஦࿦ͬͯ஌ͬͯ·͔͢ʁ * ҥ৯ॅ଍ΓͯྱઅΛ஌Δɺ͋ͱɺਭ຾΋͔ͳ * ॴḨɺ͜ͷੈ͸ञͱۚ