Slide 1

Slide 1 text

,PUMJOֶशͱϥΠϒϥϦ࡞੒ 2016 03 24 @ Sansan Toshihiro Yagi

Slide 2

Slide 2 text

About Me Toshihiro Yagi Twitter : sys1yagi Programmer at Cookpad Inc. Android engineer Kotlin͸2014೥ॳ಄ลΓ͔ΒŧŔŕŪ৮͍ͬͯΔఔ౓

Slide 3

Slide 3 text

Target & Agenda ,PUMJOֶशͷͨΊʹϥΠϒϥϦ࡞ͬͯΈΔͷ͸݁ ߏ͍͍Μ͡Όͳ͍͔ͳʔͱ͍͏࿩Ͱ͢ɻ LNPDLJUPͱ͍͏ϥΠϒϥϦͱڞʹ࡞੒࣌ʹ࢖ͬ ͨ,PUMJOͷػೳͳͲΛ঺հ͠·͢ɻ ,PUMJOͷجຊతͳݴޠͷػೳ͸஌͍ͬͯͯ,PUMJO Λ࢖ͬͯ۩ମతʹͲ͏͍ͬͨࣄ͕Ͱ͖ͦ͏͔ͳ͊ʔ ͱߟ͍͑ͯΔਓ޲͚

Slide 4

Slide 4 text

What is kmockito?

Slide 5

Slide 5 text

Wrapper of Mockito for Kotlin NPDL WBSJUFN*UFNNPDL  XIFO JUFNMFOHUI JOWPLFEUIFO3FUVSO   BOTXFS JUFNTPNF.FUIPE BOZ*OU BOZ4USJOH BOZ BOZ  JOWPLFE UIFO"OTXFS\ WBM B C D E JUBSHVNFOUT*OU 4USJOH *UFN /BNF  EPTPNFUIJOH ^ WFSJGZ JUFNWFSJGZ UJNFT  MFOHUI https://github.com/sys1yagi/kmockito

Slide 6

Slide 6 text

Motivation

Slide 7

Slide 7 text

