独自設計のAndroidアプリを設計ごとKotlinizeした話

231ca3ad65e9b2ef1172e06ff0e9612c?s=47 Shun Hosaka
December 19, 2017

 独自設計のAndroidアプリを設計ごとKotlinizeした話

R.kt #2の時の登壇資料です。

231ca3ad65e9b2ef1172e06ff0e9612c?s=128

Shun Hosaka

December 19, 2017
Tweet

Transcript

  1. ಠࣗઃܭͷ AndroidΞϓϦΛ ઃܭ͝ͱKotlinizeͨ͠࿩ ϦΫϧʔτϚʔέςΟϯάύʔτφʔζ อࡔॣ 4IVO)PTBLB 1

  2. ͸͡Ίʹ w อࡔॣ ΄͔͞͠ΎΜ  w ৽ଔ̍೥໨ w (JU)VC 2JJUBͳͲ3FZVSOJCMF

    w ΩοζϦʔͱ͍͏ϓϩμΫτͷ10݉ΤϯδχΞ
 ʢอҭԂ޲͚ͷαʔϏεʣ 2
  3. ࠓ೔ͷ಺༰ w ೖ͔ࣾͯ͠Βͪΐͪ͘ΐ͘΍͖ͬͯͨɺ
 ࣗϓϩμΫτͷ,PUMJOԽΛҾ͖ܧ͍ͩ࿩ w ,PUMJOಛ༗ͷ࿩ΑΓ΋ɺॻ͖׵͑ͷ࿩͕ଟΊ w ॻ͖׵͑Ұؾʹ΍ͬͯ΍ͬͨʂͰ͸ͳ͘ɺ
 ௕ظεύϯͰɺͲ͏Ҿ͖ܧ͍͔ͩͷ࿩ 3

  4. ܦҢ w ࠷ॳ͸ɺ֎஫Ͱ։ൃͨ͠ϓϩμΫτ w ಺੡ʹר͖औͬͯɺҰ෦,PUMJOʹϦϥΠτ͠ ͔ͯΒͷϦϦʔε w ಺੡Խͯ͠໿೥ɺࠓ೥ͷ݄ʹ"OESPJEͷ୲ ౰ऀ͕๻ʹ 4

  5. ݱঢ় w ,PUMJO཰ɺ͘Β͍ɻ w ओཁͳը໘͸େମϦϥΠτ͕ऴΘͬͯɺ࢒Γ ͸ઃܭը໘ͳͲ͕ଟ͍ɻ 5

  6. ॻ͖׵͑લ w +BWBͷίʔυ w ಠࣗઃܭɾൿ఻ͷλϨతͳίʔυ͕୔ࢁ͋Δ 6

  7. ॻ͖׵͑ޙ w ,PUMJOͷίʔυ w .71 %%%Ͱ%BUB#JOEJOHͳͲ౰࣌ͷτϨϯυ 7

  8. ϦϥΠτͷਐΊํ w ը໘͝ͱʹϦϥΠτ
 ɾϝϦοτɿ࡞ۀ୯Ґ͕෼͚΍͍͢ɾ෼୲͠΍͍͢
 ɾσϝϦοτɿϥΠϒϥϦΛണ͕ͨ͠Γ͢Δͷʹ͸ಓ͕௕͍ w ૚͝ͱʹϦϥΠτ
 ɾϝϦοτɿઃܭΛม͑΍͍͢
 ɾσϝϦοτɿมߋ͕େ͖͘ͳΓ͕ͪɺҰ෦ϦϦʔε͕͠ʹ͍͘ w

    ϦϑΝΫλϦϯάϦϥΠτ
 ɾϝϦοτɿεςοϓΛ౿ΜͰ៉ྷʹͰ͖Δ
 ɾσϝϦοτɿ޻਺͕͔͞Ή 8
  9. ϦϥΠτͷਐΊํ 9 w ̋ը໘͝ͱʹϦϥΠτ w ૚͝ͱʹϦϥΠτ w ϦϑΝΫλϦϯάϦϥΠτ w ཧ༝ɿ

    w ҰؾʹϦϥΠτ͢ΔͷͰ͸ͳ͘ɺ௕ظతͳϦϥΠτΛ૝ఆͨ͠ w طଘίʔυʹςετ͕ͳ͘ɺͦ΋ͦ΋ϦϑΝΫλϦϯάʹ΋ة ݥ͕͋ͬͨ
  10. ϦϥΠτͷํ਑ w ࡞Γͷѱ͍ͱ͜Ζ͔ΒϦϥΠτ w ϦϥΠτޙ͸ඞͣςετΛॻ͘ w ϦϥΠτ͕ऴΘΔ·Ͱ͸ɺϦϥΠτͨ͠ଆ΁ͷϥΠϒϥϦೖΕସ ͑͸ͻ͔͑Δ w 6*ܥ͸ೖΕସ͑ͨΓͯ͠Δ

    w ϦιʔεͳͲ΋طଘͷ΋ͷΛ࢖༻͠ͳ͍Ͱɺ৽͍͠΋ͷΛෳ੡ͳͲ ͯ͠࢖༻͢Δ w OFX@ͳͲͷQSFpYΛ෇͚ͯΔ 10
  11. ࣦഊஊͱڭ܇ w Ϣʔβʔʹ͸ɺKBWB͔LPUMJOԽ͸େͯؔ͠܎ͳ͍
 ɾۀ຿౎߹ͳͲͰɺ͕࣌ؒࠩ͠ഭͬͯΔ࣌ʹ΍Βͳ͍ w ࢓༷ͷมߋͱϦϥΠτ͸ಉ࣌ʹ΍Βͳ͍
 ɾϦϥΠτ͔ͯ͠Βվम͢Δ͔ɺมߋ͔ͯ͠ΒϦϥΠτ w ةͳ͍ͳΒແཧ΍Γ,PUMJOͰॻ͔ͳ͍
 ɾϏοτ഑ྻͷॲཧͳͲ,PUMJOͰஔ͖׵͑ʹ͍͘΋ͷ΋

    ͋Δ
 ɾҰ୴+BWBͷΫϥεͷ··ݺͼग़͢ɺͨͩ͠,PUMJOϑΥ ϧμʹೖΕ͓ͯ͘ 11
  12. ࠔΔ͜ͱ w ͕࣌ؒܦͭʹͭΕɺ,PUMJOԽͨ͠΋ͷͷதͰ ΋ϦϥΠτ͍ͨ͠΋ͷ͕ग़ͯ͘Δ w ϦϥΠτ͢Δͱ13ͷίʔυࠩ෼͕ଟ͘ͳͬͯɺ ϨϏϡʔͮ͠Β͍ 12

  13. νοϓε w Ϧιʔεͷ࢖༻਺Χ΢ϯτɿ
 "OESPJE3FTPVSDF6TBHF$PVOU
 IUUQTHJUIVCDPNOJPSHBJ"OESPJE3FTPVSDF6TBHF$PVOU  w ফ͍ͨ͠Ϋϥεͷ্Ͱɺ
 $PNNBOE ΫϦοΫ


    ͰґଘϑΝΠϧͷҰཡΛ֬ೝ͢Δ 13
  14. ,PUMJOԽͯ͠ ม͑ͨॻ͖ํ 14

  15. "DUJWJUZͳͲͷϏϧμʔύλʔϯ 15 ը໘͝ͱͷextensionΛ࡞ͬͨɻ ը໘໊.ktͰτοϓϨϕϧͷextensionΛॻ͍͍ͯΔ // file privateͳͷͰଞ͔Βࢀর͞ΕΔ͜ͱ͸ͳ͍ private object Keys

    { const val hoge = "Sample.hoge" } fun SampleActivity.Companion.createIntent(context: Context, hoge: String): Intent = Intent(context, SampleActivity::class.java).apply { put(Keys.hoge, hoge) } fun SampleFragment.Companion.newInstance(hoge: String): SampleFragment = SampleFragment().apply { arguments = Bundle().apply { putString(Keys.hoge, hoge) } } fun SampleActivity.createFragment(): SampleFragment = SampleFragment.newInstance(intent.getStringExtra(Keys.hoge)) fun SampleFragment.parseHoge(): String = arguments.getString(Keys.hoge) ※SampleActivityͱSampleFragmentʹ͸ɺͦΕͧΕ companion object;ͱ͍͏ܗͷهࡌ͕ඞཁɻ
  16. ίʔϧόοΫ 16

  17. ͓ΘΓʹ w ϦϥΠτ͸ແ஡ͤͣɺ௕ظઓΛݟਾ͑ͯ΍Δ w ݴޠ؀ڥ͕มΘΔͷͰɺઈରతͳํ਑͸ཱͯ ͳ͍ w ϦϥΠτ͕ϢʔβʔՁ஋ΛੜΉͱա৴͠ͳ͍ 17