ライブラリ作成をしながらKotlinを学習するといいんじゃないかなーという話です
,PUMJOֶशͱϥΠϒϥϦ࡞2016 03 24 @ SansanToshihiro Yagi
View Slide
About MeToshihiro YagiTwitter : sys1yagiProgrammer at Cookpad Inc.Android engineerKotlin2014ॳ಄ลΓ͔ΒŧŔŕŪ৮͍ͬͯΔఔ
Target & Agenda,PUMJOֶशͷͨΊʹϥΠϒϥϦ࡞ͬͯΈΔͷ݁ߏ͍͍Μ͡Όͳ͍͔ͳʔͱ͍͏Ͱ͢ɻLNPDLJUPͱ͍͏ϥΠϒϥϦͱڞʹ࡞࣌ʹͬͨ,PUMJOͷػೳͳͲΛհ͠·͢ɻ,PUMJOͷجຊతͳݴޠͷػೳ͍ͬͯͯ,PUMJOΛͬͯ۩ମతʹͲ͏͍ͬͨࣄ͕Ͱ͖ͦ͏͔ͳ͊ʔͱߟ͍͑ͯΔਓ͚
What is kmockito?
Wrapper of Mockito for KotlinNPDLWBSJUFN*UFNNPDL XIFOJUFNMFOHUI JOWPLFEUIFO3FUVSO BOTXFSJUFNTPNF.FUIPE BOZ*OU BOZ4USJOH BOZ BOZ JOWPLFEUIFO"OTXFS\WBM B C D EJUBSHVNFOUT*OU 4USJOH *UFN /BNF EPTPNFUIJOH^WFSJGZJUFNWFSJGZ UJNFT MFOHUI https://github.com/sys1yagi/kmockito
Motivation
bXIFO`,PUMJOͷ༧ޠWBMJUFNNPDL *UFNDMBTTKBWBAXIFOA JUFNMFOHUI UIFO3FUVSO ༧ޠͱඃΒͳ͍Α͏ʹΤεέʔϓ͕ඞཁ
BOZ ͕OVMMΛฦ͢AXIFOA JUFNMFOHUI BOZ UIFO3FUVSO ʜany() return null and cause runtime errorGVOMFOHUI UFYU4USJOH*OU\ʜ^Non-Null
Yes kmockito!
Using features of Kotlintop-level extensionsinline and reifiedExtension PropertiesDestructuring Declarations
top-level extensions
τοϓϨϕϧʹ͕ؔॻ͚ͯศར
TUBUJDϝιου܈Λ࣋ͭΫϥε͕ੜ͞ΕΔ֦ுؔ܈XX_extension.ktʹूΊΔͱΑͦ͞͏
lnline & reified
ͳܕͷهड़ΛΊΔWBMJUFNNPDL *UFNDMBTTKBWBWBMJUFN*UFNNPDL JUFNMFOHUI NPDL
ͳܕͷهड़ΛΊΔGVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB
ͳܕͷهड़ΛΊΔGVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWBܕফڈʹΑͬͯΤϥʔ
ͳܕͷهड़ΛΊΔGVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWBܕফڈʹΑͬͯΤϥʔJOMJOFGVOSFJpFE5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB
ͳܕͷهड़ΛΊΔGVO5"OZNPDL .PDLJUPNPDL 5DMBTTKBWBܕফڈʹΑͬͯΤϥʔJOMJOFGVOSFJpFE5"OZNPDL .PDLJUPNPDL 5DMBTTKBWBJOMJOFԽͯ͠ܕύϥϝʔλʹSFJpFEΛ༩͢Δͱ5Λ۩ܕͱ͔ͯ͋ͭ͑͠Δ˞LPUMJOSFqFDU͕ඞཁͰ͢
ͳܕͷهड़ΛΊΔJOMJOFGVOSFJpFE5"OZNPDL .PDLJUPNPDL 5DMBTTKBWBWBMJUFN*UFNNPDL JUFNMFOHUI NPDL :FT
Extension Properties
ͳϝιουݺͼग़͠ΛΊΔGVO55JOWPLFE .PDLJUPAXIFOA UIJTJUFNMFOHUI JOWPLFE UIFO3FUVSO
ͳϝιουݺͼग़͠ΛΊΔGVO55JOWPLFE .PDLJUPAXIFOA UIJTJUFNMFOHUI JOWPLFE UIFO3FUVSO ͳͯ͘Α͘ͳ͍ʁ
ͳϝιουݺͼग़͠ΛΊΔGVO55JOWPLFE .PDLJUPAXIFOA UIJTWBM55JOWPLFE0OHPJOH4UVCCJOH5HFU JOWPLFE ɾ&YUFOTJPO1SPQFSUJFTͰҙͷΫϥεʹϓϩύςΟΛ༩͢ΔɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠
ͳϝιουݺͼग़͠ΛΊΔGVO55JOWPLFE .PDLJUPAXIFOA UIJTWBM55JOWPLFE0OHPJOH4UVCCJOH5HFU JOWPLFE ɾ&YUFOTJPO1SPQFSUJFTͰҙͷΫϥεʹϓϩύςΟΛ༩͢ΔɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠JUFNMFOHUI JOWPLFEUIFO3FUVSO
Destructuring Declarations
85'JUFNTPNF.FUIPE BOZ*OU BOZ4USJOH BOZ BOZ JOWPLFEUIFO"OTXFS\WBMBJUBSHVNFOUT>BT*OUWBMCJUBSHVNFOUT>BT4USJOHWBMDJUBSHVNFOUT>BT*UFNWBMEJUBSHVNFOUT>BT/BNFEPTPNFUIJOH^
%FTUSVDUVSJOH%FDMBSBUJPOTΛͬͨೖWBM B C1BJS l)FMMPz Bl)FMMPzC
%FTUSVDUVSJOH%FDMBSBUJPOTΛͬͨೖWBM B C1BJS l)FMMPz Bl)FMMPzCಛఆͷϧʔϧʹԊͬͨΫϥεͰ%FTUSVDUVSJOH%FDMBSBUJPOT͕͑Δɻ
%FTUSVDUVSJOH%FDMBSBUJPOTͷϧʔϧDMBTT'PP\PQFSBUPSGVODPNQPOFOU 4USJOHʜPQFSBUPSGVODPNQPOFOU *OUʜPQFSBUPSGVODPNQPOFOU/ 5ʜ^GVOEP4PNFUIJOH GPP'PP\WBM B CGPPʜ^DPNQPOFOU/ ͱ͍͏ϝιουΛඞཁͳ͚ͩ࣋ͭ
%BUB$MBTTͰએݴָʑEBUBDMBTT'PP WBMB4USJOH WBMC*OUGVOEP4PNFUIJOH GPP'PP\WBM B CGPPʜ^%BUB$MBTTͰলུՄೳ
*OWPDBUJPO0O.PDLʹϝιουΛՃJOMJOFGVOSFJpFE" SFJpFE# SFJpFE$*OWPDBUJPO0O.PDLBSHVNFOUT 5SJQMF BSHVNFOUT>BT" BSHVNFOUT>BT# BSHVNFOUT>BT$
*OWPDBUJPO0O.PDLʹϝιουΛՃJOMJOFGVOSFJpFE" SFJpFE# SFJpFE$*OWPDBUJPO0O.PDLBSHVNFOUT 5SJQMF BSHVNFOUT>BT" BSHVNFOUT>BT# BSHVNFOUT>BT$JUFNTPNF.FUIPE BOZ*OU BOZ4USJOH BOZ JOWPLFEUIFO"OTXFS\WBM B C DJUBSHVNFOUT*OU 4USJOH *UFN EPTPNFUIJOH^:FT
Conclusion
,PUMJOֶशͱϥΠϒϥϦ࡞ߦఔͰ݁ߏ͑Δͷ͕࡞ΕΔϥΠϒϥϦͩͱ"OESPJEͳͲͷϑϨʔϜϫʔΫʹ͋·ΓറΒΕͣॻ͚ΔͷͰֶश͕͔ͲΔେମίʔυ͕ճ͘Β͍ม͢ΔɻͦͷதͰ,PUMJOͷ༷ػೳॻ͖ํͳͲʹ͍ͭͯ৭ʑͱ۷ΕΔ࠷ѱࣺͯΒΕΔ
Let’s Enjoy Kotlin lifeϥΠϒϥϦΛ࡞ͬͯ
͓·͚
ಉ͡Α͏ͳϥΠϒϥϦཚཱ͏ʔΜͲ͏ͨ͠ͷ͔
"XFTPNFLPUMJO͜͜ʹೖΓ͍ͨhttps://github.com/JavaBy/awesome-kotlin
ؤுΖ͏