Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Kotlin学習とライブラリ作成
Search
yagi
March 24, 2016
Technology
1
4.2k
Kotlin学習とライブラリ作成
ライブラリ作成をしながらKotlinを学習するといいんじゃないかなーという話です
yagi
March 24, 2016
Tweet
Share
More Decks by yagi
See All by yagi
医療現場の解像度を上げるために 開発チームが行っている取り組み
sys1yagi
0
750
これどうやって動いてるんだ? Spring Framework/Bootのソースを読む
sys1yagi
1
1.3k
Kotlin コルーチンを 理解しよう 2019 - KotlinFest2019 -
sys1yagi
40
31k
5分でわかるKotlin Coroutines Flow
sys1yagi
21
18k
Androidと非同期処理 とCoroutine1.0.0
sys1yagi
12
14k
Kotlin コルーチンを 理解しよう
sys1yagi
41
24k
アーキテクチャと Scaffolding Template
sys1yagi
8
1.4k
Androidの非同期処理をKotlinコルーチンで行う
sys1yagi
3
23k
解剖Kotlin ~バイトコードを読み解く~
sys1yagi
18
10k
Other Decks in Technology
See All in Technology
ビズリーチが挑む メトリクスを活用した技術的負債の解消 / dev-productivity-con2025
visional_engineering_and_design
3
6.9k
Delta airlines Customer®️ USA Contact Numbers: Complete 2025 Support Guide
deltahelp
0
400
Glacierだからってコストあきらめてない? / JAWS Meet Glacier Cost
taishin
1
160
マネジメントって難しい、けどおもしろい / Management is tough, but fun! #em_findy
ar_tama
7
970
高速なプロダクト開発を実現、創業期から掲げるエンタープライズアーキテクチャ
kawauso
2
8.5k
開発生産性を測る前にやるべきこと - 組織改善の実践 / Before Measuring Dev Productivity
kaonavi
7
2k
SmartNewsにおける 1000+ノード規模 K8s基盤 でのコスト最適化 – Spot・Gravitonの大規模導入への挑戦
vsanna2
0
120
作曲家がボカロを使うようにPdMはAIを使え
itotaxi
0
450
Delta airlines®️ USA Contact Numbers: Complete 2025 Support Guide
airtravelguide
0
340
ビギナーであり続ける/beginning
ikuodanaka
3
730
Lufthansa ®️ USA Contact Numbers: Complete 2025 Support Guide
lufthanahelpsupport
0
150
20250707-AI活用の個人差を埋めるチームづくり
shnjtk
4
3.7k
Featured
See All Featured
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
60k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.8k
A Modern Web Designer's Workflow
chriscoyier
694
190k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.9k
Stop Working from a Prison Cell
hatefulcrawdad
270
21k
Imperfection Machines: The Place of Print at Facebook
scottboms
267
13k
Docker and Python
trallard
44
3.5k
Code Review Best Practice
trishagee
69
18k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
161
15k
Done Done
chrislema
184
16k
Being A Developer After 40
akosma
90
590k
Transcript
,PUMJOֶशͱϥΠϒϥϦ࡞ 2016 03 24 @ Sansan Toshihiro Yagi
About Me Toshihiro Yagi Twitter : sys1yagi Programmer at Cookpad
Inc. Android engineer Kotlin2014ॳ಄ลΓ͔ΒŧŔŕŪ৮͍ͬͯΔఔ
Target & Agenda ,PUMJOֶशͷͨΊʹϥΠϒϥϦ࡞ͬͯΈΔͷ݁ ߏ͍͍Μ͡Όͳ͍͔ͳʔͱ͍͏Ͱ͢ɻ LNPDLJUPͱ͍͏ϥΠϒϥϦͱڞʹ࡞࣌ʹͬ ͨ,PUMJOͷػೳͳͲΛհ͠·͢ɻ ,PUMJOͷجຊతͳݴޠͷػೳ͍ͬͯͯ,PUMJO Λͬͯ۩ମతʹͲ͏͍ͬͨࣄ͕Ͱ͖ͦ͏͔ͳ͊ʔ ͱߟ͍͑ͯΔਓ͚
What is kmockito?
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
Motivation
bXIFO`,PUMJOͷ༧ޠ WBMJUFNNPDL *UFNDMBTTKBWB AXIFOA JUFNMFOHUI UIFO3FUVSO ༧ޠͱඃΒͳ͍Α͏ʹΤεέʔϓ͕ඞཁ
BOZ ͕OVMMΛฦ͢ AXIFOA JUFNMFOHUI BOZ UIFO3FUVSO ʜ any() return null
and cause runtime error GVOMFOHUI UFYU4USJOH *OU\ʜ^ Non-Null
Yes kmockito!
Using features of Kotlin top-level extensions inline and reified Extension
Properties Destructuring Declarations
top-level extensions
τοϓϨϕϧʹ͕ؔॻ͚ͯศར
TUBUJDϝιου܈Λ࣋ͭΫϥε͕ੜ͞ΕΔ ֦ுؔ܈XX_extension.ktʹूΊΔͱΑͦ͞͏
lnline & reified
ͳܕͷهड़ΛΊΔ WBMJUFNNPDL *UFNDMBTTKBWB WBMJUFN*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 5DMBTTKBWB JOMJOFԽͯ͠ܕύϥϝʔλʹSFJpFEΛ༩͢Δͱ5Λ۩ܕͱ͔ͯ͋ͭ͑͠Δ ˞LPUMJOSFqFDU͕ඞཁͰ͢
ͳܕͷهड़ΛΊΔ JOMJOFGVOSFJpFE5"OZNPDL .PDLJUPNPDL 5DMBTTKBWB WBMJUFN*UFNNPDL JUFNMFOHUI NPDL :FT
Extension Properties
ͳϝιουݺͼग़͠ΛΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT JUFNMFOHUI JOWPLFE UIFO3FUVSO
ͳϝιουݺͼग़͠ΛΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT JUFNMFOHUI JOWPLFE UIFO3FUVSO ͳͯ͘Α͘ͳ͍ʁ
ͳϝιουݺͼग़͠ΛΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT WBM55JOWPLFE0OHPJOH4UVCCJOH5 HFU JOWPLFE ɾ&YUFOTJPO1SPQFSUJFTͰҙͷΫϥεʹϓϩύςΟΛ༩͢Δ ɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠
ͳϝιουݺͼग़͠ΛΊΔ GVO55JOWPLFE .PDLJUPAXIFOA UIJT WBM55JOWPLFE0OHPJOH4UVCCJOH5 HFU JOWPLFE ɾ&YUFOTJPO1SPQFSUJFTͰҙͷΫϥεʹϓϩύςΟΛ༩͢Δ ɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠
JUFNMFOHUI JOWPLFEUIFO3FUVSO
Destructuring Declarations
85' JUFNTPNF.FUIPE BOZ*OU BOZ4USJOH BOZ BOZ JOWPLFE UIFO"OTXFS\ WBMBJUBSHVNFOUT<>BT*OU
WBMCJUBSHVNFOUT<>BT4USJOH WBMDJUBSHVNFOUT<>BT*UFN WBMEJUBSHVNFOUT<>BT/BNF EPTPNFUIJOH ^
%FTUSVDUVSJOH%FDMBSBUJPOT Λͬͨೖ WBM B C 1BJS l)FMMPz Bl)FMMPz
C
%FTUSVDUVSJOH%FDMBSBUJPOT Λͬͨೖ WBM B C 1BJS l)FMMPz Bl)FMMPz
C ಛఆͷϧʔϧʹԊͬͨΫϥεͰ %FTUSVDUVSJOH%FDMBSBUJPOT͕͑Δɻ
%FTUSVDUVSJOH%FDMBSBUJPOTͷϧʔϧ DMBTT'PP\ PQFSBUPSGVODPNQPOFOU 4USJOHʜ PQFSBUPSGVODPNQPOFOU *OUʜ PQFSBUPSGVODPNQPOFOU/ 5ʜ ^ GVOEP4PNFUIJOH
GPP'PP \ WBM B C GPP ʜ ^ DPNQPOFOU/ ͱ͍͏ϝιουΛඞཁͳ͚ͩ࣋ͭ
%BUB$MBTTͰએݴָʑ EBUBDMBTT'PP WBMB4USJOH WBMC*OU GVOEP4PNFUIJOH GPP'PP \ WBM B C
GPP ʜ ^ %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 JOWPLFE UIFO"OTXFS\ WBM B C D JUBSHVNFOUT*OU 4USJOH *UFN EPTPNFUIJOH ^ :FT
Conclusion
,PUMJOֶशͱϥΠϒϥϦ࡞ ߦఔͰ݁ߏ͑Δͷ͕࡞ΕΔ ϥΠϒϥϦͩͱ"OESPJEͳͲͷϑϨʔϜϫʔΫ ʹ͋·ΓറΒΕͣॻ͚ΔͷͰֶश͕͔ͲΔ େମίʔυ͕ճ͘Β͍ม͢ΔɻͦͷதͰ,PUMJO ͷ༷ػೳॻ͖ํͳͲʹ͍ͭͯ৭ʑͱ۷ΕΔ ࠷ѱࣺͯΒΕΔ
Let’s Enjoy Kotlin life ϥΠϒϥϦΛ࡞ͬͯ
͓·͚
ಉ͡Α͏ͳϥΠϒϥϦཚཱ ͏ʔΜͲ͏ͨ͠ͷ͔
"XFTPNFLPUMJO ͜͜ʹೖΓ͍ͨ https://github.com/JavaBy/awesome-kotlin
ؤுΖ͏