Slide 1

Slide 1 text

;ͭ͏ͷ +BWBίʔσΟϯά !JSPG DDD@F ++6($$$4QSJOH

Slide 2

Slide 2 text

JSPG ؔ੢+BWBΤϯδχΞͷձ େࡕࡏॅ ;ͭ͏ͷϓϩάϥϚ ࡢ೥຤ʹձࣾ΍Ίͯɺ ͳΜͱͳ͘ϑϦʔͯ͠·͢ɻ

Slide 3

Slide 3 text

࿐෷͍

Slide 4

Slide 4 text

͜ͷηογϣϯ͸ʔ w ࢲͷݴޠԽͰ͖ͯͳ͍Կ͔ΛͭΒͭΒͱ࿩͠·͢ɻ w ීஈͷίʔσΟϯά΍ϨϏϡʔͱশͯ͠ద౰ʹோΊͨ Γ೉บ͚ͭͨΓͯ͠Δͱ͖ʹɺؾʹͯ͠Δͱ͜Ζͱ͔ Λɺ൒͹ڧҾʹݴޠԽ͠Α͏ͱࢼΈͨ΋ͷͰ͢ɻ w ਖ਼͍͠ղ͸͋Γ·ͤΜɻͱݴ͏͔ɺ͖ͬͱ͋ͳͨͷί ϯςΩετͰ͸ؒҧ͍΋͋Γ·͢ɻڧΊͷݴ༿Λ࢖ͬ ͯͨΓ͢Δ͚Ͳɺ͜͜Ͱμϝͱ͔ݴͬͯΔͷΛฏવͱ ΍Δ͜ͱ΋͋Γ·͢ɻ

Slide 5

Slide 5 text

;ͭ͏ʔ w ;ͭ͏ɺී௨ɺීஈ௨Γ w ͍ͭ΋΍ͬͯΔ͜ͱ w ͻΒ͕ͳʹਂ͍ҙຯ͸ͳ͍Ͱ͢

Slide 6

Slide 6 text

ίʔυ͹͔Γݟͯ΋͞ʔ w ʮίʔυ͚ͩʹͩ͜Θͬͯ΋࢓ํ͕ͳ͍ʯͱ͔ݴ͏͚Ε ͲɺຊؾͰਅ݋ʹίʔυʹͩ͜ΘΔͳΒɺશମΛݟ͟Δ Λಘͳ͘ͳΔΑ w ίʔυʹͩ͜ΘΔͨΊʹ w ϓϩμΫτ͸ྑ͍΋ͷͰͳ͚Ε͹ͳΒͳ͍ w ϓϩδΣΫτ͸ԁ׈ʹ·ΘΒͳ͍ͱ͍͚ͳ͍ w Ϗδωε͸੒ޭ͠ͳ͖Ό͍͚ͳ͍

Slide 7

Slide 7 text

ίʔυ͸ಡΈ෺ ಡΉ ॻ͘ ʼ ճ਺

Slide 8

Slide 8 text

ίʔυ͸ಡΈ෺ ಡΉ ॻ͘ ʼ ର৅ͷৄ͠͞

Slide 9

Slide 9 text

ίʔυ͸ಡΈ෺ w ॻ͕͔͔࣌ؒͬͯ͘΋ɺಡΉ͕࣌ؒ୹ॖ͞ΕΔͳΒ ͹ɺ࣌ؒΛ͔͚ͯॻ͜͏ w ৑௕ʹॻ͚ͱݴ͏ҙຯͰ͸ͳ͍ w ॻ͘ͷʹ΋ಡΉͷʹ΋͕͔͔࣌ؒΔͱ͔࠷ѱ

Slide 10

Slide 10 text

ਆ͸ࡉ෦ʹ॓Δ ѱຐ͸ࡉ෦ʹજΉ ίʔυ͕ࡉ෦͔Ͳ͏͔͸஌ Βͳ͍͚ΕͲɻ

Slide 11

Slide 11 text

͍ͩ͡ͳ͜ͱ

Slide 12

Slide 12 text

w ॻ͍ͨίʔυͷҰߦҰߦɺҰจࣈҰจࣈ Λઆ໌Ͱ͖ΔͷͰ͋Ε͹ɺ͖ͬͱͦΕ͸ ͍͍ίʔυɻ

Slide 13

Slide 13 text

ͳͥͦ͏ίʔσΟϯά͔ͨ͠Λઆ໌Ͱ ͖ΔΑ͏ʹͳΓ·͠ΐ͏ɻઆ໌Ͱ͖Δ ίʔυ͸ෆ۩߹΋গͳ͘อक΋͠΍͢ ͍͸ͣͳͷͰɺ͖ͬͱ͍͍݁Ռʹͭͳ ͕Δ͸ͣͰ͢ɻ l +BWBΤϯδχΞཆ੒ಡຊ+BWBೖ໳ΑΓ ʢࣗ෼Ͱॻ͍ͨʣ

Slide 14

Slide 14 text

ஈҐ ࿩ͷͨΊͷ۠੾ΓͳͷͰɺݫີͳ΋ͷͰ͸ͳ͍Ͱ͢ɻೝఆ΋͠·ͤΜɻ

Slide 15

Slide 15 text

ॳஈ ೖ໳ ೋஈ ݞ׳Β͠ ࡾஈ ϝιουΛखջ͚Δ ࢛ஈ ҆৺Ͱ͖ΔΦϒδΣΫτ ޒஈ දݱྗʹͩ͜ΘΔ ࿡ஈ 4USFBNͱͷ෇͖߹͍͔ͨ ࣣஈ ܕΛҙࣝ͢Δ ീஈ جຊతͳࢦ਑Λ࣋ͭ ۝ஈ 

Slide 16

Slide 16 text

ॳஈ

Slide 17

Slide 17 text

ίʔσΟϯάن໿͕͋Ε͹ɺͱΓ͋͑ͣकΔ ίʔσΟϯάن໿͕ΰϛͳ͜ͱ΋͋Δ͠ɺ݁ߏଟ͍ ͚ΕͲɺ·ͣ͸कΔ ن໿ʹ͸ʢࣦΘΕ͍ͯΔ͜ͱ΋ଟ͍Ͱ͕͢ʣཧ༝ͱ ܦҢ͕͋Γ·͢ɻͦΕΛઆ໌Ͱ͖ͣʹഁΔͷ͸࣌ظ ঘૣͰ͢ɻഁΔͷ͸ɺਖ਼߈๏Ͱਅਖ਼໘͔ΒഁΕΔΑ ͏ʹͳ͔ͬͯΒɻ ίʔσΟϯάن໿ʹ४ڌ͢Δ

Slide 18

Slide 18 text

ͦΕͬΆ͍ຊΛͬ͟ͱಡΜͰʮ͏Μ͏Μͦ͏ͩΑ Ͷʔʯͱ͔ݴ͏͘Β͍͸͢Δɻ ͜ͷ΁Μͷδϟϯϧͳͷ͚ͩΕͲɺͲΕ΋एׯݹ͍ ͷ͸ಥͬࠐΜͰ༡Ϳͱ͍͍೰·͍͠ͱ͜Ζɻ ҰൠతͳϧʔϧΛᅂΉ

Slide 19

Slide 19 text

ೋஈ

Slide 20

Slide 20 text

❌ ⭕ ۭ-JTUͷͨΊʹ"SSBZ-JTUΛ࢖Θͳ͍ return new ArrayList<>(); return Collections.emptyList();

Slide 21

Slide 21 text

if (hoge.isFuga()) { //...(a) } //...ʢ͕͜͜௕͍΄Ͳμϝ͕͞૿͢ʣ if (hoge.isFuga()) { //...(b) } टΛ܏͛ͯ͠·͏JG  B Λ௨ͬͯ C Λ௨Βͳ͍ͷ͕ύε্ଘࡏ͢Δ

Slide 22

Slide 22 text

int value = ... // 0 or 1 if (value == 0) { //...(a) } if (value == 1) { //...(b) } टΛ܏͛ͯ͠·͏JG  Լ͸WBMVF΍FMTFͱ͸ҧ͏ҙຯͳͷʁ B ΋ C ΋௨Βͳ͍ͷͬͯ͋Δͷʁ ͍͍ͩͨͷ৔߹͸FOVNΛ࢖͏΂͖ɻ FOVNΛ࢖͍౗͢

Slide 23

Slide 23 text

ΞϓϦέʔγϣϯίʔυϨϕϧͰ͸ඞཁͳ͍ ࢖͍ͨ͘ͳͬͨΒཱͪࢭ·Δ ࢖ΘͣʹͳΜͱ͔Ͱ͖ͳ͍͔ߟ͑ͯɺղܾͰ͖ͳ͍ ͳΒղܾͰ͖Δਓʹ͓ئ͍͢Δ Ͳ͏͠Α͏΋ͳ͔ͬͨΒɺޙչ͠ͳ͕Β࢖͏ ΩϟετΛ࢖Θͳ͍ ϨΠϠʹԠͨ͡ਫ४ͷ"1*Λ࢖͏

Slide 24

Slide 24 text

Charset.forName("UTF-8") StandardCharset.UTF_8 list.isEmpty() list.size() == 0 !list.isEmpty() list.size() != 0 list.size() > 0 ಉ͜͡ͱ͸ಉ͡Α͏ʹॻ͘ ಉ͡ϝιου಺ʹࠞࡏͯ͠ΔͱͭΒ͍

Slide 25

Slide 25 text

ࡾஈ

Slide 26

Slide 26 text

❌ ⭕ ݻఆ஋ͷҾ਺͸ϝιουΛ࡞Δ method(MyEnum.HOGE); method(MyEnum.FUGA); methodHOGE(); methodFUGA(); ࣮ࡍ͜Μͳϝιου໊͚ͭͨΒԥΓ·͕͢ɻ

Slide 27

Slide 27 text

❌ ⭕ ϑϥάύϥϝʔλΛආ͚Δ void method(boolean flg); void trueMethod(); void falseMethod();

Slide 28

Slide 28 text

ઌʹ͋͛ͨͷ͸ͭͷࢦ਑ʹΑΔ ϝιουʹҾ਺Λ૿΍ͦ͏͔ͱࢥͬͨ৔߹͸ϝιο υ௥ՃΛઌʹߟ͑Δ Ҿ਺Λ૿΍͢લʹϝιου௥ՃΛߟ͑Δ Ҿ਺͸গͳ͘͢Δ ໊લͰදݱ͢Δ

Slide 29

Slide 29 text

ҰͭͷϝιουͰෳ਺ରԠͰ͖ͨํ͕൚༻ੑ͕ߴ͘ ͍͍ͯ͡Όͳ͍͔ͬͯ࿩΋͋Δ͔΋͠Εͳ͍͚ΕͲɺ ಛʹQVCMJDͳͷ͸ಛԽͨ͠ϝιουΛ࡞੒͢Δ QSJWBUFϝιουͳΒ࢖ͬͯྑ͍ʢείʔϓ͕ڱ͚Ε ͹ಛʹ໰୊ʹͳΒͳ͍ʣ ʮΘ͟Θ͟ϝιου࡞Δͷʁʯ ίʔυ͸ಡΉํ͕ଟ͍

Slide 30

Slide 30 text

❌ ⭕ ৚݅ࣜΑΓϝιουΛ޷Ή if (list.size() == 0) { ... if (age >= 20) { ... if(list.isEmpty()) { ... if (isAdult()) { ...

Slide 31

Slide 31 text

❌ ⭕ ಉ͡ΦϒδΣΫτΛԿ౓΋ݺ͹ͳ͍ if (hoge.isFoo()) { hoge.bar(); } hoge.barIfFooIsTrue(); ಉ͜͡ͱΛ͍ͯ͠ΔͳΒಉ͡ʹ͢Δ

Slide 32

Slide 32 text

❌ ⭕ BOE΍PS͸ϝιουΛநग़͢Δ if (hoge.isFoo() || hoge.isBar()) { //... } if (hoge.isFooOrBar()) { //... } ಉ͡ΦϒδΣΫτͳΒઈର΍Δ΂͖ ಉ͡ΦϒδΣΫτΛԿ౓΋ݺ͹ͳ͍ ৚݅ࣜΑΓϝιουΛ޷Ή

Slide 33

Slide 33 text

❌ ⭕ ·ͱΊΔͱ if (status == Status.SUCCESS || status == Status.FAIURE) { //... } if (status.isFinish()) { //... } FOVNΛͨͩͷྻڍͱͯ͠࢖ͬͯΔͱ΍Γ͕ͪͰ͢Ͷ FOVNΛ࢖͍౗͢

Slide 34

Slide 34 text

͍ͭ΋ಉ͡࢖͍ํΛ͍ͯ͠ΔͷͰ͋Ε͹ɺϝιου நग़ͯ͠ɺͦͷմʹ໊લΛ෇͚·͠ΐ͏ ΍Δ͜ͱ͕ಉ͡ͳͷͰ͋Ε͹ɺຊ౰ʹಉ͡ίʔυΛ ࢖͏Α͏ʹ͢Δ Ұํɺ݁Ռతʹಉ͡Α͏ͳίʔυʹͳ͍ͬͯΔ͚ͩ Ͱ͋Ε͹ɺಉ͡ʹͳΒͳ͍Α͏ʹม͑·͠ΐ͏ ಉ͜͡ͱΛͯ͠ΔͳΒಉ͡ʹ͢Δ

Slide 35

Slide 35 text

ϝιου࡞੒Λ ໘౗͕͘͞Βͳ͍

Slide 36

Slide 36 text

࢛ஈ

Slide 37

Slide 37 text

class Hoge { Foo foo; Bar bar; Hoge(Foo foo) { this.foo = foo; } Hoge(Bar bar) { this.bar = bar; } ... } த్൒୺ͳΫϥεΛ࡞Βͳ͍ GPP΋͘͠͸CBS͔͠ೖΒͳ͍Ϋϥε

Slide 38

Slide 38 text

Object obj; if (condA()) obj = methodA(); if (condB()) obj = methodB(); if (condC()) obj = methodC(); // ... objΛ࢖ͬͯԿ͔͢Δ ࠶୅ೖΛආ͚Δ PCKͷঢ়ଶ͕ෆ҆ఆʹͳΔ

Slide 39

Slide 39 text

class ImmutableObject { final Hoge hoge; ImmutableObject(Hoge hoge) { this.hoge = hoge; } } ΠϛϡʔλϒϧΦϒδΣΫτΛ޷Ή ఆٛͰ͸ʮTFUUFSΛ࣋ͨͳ͍ɺϑΟʔϧυ͕pOBMͰQSJWBUFɺΫϥε͕pOBMɺΠϯελϯεϑΟʔϧυ͕Πϛϡʔλϒϧʯ͚ͩͲɺͦ͜·Ͱؾʹ͠ͳ͍ɻ ϑΟʔϧυ͕શͯpOBMͳΫϥε

Slide 40

Slide 40 text

࠶୅ೖΛආ͚Δͷ΋ɺΠϛϡʔλϒϧΦϒδΣΫτ ʹ͢Δͷ΋ɺঢ়ଶભҠΛ࠷খʹ͢ΔͨΊ ঢ়ଶભҠ͕͋ΔΦϒδΣΫτΛෳ਺ѻ͏ͱ؆୯ʹࢲ ͷཧղΛ௒͑ͯ͠·͏ ͦΜͳʹͨ͘͞Μͷ͜ͱΛؾʹ͢Δͱ͔ແཧͳͷͰɺ ؾʹ͠ͳ͖Ό͍͚ͳ͍͜ͱΛݮΒ੍ͯ͠ޚͰ͖Δঢ় ଶΛҡ࣋͢Δ ঢ়ଶભҠΛ཈͑Δଞͷࢦ਑΋͋Δ͸ͣɻ๨Εͨɻ ঢ়ଶભҠΛ࠷খʹ͢Δ

Slide 41

Slide 41 text

❌ ⭕ ίϯετϥΫλ͸νΣΠϯ͢Δ Hoge(Object v) { this.v = v; } Hoge() { this.v = "defaultValue"; } Hoge() { this("defaultValue"); }

Slide 42

Slide 42 text

w PQFOͨ͠ͷΛͦͷ··ʹ͠ͳ͍ w Ҿ਺ΛউखʹDMPTF͠ͳ͍ ϥΠϑαΠΫϧͷରশੑΛอͭ PQFOͨ͠ՕॴͰDMPTF͢Δ USZXJUISFTPVSDFTΛ ࢖͑ΔՕॴΛݟಀ͞ͳ͍

Slide 43

Slide 43 text

try (ExResource er = hoge::fuga) { //... } ----------------------------------- class Hoge { void fuga() { ... } } interface ExResource extends AutoCloseable { @Override void close(); } USZXJUISFTPVSDFTΛ࢖͏খٕ &YDFQUJPOΛ౤͛ͳ͍DMPTFϝιουΠϯλϑΣʔεʹϝιουϦϑΝϨϯεͰͭͳ͛Δɻ Ϋϥεʹ"VUP$MPTFBCMFΛ࣮૷ͤ͞Δͷ΋ݕ౼্ͨ͠Ͱɻ

Slide 44

Slide 44 text

IUUQJSPGIBUFCMPKQFOUSZQ

Slide 45

Slide 45 text

❌ ⭕ ಋग़Ͱ͖Δ஋Λอ࣋͠ͳ͍ boolean available; void setValue(Object value) { if (value != null) this.available = true; } boolean isAvailable() { return this.value != null; }

Slide 46

Slide 46 text

҆৺ͯ͠࢖͑Δ ΦϒδΣΫτΛ खʹ͠Α͏

Slide 47

Slide 47 text

List list = ... // ྫ֎͕ग़Δ͔΋͠Εͳ͍ list.add(hoge); // ྫ֎͕ग़Δ͔΋͠Εͳ͍ list.remove(hoge); ྫ҆৺Ͱ͖ͳ͍ΦϒδΣΫτ

Slide 48

Slide 48 text

ޒஈ ͜ͷล͔Β ;Θͬͱͯ͘͠Δ

Slide 49

Slide 49 text

void method(Object parameter) { // ύϥϝʔλ͕null͔΋͠Εͳ͍ if (parameter == null) { return; } // ... } ๷ޚతϓϩάϥϛϯάΛආ͚Δ ໰୊ͷઌૹΓPSϊΠζ   OVMMʹ޲͖߹͏

Slide 50

Slide 50 text

IUUQJSPGIBUFCMPKQFOUSZQ l஥ؒ಺Ͱա৒ʹ๷ޚ͠߹͏ɺ୭΋৴͡ΒΕͳ͍ͱͰ΋ݴ͏ Α͏ͳٙ৺҉َͳίʔυΛॻ͍ͯͲ͏͢ΔΜͩͱ͔ࢥͬͨΓ ͠·͢ɻڍಈ͕Α͘Θ͔Βͳ͍֎෦ͷ΋ͷΛ࢖͏ͳΒཧղग़ དྷ·͕͢ɺࣗ෼੍͕ͨͪޚͰ͖ΔൣғͳΒ͹༨ܭͳ๷ޚͰ ίʔυͷՄಡੑΛམͱ͢΂͖͡Όͳ͍ɻͩͬͯͦΕͬͯϊΠ ζ͡Όͳ͍Ͱ͔͢ɻ

Slide 51

Slide 51 text

৺౰ͨΓ͸͋Δͱࢥ͏ʢࢲ΋͜ͳ͍ͩ࢖ͬͨ ׽ࣈͰॻ͘ͱʮ΄͛৘ใʯͱ͔ʮ;͕ॲཧʯͱ͔ͦ ΕͬΆ͍͚Ͳɺ೔ຊޠ໊͔Βͯ͠໰୊Ͱ͋Δ ҙຯͷͳ໊͍લΛආ͚Δ .BOBHFS *OGP 1SPDFTT 4VNNBSZ 3FTVMU %BUB

Slide 52

Slide 52 text

w ಉ͡΋ͷʹҧ͏໊લΛ͚ͭͳ͍ w ҧ͏΋ͷʹಉ໊͡લΛ͚ͭͳ͍ ɾɾɾΛ෇͚ΒΕΔͱ͍͍ΑͶɻ ໊෇͚Ͱؾʹ͢Δ͜ͱ ಡΜͩ࣌ʹٙ໰Λ๊͔ͳ໊͍લ

Slide 53

Slide 53 text

ίϝϯτͰؾʹ͢Δ͜ͱ ҆қʹίϝϯτΛॻ͔ͳ͍ ඞཁͳίϝϯτ͸ॻ͘ ίʔυ΋ίϝϯτ΋ಡΈखʹԿ͔Λ఻͑Δ΋ͷͳͷ͸ಉ͡ɻ ίϝϯτͷํ͕දݱྗ͕ߴ͘ɺίʔυͷํ͕ݫີɻ ίϝϯτ͚ͩͰಈ࡞͸͠ͳ͍͚ΕͲɺίʔυ͚ͩ͸ಈ࡞͢Δɻ ͦͷͨΊɺίʔυͷදݱྗ͕े෼ߴ͚Ε͹ίʔυ͚ͩͰදݱ͢Δͷ͕͍͍ɻ ͱ͸͍͑ίʔυͷදݱྗʹͩ͜ΘΓ͗ͯ͢΋ݶ౓͸͋ΔͷͰɺίϝϯτ͸ඞཁɻ ݶ౓͸͖ͬͱࢥ͍ͬͯΔΑΓ΋ͣͬͱԕ͘ʹ͋Δͷ͚ͩΕͲɻ όϥϯεΛͱΔ

Slide 54

Slide 54 text

IUUQJSPGIBUFCMPKQFOUSZQ

Slide 55

Slide 55 text

❌ ⭕ ΑΓߴϨϕϧͷ"1*Λ࢖༻͢Δ @RequestMapping(value = "/hoge", method = RequestMethod.GET) String hoge() { ... @GetMapping("/hoge") String hoge() { ... ݻఆ஋ͷҾ਺͸ϝιουΛ࡞Δ

Slide 56

Slide 56 text

͋·Γ࢖ͬͯཉ͘͠ͳ͍"1*͸࢖͍೉͍γάω νϟɺҟ༷ͳ໊લʹ͢Δ ςετ༻ͷઃఆʢϝʔϧΞυϨεͳͲʣ΍ɺ։ൃ࣌ ʹ࢖͏ελϒͷ໭Γ஋͸ຊ෺ͬΆ͘͠ͳ͍ ҧ͏৔໘ͰͦΕ͕࢖ΘΕͨ࣌ʹɺ͘͢͝໨ཱͭΑ͏ ʹ࡞͓ͬͯ͘ ؒҧ͍͸ؒҧ͍ͱΘ͔ΔΑ͏ʹ͢Δ

Slide 57

Slide 57 text

දݱྗʹͩ͜ΘΔ

Slide 58

Slide 58 text

࿡ஈ

Slide 59

Slide 59 text

ೃછΈͷͳ͍"1*͸ɺҰ౓͸΍Γա͗ͳ͘Β͍࢖ͬ ͯݟ·͠ΐ͏ɻॻ͍ͯɺಡΜͰɺॻ͖௚ͯ͠ɺͲͬ ΀Γਁ͔͍ͬͯͩ͘͞ɻ ͱΓ͋͑ͣɺ͋ΒΏΔίϨΫγϣϯૢ࡞Λ4USFBN "1*Ͱ΍ͬͯΈΔͷ͕͍͍Ͱ͢ɻ ద੾ͳ୊ࡐ͕ͳ͍ͷͳΒɺ$PMMFDUPSTͷϝιουΛ ্͔Βॱ൪ʹҰ௨Γ৮Δͱ͍͍Ͱ͢ɻEPXOTUSFBN ͱ͔΋࢖͑ΔΑ͏ʹͳΕ͹͍͍ͩͨେৎ෉Ͱ͢ɻ 4USFBN"1*ͷ࿅श

Slide 60

Slide 60 text

❌ ⭕ ϝιουϦϑΝϨϯεΛ޷Ή stream .filter(hoge -> hoge.isFuga()) ... stream .filter(Hoge::isHoge) ... ϥϜμࣜ͸؆୯ʹෳࡶͰಡΊͳ͍΋ͷʹͳΔɻϝιουϦϑΝϨϯεΛ࢖͏΄͏͕͍͍श׳͕ͭ͘ɻ

Slide 61

Slide 61 text

4USFBN"1*ͷཚ༻Λආ͚Δ DPNJOH TPPO

Slide 62

Slide 62 text

ࣣஈ

Slide 63

Slide 63 text

class Hoge { LocalDate date = LocalDate.MIN; LocalDate getDate() { return date; } } ಛघͳ஋Λ֎ʹग़͞ͳ͍ .*/͕֎ʹग़ͯخ͍͜͠ͱ͸ͳ͍ OVMM͕Α͘࢖ΘΕΔ͚ͲɺOVMM͸ผ్ɻ   OVMMʹ޲͖߹͏

Slide 64

Slide 64 text

❌ ⭕ ΪϦΪϦ·ͰจࣈྻʹཔΒͳ͍ if (foo.str().equals(bar.str()) { ... } if (foo.hasSameStr(bar)) { ... } ʮ͍࣋ͬͯΔจࣈྻϓϩύςΟͰൺֱ͍ͨ͠ʯίʔυ͕ҰͭͰ΋ग़͖ͯͨΒɺ͜ͷΫϥε͸ͦ͏ݴ͏ൺֱͷ͞ΕํΛ͢Δ΋ͷͳͷͰ͢ɻ Ͱ͖Ε͹͜ͷൺֱʹ͸ద੾ͳ໊લΛ༩͍͑ͨͱ͜Ζɻ͜͜Ͱڍ͛ͨΑ͏ͳػցతͳ໊લ͡Όͳ͘Ͷɻ

Slide 65

Slide 65 text

ϝιουҾ਺ͳͲͰ҆қʹ࢖ΘΕΔจࣈྻ͸ɺΠϯ λϑΣʔεͱͯ͠΋ҙຯ͕޿͗͢Δ͠ɺશͯͷจࣈ ྻΛॲཧͰ͖ΔΑ͏ʹ࡞ΒΕ͍ͯΔ͔ඍົͩΖ͏͠ɺ ͦ΋ͦ΋ʮશͯͷจࣈྻΛॲཧ͢Δඞཁ͕͋Δʯͳ Μͯ͜ͱɺͦ͏ͦ͏ͳ͍ɻ จࣈྻͷΑ͏ͳܕͰ΍ΓͱΓ͢ΔͷͰ͸ͳ͘ɺϓϩ μΫτͷܕͰΪϦΪϦ·Ͱॲཧ͢ΔɻΪϦΪϦͬͯ ͷ͸6*ͱ͔ӬଓԽͱ͔ɺ+BWBͷ֎ʹग़Δ௚લɻग़͞ ͳ͍͍ͯ͘ͳΒ࠷ޙ·Ͱग़͞ͳ͍ɻ ΪϦΪϦ·ͰจࣈྻʹཔΒͳ͍

Slide 66

Slide 66 text

FOVNΛ࢖͍౗͢ ݸҎ্ͷ஋Λ࣋ͯΔ ϝιουΛ࣋ͯΔ ΠϯλϑΣʔεΛ࣮૷Ͱ͖Δ

Slide 67

Slide 67 text

ʮࣅ͍ͯΔʯͱײͨ͡ͳΒɺܕͰറͬͯΈΔ ؾ͍͍ͮͯͳ͔ͬͨ੾Γޱ͕ग़ͯ͘ΔՄೳੑ͸ߴ͘ ͯɺݴ༿͡ΌදݱͰ͖ͳ͔ͬͨڞ௨ੑ͕͋Δͷ͔΋ ͠Εͳ͍͠ɺશવҧ͏΋ͷ͕ۮવࣅͨܗʹͳ͍ͬͯ ͚͔ͨͩ΋͠Εͳ͍ ײੑΛ৴ͯ͡ίʔυʹͯ͠ΈΔ ຊ౰ʹಉͩͬͨ͡ΒܕʹͰ͖Δ͠ɺҰ౓ܕͰറΕΔ ͱ͍Ζ͍ΖָʹͳΔ͚Ͳɺͨ·ʹؒҧ͑Δ ࣅͨܗͷߏ଄͸ܕͰറΔ

Slide 68

Slide 68 text

// ͨͿΜ0Λ࢖͍ͨ͘͸ͳ͍ int i = 0; // ͨͿΜۭจࣈʹ͍ͨ͠Θ͚Ͱ͸ͳ͍ String str = ""; // ͨͿΜnullΛ࢖͏΂͖͡Όͳ͍ Hoge hoge = null;   OVMMʹ޲͖߹͏

Slide 69

Slide 69 text

 OVMM ͸ڻ͘΄Ͳ҆қʹ࢖ΘΕ͍ͯΔ͕ɺ࣮ࡍ͸ ࢖ΘΕ͍ͯΔҙຯΑΓ΋ͬͱ൚༻తͳ෺ମɻͳͷʹɺ ஋Λ໌֬ʹ͢Δ͜ͱ͔Βಀ͛ͨ৔߹ʹແअؾʹબ୒͞ Εͯ͠·͏஋ɻ ໰୊Λى͜͢ίʔυʹ͸݁ߏͳස౓Ͱ  OVMMؚ͕ ·Ε͍ͯΔɻఆٛ͢Δ͜ͱ͔Βಀ͛ͨͷ͔ͩΒɺͦ͏ ݴ͏ͱ͜Ζʹෆ۩߹͕જΉͷ͸ࢸۃ౰વɻ ͜ΕΒ͸໓ଟʹͰͯ͜ͳ͍͸ͣͳͷͰɺ࢖͏ͱ͖͸શ ྗͰݴ͍༁ͷίϝϯτΛॻ͍ͯ࢖͏ɻ   OVMMʹ޲͖߹͏ ඞཁͳίϝϯτ͸ॻ͘

Slide 70

Slide 70 text

❌ ⭕ ۭΠϯελϯεΛ࡞Δલʹཱͪࢭ·Δ Hoge hoge = new Hoge(); hoge.setValue(value); ... Hoge hoge = new Hoge(value); ΠϛϡʔλϒϧΦϒδΣΫτΛ޷Ή

Slide 71

Slide 71 text

class Hoge { final Fuga fuga; final Piyo piyo; Hoge() { this(new Fuga(), new Piyo()); } Hoge(Fuga fuga, Piyo piyo) { this.fuga = fuga; this.piyo = piyo; ... ۭΠϯελϯεΛ࡞Δલʹཱͪࢭ·Δ ຊ౰ʹσϑΥϧτίϯετϥΫλΛ࢖༻ͨ͠ΠϯελϯεͰ͍͍ͷʁ σϑΥϧτίϯετϥΫλͰੜ੒͞ΕΔΠϯελϯε͸׬શʹಈ࡞͢ΔΑ͏ʹ࡞ΒΕͯΔͷʁ ୯ͳΔ஋ͷίϯςφʹͳͬͯͳ͍ʁͦͷίʔυಡΈ΍͍͢ʁ

Slide 72

Slide 72 text

ͦͷΠϯελϯε͕Կऀ͔આ໌Ͱ͖Δ͔ʁ ͦͷΠϯελϯε͸ۭͱͯ͠ਖ਼͘͠ৼΔ෣͏͔ʁ ౴͑ΒΕͳ͍ͷͰ͋Ε͹ɺԿ͔ؒҧ͍͑ͯΔɻ๷ޚ తϓϩάϥϛϯάͤ͟ΔΛಘͳ͍ঢ়ଶʹͳΔͩΖ͏ ͠ɺ๷ޚతϓϩάϥϛϯά͸ؒҧͬͨ࢖͍ํͷष͍ Ͱ͢ɻ ۭΠϯελϯεΛ࡞Δલʹཱͪࢭ·Δ ๷ޚతϓϩάϥϛϯάΛආ͚Δ

Slide 73

Slide 73 text

ീஈ

Slide 74

Slide 74 text

ಉ͡ϨΠϠͰ͸ಉ͡ਫ४ͷ"1*Λ࢖༻͢Δ ϨΠϠʹԠͨ͡ਫ४ͷ"1*Λ࢖͏ ରশੑ ରশੑ͸அยతͳίʔυ͚ͩͰͳ͘ɺ৭ʑͳ Ϩϕϧʹద༻͢Δ΋ͷɻ

Slide 75

Slide 75 text

❌ ⭕ ରশੑίʔυͷந৅౓Λἧ͑Δ void hoge() { add(); this.count++; save(); } void fuga() { add(); countUp(); save(); }

Slide 76

Slide 76 text

ඍົͳίʔυΛॻ͔͟ΔΛಘͳ͍͕࣌͋Δɻ ͍ΖΜͳखΛਚͯ͘͠શྗͰճආΛࢼΈΔͷ͸લఏ ͚ͩΕͲɺͦΕͰ΋ಧ͔ͳ͍࣌ɻ μϝͳ΋ͷΛ໨ཱͨͤΔɻμϝͩͱΘ͔ΔΑ͏ʹɻ μϝͳ΋ͷΛ໨ཱͨͤΔ ໨ཱͭ͘Β͍μϝͳίʔυΛॻ͘

Slide 77

Slide 77 text

۝ஈ

Slide 78

Slide 78 text

ڧ͍ҙࢥͰ ϧʔϧΛഁΔ

Slide 79

Slide 79 text

Ϩϕϧͷ্͛ํ

Slide 80

Slide 80 text

ʮΘ͟Θ͟࡞Δʯ ͱ޲͖߹͏

Slide 81

Slide 81 text

ϝιουͷͱ͜ΖͰ΋৮Ε͚ͨΕͲɺΫϥεͰ΋ͳ ΜͰ΋ҰॹɻʮΘ͟Θ͟࡞Δʯͱݴ͏ߟ͑Λҙࣝత ʹࣺͯΒΕΔΑ͏ʹ܇࿅͢Δɻ ࡞੒͢ΔίετͳΜͯࠣࡉͳ΋ͷͰ͢ɻίετ͕ߴ ͍ͱײ͡Δͷ͸ɺ͖ͬͱ࡞Γ׳Ε͍ͯͳ͍͔Βɻ Ұํɺ਺͕૿͑ΔͱಡΈͮΒ͘ͳΔͷ΋ࣄ࣮ɻ͍ͭ ͩͬͯʮίʔυ͸ಡΈ෺ʯΛୈҰʹҙࣝ͢Δ͜ͱɻ Θ͟Θ͟࡞Δʁ

Slide 82

Slide 82 text

ʮؾΛ͚ͭΔʯ ͱ޲͖߹͏

Slide 83

Slide 83 text

ؾΛ͚ͭͯ࢖Θͳ͍ͱ͍͚ͳ͍"1*͸͚ͬ͜͏ଟ͘ ͯɺ൚༻తͰͳΜͰ΋Ͱ͖Δܥͷ௿Ϩϕϧ"1*͸ͦ ͏ݴ͏܏޲ʹ͋Δ͔Β࢓ํ͕ͳ͍ Ͱ΋ɺͦͷ࢖͍ํΛؒҧ͑ͨ࣌ʹέΞϨεϛεѻ͍ ͍ͯ͠Δͱ͸Կ΋มΘΒͳ͍ ʮؾΛ͚ͭΔʯ ؾΛ͚ͭΔʹؒҧ͑ͯ΋͍͍

Slide 84

Slide 84 text

ʮؾΛ͚͍ͭͯΕ͹ى͜Βͳ͔ͬͨෆ۩߹ʯ͸ɺઃ ܭෆඋͷष͍Ͱ͢ ͦͷϨΠϠͰ࢖ΘΕΔ΂͖Ͱͳ͍දݱྗ΍ந৅౓ͷ "1*͕͍ࠞͬͯͯ͡ɺޡͬͨ࢖͍ํΛ͞Ε͕ͨނʹ ൃੜͨ͠΋ͷͰ͠ΐ͏ ઃܭෆඋͷष͍ ؒҧ͑ΔՄೳੑ͕͋Ε͹ɺؒҧ͑Δ

Slide 85

Slide 85 text

࢖͍ํΛنఆ͢ΔɻͦͷͨΊʹ൚༻తͳܕΛͦͷ· ·࢖͏ͷΛආ͚Δɻ ಛԽͨ͠࢖͍ํͷͨΊͷɺಛԽͨ͠ΫϥεͱɺಛԽ ͨ͠ϝιουΛ࡞͍ͬͯ͘ɻ 4USJOHͱ͔Λ࢖ͬͯΔͱɺ͍ͭ·Ͱ΋ʮTVCTUSJOHͬ ͯʯͱ͔ɺ௿Ϩϕϧͳ"1*Λ஻Δ͜ͱʹͳΔɻ ͦ΋ͦ΋ؒҧ͑ΒΕͳ͍Α͏ʹ

Slide 86

Slide 86 text

OVMMͱ޲͖߹͏

Slide 87

Slide 87 text

ʮ/VMM1PJOUFS&YDFQUJPOʹͳ͔ͬͨΒOVMMνΣοΫ ΛೖΕͨʯ͸༗ࡑɻ҆қʹOVMMνΣοΫΛೖΕΔͷ ͸ͦͷ৔͠ͷ͗͗͢Δɻ ͦ΋ͦ΋OVMM͕ͦ͜ʹݟ͑Δ͜ͱ͕͓͔͍͠ OVMMͷҾྗʹ߅͏ͨΊʹ͢΂ͯͷ͜ͱΛߟ͑ͯɺ࣮ ફ͢Δɻ0QUJPOBMʁͲ͏ͩΖ͏Ͷɻ ͨͱ͑͹ɾɾɾ ಛघͳ஋Λ֎ʹग़͞ͳ͍

Slide 88

Slide 88 text

IUUQJSPGIBUFCMPKQFOUSZ 0QUJPOBM OVMMΑΓΑ΄Ͳྑ͍͕ɺ౴͑Ͱ͸ͳ͍ɻ

Slide 89

Slide 89 text

ܕͱ޲͖߹͏ ⾠ܕܯ࡯ͷํ͸͓ؼΓ͍ͩ͘͞

Slide 90

Slide 90 text

ϓϦϛςΟϒܕ΍+BWBඪ४ϥΠϒϥϦɺ൚༻ϥΠϒ ϥϦʹଘࡏ͢Δܕ͸ɺۀ຿Λද͢ʹ͸൚༻త͗͢Δ ྫ͑͹จࣈྻ͸4USJOHͰද͞ΕΔͷ͔΋͠Εͳ͍͚ ΕͲɺࠓʮจࣈྻͱͯ͠ѻ͓͏ͱ͍ͯ͠ΔԿ͔ʯʹ 4USJOHͷ͢΂ͯͷػೳ͸ཁΒͳ͍͠ɺ΋ͬͱಛԽ͠ ͨػೳ͕͋ΔΜ͡Όͳ͍͔ɺͱ͔ ࢲ͸͢΂ͯͷจࣈྻʹରԠ͢ΔॲཧͳΜͯॻ͖ͨ͘ ͳ͍ʢগͳ͘ͱ΋ͦ͜ʹ͸ʣ ޲͖߹͍ํ

Slide 91

Slide 91 text

ʮཧ૝ͷίʔυʯ ʹ޲͖߹͏

Slide 92

Slide 92 text

IUUQJSPGIBUFCMPKQFOUSZQ ࢲ͸ࣗ෼ͷٻΊ͍ͯΔ$MFBO$PEF UIBUXPSLT Λڻ͖ ͷͳ͍ίʔυͱଊ͍͑ͯΔɻͭ·Γʮී௨ͦ͏ॻ͘ΑͶʯ ͱݴΘΕΔΑ͏ͳ΋ͷɻ͋Δ΂ͯࣗ͘͠વͱͦ͏ͳ͍ͬͯΔ ΋ͷɻ͓ͦΒ͘ग़དྷ্͕Δίʔυ͸ڽͬͨίʔυͱ͸ݴ ΘΕͳ͍ɻ

Slide 93

Slide 93 text

൚༻ੑ߅͏

Slide 94

Slide 94 text

൚༻ੑ͕ߴ͍͸ਖ਼ٛͷΑ͏ʹޠΒΕ͕ͪɻ ͚ͩͲɺ൚༻ΛٻΊΔͱ؆୯ʹखଓ͖తʹͳΔɻ ੍ޚ༻ͷύϥϝʔλ͕๲େʹͳΓɺෳࡶͳঢ়ଶભҠ Λ࣋ͭΑ͏ʹͳΓɺ૊߹ͤരൃʹԡͭ͠Ϳ͞ΕΔɻ γεςϜ։ൃʹ͓͍ͯɺ൚༻ੑΑΓγεςϜʹద͠ ͨಛԽΛҙࣝ͢Δɻա৒ͳ·ͰʹಛԽ͢Δɻอकੑ ͕མͪΔʁ൚༻తʹͯͯ͠อकੑΑ͔ͬͨʁ ൚༻ੑͷ༠࿭

Slide 95

Slide 95 text

ಉ͡໛༷ͱ޲͖߹͏

Slide 96

Slide 96 text

͋ΒΏΔϨϕϧͷʮಉ͡໛༷ʯʹහײʹͳΔ ෳ਺ͷΫϥεͰࣅͨΑ͏ͳίʔυ͕͋ΔͳΒɺͦͷ ʮԿ͕ࣅ͍ͯΔͱײ͔ͨ͡ʯʹ޲͖߹͏ ίʔυ͚ͩ͡Όͳ͘ɺύοέʔδ΍Ϋϥεߏ੒ɺΠ ϯελϯεͷϥΠϑαΠΫϧ΍γʔέϯεʹ΋ʮಉ ͡໛༷ʯ͸ݟ͑ͯ͘Δ͸ͣ ײ֮Λେࣄʹͯ͠΄͍͠ ಉ͡໛༷

Slide 97

Slide 97 text

࠷ޙʹ

Slide 98

Slide 98 text

ࡾ೔લͷࣗ෼ͷίʔυɺ
 ποίϛͲ͜ΖຬࡌͰࠔΔɻ ʢͱ͔਺೥ݴ͍ଓ͚ͯΔʣ