bXIFO`͸,PUMJOͷ༧໿ޠ WBMJUFNNPDL *UFNDMBTTKBWB  AXIFOA JUFNMFOHUI UIFO3FUVSO  ༧໿ޠͱඃΒͳ͍Α͏ʹΤεέʔϓ͕ඞཁ ৑௕

Slide 8

Slide 8 text

BOZ ͕OVMMΛฦ͢ AXIFOA JUFNMFOHUI BOZ UIFO3FUVSO ʜ any() return null and cause runtime error GVOMFOHUI UFYU4USJOH *OU\ʜ^ Non-Null

Slide 9

Slide 9 text

Yes kmockito!

Slide 10

Slide 10 text

Using features of Kotlin top-level extensions inline and reified Extension Properties Destructuring Declarations

Slide 11

Slide 11 text

top-level extensions

Slide 12

Slide 12 text

τοϓϨϕϧʹؔ਺͕ॻ͚ͯศར

Slide 13

Slide 13 text

TUBUJDϝιου܈Λ࣋ͭΫϥε͕ੜ੒͞ΕΔ ֦ுؔ਺܈͸XX_extension.ktʹूΊΔͱΑͦ͞͏

Slide 14

Slide 14 text

lnline & reified

Slide 15

Slide 15 text

৑௕ͳܕͷهड़Λ΍ΊΔ WBMJUFNNPDL *UFNDMBTTKBWB WBMJUFN*UFNNPDL  JUFNMFOHUI NPDL

Slide 16

Slide 16 text

৑௕ͳܕͷهड़Λ΍ΊΔ GVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB

Slide 17

Slide 17 text

৑௕ͳܕͷهड़Λ΍ΊΔ GVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB ܕফڈʹΑͬͯΤϥʔ

Slide 18

Slide 18 text

৑௕ͳܕͷهड़Λ΍ΊΔ GVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB ܕফڈʹΑͬͯΤϥʔ JOMJOFGVOSFJpFE5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB

Slide 19

Slide 19 text

৑௕ͳܕͷهड़Λ΍ΊΔ GVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB ܕফڈʹΑͬͯΤϥʔ JOMJOFGVOSFJpFE5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB JOMJOFԽͯ͠ܕύϥϝʔλʹSFJpFEΛ෇༩͢Δͱ5Λ۩৅ܕͱ͔ͯ͋ͭ͑͠Δ ˞LPUMJOSFqFDU͕ඞཁͰ͢

Slide 20

Slide 20 text

৑௕ͳܕͷهड़Λ΍ΊΔ JOMJOFGVOSFJpFE5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB WBMJUFN*UFNNPDL  JUFNMFOHUI NPDL :FT

Slide 21

Slide 21 text

Extension Properties

Slide 22

Slide 22 text

৑௕ͳϝιουݺͼग़͠Λ΍ΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT JUFNMFOHUI JOWPLFE UIFO3FUVSO 

Slide 23

Slide 23 text

৑௕ͳϝιουݺͼग़͠Λ΍ΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT JUFNMFOHUI JOWPLFE UIFO3FUVSO  ͳͯ͘΋Α͘ͳ͍ʁ

Slide 24

Slide 24 text

৑௕ͳϝιουݺͼग़͠Λ΍ΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT  WBM55JOWPLFE0OHPJOH4UVCCJOH5 HFU JOWPLFE ɾ&YUFOTJPO1SPQFSUJFTͰ೚ҙͷΫϥεʹϓϩύςΟΛ෇༩͢Δ ɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠

Slide 25

Slide 25 text

৑௕ͳϝιουݺͼग़͠Λ΍ΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT  WBM55JOWPLFE0OHPJOH4UVCCJOH5 HFU JOWPLFE ɾ&YUFOTJPO1SPQFSUJFTͰ೚ҙͷΫϥεʹϓϩύςΟΛ෇༩͢Δ ɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠ JUFNMFOHUI JOWPLFEUIFO3FUVSO 

Slide 26

Slide 26 text

Destructuring Declarations

Slide 27

Slide 27 text

85' JUFNTPNF.FUIPE BOZ*OU BOZ4USJOH BOZ BOZ  JOWPLFE UIFO"OTXFS\ WBMBJUBSHVNFOUT<>BT*OU WBMCJUBSHVNFOUT<>BT4USJOH WBMDJUBSHVNFOUT<>BT*UFN WBMEJUBSHVNFOUT<>BT/BNF EPTPNFUIJOH ^

Slide 28

Slide 28 text

%FTUSVDUVSJOH%FDMBSBUJPOT Λ࢖ͬͨ୅ೖ WBM B C 1BJS l)FMMPz   Bl)FMMPz C

Slide 29

Slide 29 text

%FTUSVDUVSJOH%FDMBSBUJPOT Λ࢖ͬͨ୅ೖ WBM B C 1BJS l)FMMPz   Bl)FMMPz C ಛఆͷϧʔϧʹԊͬͨΫϥεͰ %FTUSVDUVSJOH%FDMBSBUJPOT͕࢖͑Δɻ

Slide 30

Slide 30 text

%FTUSVDUVSJOH%FDMBSBUJPOTͷϧʔϧ DMBTT'PP\ PQFSBUPSGVODPNQPOFOU 4USJOHʜ PQFSBUPSGVODPNQPOFOU *OUʜ PQFSBUPSGVODPNQPOFOU/ 5ʜ ^ GVOEP4PNFUIJOH GPP'PP \ WBM B C GPP ʜ ^ DPNQPOFOU/ ͱ͍͏ϝιουΛඞཁͳ਺͚ͩ࣋ͭ

Slide 31

Slide 31 text

%BUB$MBTTͰએݴָʑ EBUBDMBTT'PP WBMB4USJOH WBMC*OU GVOEP4PNFUIJOH GPP'PP \ WBM B C GPP ʜ ^ %BUB$MBTTͰলུՄೳ

Slide 32

Slide 32 text

*OWPDBUJPO0O.PDLʹϝιουΛ௥Ճ JOMJOFGVOSFJpFE" SFJpFE# SFJpFE$ *OWPDBUJPO0O.PDLBSHVNFOUT  5SJQMF BSHVNFOUT<>BT" BSHVNFOUT<>BT# BSHVNFOUT<>BT$

Slide 33

Slide 33 text

*OWPDBUJPO0O.PDLʹϝιουΛ௥Ճ JOMJOFGVOSFJpFE" SFJpFE# SFJpFE$ *OWPDBUJPO0O.PDLBSHVNFOUT  5SJQMF BSHVNFOUT<>BT" BSHVNFOUT<>BT# BSHVNFOUT<>BT$ JUFNTPNF.FUIPE BOZ*OU BOZ4USJOH BOZ  JOWPLFE UIFO"OTXFS\ WBM B C D JUBSHVNFOUT*OU 4USJOH *UFN  EPTPNFUIJOH ^ :FT

Slide 34

Slide 34 text

Conclusion

Slide 35

Slide 35 text

,PUMJOֶशͱϥΠϒϥϦ࡞੒ ߦఔ౓Ͱ݁ߏ࢖͑Δ΋ͷ͕࡞ΕΔ ϥΠϒϥϦͩͱ"OESPJEͳͲͷϑϨʔϜϫʔΫ ʹ͋·ΓറΒΕͣॻ͚ΔͷͰֶश͕͸͔ͲΔ େମίʔυ͕ճ͘Β͍ม਎͢ΔɻͦͷதͰ,PUMJO ͷ࢓༷΍ػೳ΍ॻ͖ํͳͲʹ͍ͭͯ৭ʑͱ۷ΕΔ ࠷ѱࣺͯΒΕΔ

Slide 36

Slide 36 text

Let’s Enjoy Kotlin life ϥΠϒϥϦΛ࡞ͬͯ

Slide 37

Slide 37 text

͓·͚

Slide 38

Slide 38 text

ಉ͡Α͏ͳϥΠϒϥϦཚཱ໰୊ ͏ʔΜͲ͏ͨ͠΋ͷ͔

Slide 39

Slide 39 text

"XFTPNFLPUMJO ͜͜ʹೖΓ͍ͨ໰୊ https://github.com/JavaBy/awesome-kotlin

Slide 40

Slide 40 text

ؤுΖ͏