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

Kotlin学習とライブラリ作成

yagi
March 24, 2016

 Kotlin学習とライブラリ作成

ライブラリ作成をしながらKotlinを学習するといいんじゃないかなーという話です

yagi

March 24, 2016
Tweet

More Decks by yagi

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. What is kmockito?

    View Slide

  5. 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

    View Slide

  6. Motivation

    View Slide

  7. bXIFO`͸,PUMJOͷ༧໿ޠ
    WBMJUFNNPDL *UFNDMBTTKBWB

    AXIFOA JUFNMFOHUI

    UIFO3FUVSO

    ༧໿ޠͱඃΒͳ͍Α͏ʹΤεέʔϓ͕ඞཁ
    ৑௕

    View Slide

  8. BOZ
    ͕OVMMΛฦ͢
    AXIFOA JUFNMFOHUI BOZ


    UIFO3FUVSO ʜ

    any() return null and cause runtime error
    GVOMFOHUI UFYU4USJOH
    *OU\ʜ^
    Non-Null

    View Slide

  9. Yes kmockito!

    View Slide

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

    View Slide

  11. top-level extensions

    View Slide

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

    View Slide

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

    View Slide

  14. lnline & reified

    View Slide

  15. ৑௕ͳܕͷهड़Λ΍ΊΔ
    WBMJUFNNPDL *UFNDMBTTKBWB

    WBMJUFN*UFNNPDL

    JUFNMFOHUI NPDL


    View Slide

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

    View Slide

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

    ܕফڈʹΑͬͯΤϥʔ

    View Slide

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

    ܕফڈʹΑͬͯΤϥʔ
    JOMJOFGVOSFJpFE5"OZNPDL
    .PDLJUPNPDL 5DMBTTKBWB

    View Slide

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

    ܕফڈʹΑͬͯΤϥʔ
    JOMJOFGVOSFJpFE5"OZNPDL
    .PDLJUPNPDL 5DMBTTKBWB

    JOMJOFԽͯ͠ܕύϥϝʔλʹSFJpFEΛ෇༩͢Δͱ5Λ۩৅ܕͱ͔ͯ͋ͭ͑͠Δ
    ˞LPUMJOSFqFDU͕ඞཁͰ͢

    View Slide

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

    WBMJUFN*UFNNPDL

    JUFNMFOHUI NPDL


    :FT

    View Slide

  21. Extension Properties

    View Slide

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

    JUFNMFOHUI
    JOWPLFE
    UIFO3FUVSO

    View Slide

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

    JUFNMFOHUI
    JOWPLFE
    UIFO3FUVSO

    ͳͯ͘΋Α͘ͳ͍ʁ

    View Slide

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

    WBM55JOWPLFE0OHPJOH4UVCCJOH5
    HFU
    JOWPLFE

    ɾ&YUFOTJPO1SPQFSUJFTͰ೚ҙͷΫϥεʹϓϩύςΟΛ෇༩͢Δ
    ɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠

    View Slide

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

    WBM55JOWPLFE0OHPJOH4UVCCJOH5
    HFU
    JOWPLFE

    ɾ&YUFOTJPO1SPQFSUJFTͰ೚ҙͷΫϥεʹϓϩύςΟΛ෇༩͢Δ
    ɾϓϩύςΟΞΫηε࣌ʹϝιουݺͼग़͠
    JUFNMFOHUI
    JOWPLFEUIFO3FUVSO

    View Slide

  26. Destructuring Declarations

    View Slide

  27. 85'
    JUFNTPNF.FUIPE BOZ*OU
    BOZ4USJOH
    BOZ
    BOZ


    JOWPLFE
    UIFO"OTXFS\
    WBMBJUBSHVNFOUT>BT*OU
    WBMCJUBSHVNFOUT>BT4USJOH
    WBMDJUBSHVNFOUT>BT*UFN
    WBMEJUBSHVNFOUT>BT/BNF
    EPTPNFUIJOH
    ^

    View Slide

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

    Bl)FMMPz
    C

    View Slide

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

    Bl)FMMPz
    C
    ಛఆͷϧʔϧʹԊͬͨΫϥεͰ
    %FTUSVDUVSJOH%FDMBSBUJPOT͕࢖͑Δɻ

    View Slide

  30. %FTUSVDUVSJOH%FDMBSBUJPOTͷϧʔϧ
    DMBTT'PP\
    PQFSBUPSGVODPNQPOFOU
    4USJOHʜ
    PQFSBUPSGVODPNQPOFOU
    *OUʜ
    PQFSBUPSGVODPNQPOFOU/

    ^
    GVOEP4PNFUIJOH GPP'PP
    \
    WBM B C
    GPP
    ʜ
    ^
    DPNQPOFOU/
    ͱ͍͏ϝιουΛඞཁͳ਺͚ͩ࣋ͭ

    View Slide

  31. %BUB$MBTTͰએݴָʑ
    EBUBDMBTT'PP WBMB4USJOH WBMC*OU

    GVOEP4PNFUIJOH GPP'PP
    \
    WBM B C
    GPP
    ʜ
    ^
    %BUB$MBTTͰলུՄೳ

    View Slide

  32. *OWPDBUJPO0O.PDLʹϝιουΛ௥Ճ
    JOMJOFGVOSFJpFE" SFJpFE# SFJpFE$
    *OWPDBUJPO0O.PDLBSHVNFOUT

    5SJQMF BSHVNFOUT>BT" BSHVNFOUT>BT# BSHVNFOUT>BT$

    View Slide

  33. *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

    View Slide

  34. Conclusion

    View Slide

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

    View Slide

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

    View Slide

  37. ͓·͚

    View Slide

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

    View Slide

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

    View Slide

  40. ؤுΖ͏

    View Slide