Slide 1

Slide 1 text

KotlinΛ࢖ͬͯࢥͬͨ10ͷίτ ࡾ௡ࢁ խن (chocomelon) 2017/0705 fukuoka.kt #1

Slide 2

Slide 2 text

ࣗݾ঺հ ࡾ௡ࢁ խن (chocomelon) ωΠςΟϒΞϓϦΛओʹ୲౰ 2013೥ϐΫγϒೖࣾ Kotlinྺ 3िؒ

Slide 3

Slide 3 text

ฐࣾͷKotlin࠾༻ঢ়گ

Slide 4

Slide 4 text

pixivʢJavaʣ

Slide 5

Slide 5 text

pixiv ίϛοΫʢJava & Kotlinʣ

Slide 6

Slide 6 text

pixiv SketchʢJavaɺKotlinʹ͍ͨ͠ʣ

Slide 7

Slide 7 text

PawooʢJavaɺKotlinʹ͍ͨ͠ʣ

Slide 8

Slide 8 text

෱ԬͰ৽ن։ൃதͷΞϓϦ => Kotlin

Slide 9

Slide 9 text

෱ԬͰ৽ن։ൃதͷΞϓϦ ɾKotlin ɾAndroid Architecture Components ɹɾViewModel, LiveData, Room ɾDataBinding ɾRxJava/Android

Slide 10

Slide 10 text

KotlinΛ࢖ͬͯࢥ͏10ͷίτ

Slide 11

Slide 11 text

1. Extension͕͢͹Β͍͠ fun ImageView.setImageUrl(imageUrl: String?) { if (imageUrl == null || !URLUtil.isValidUrl(imageUrl)) { return } Glide.with(context).load(imageUrl).into(this) }

Slide 12

Slide 12 text

2. ؔ਺ܕ௒࠷ߴ͔Α arrayOf(1, 2, 3, 4, 5) // 1, 2, 3, 4, 5 .filter { it % 2 == 0 } // 2, 4 .map {it * 2 } // 4, 8 .sum() // 12

Slide 13

Slide 13 text

3. σϑΥϧτ஋Ҿ/਺͕ศར fun hoge(fugaString: String, fooInt: Int = 0, barBoolean: = true) { // Do something } val fuga: Int = optionalVal1 ?: 5

Slide 14

Slide 14 text

4. when͕εϚʔτ viewModel?.getDataSourceState()?.observe(this, Observer { when (it) { DataSourceState.SUCCESS -> infoView.setType(InfoView.Type.HIDE) DataSourceState.LOADING -> infoView.setType(InfoView.Type.LOADING) DataSourceState.EMPTY_DATA -> infoView.setType(InfoView.Type.NOTFOUND) DataSourceState.ERROR -> infoView.setType( InfoView.Type.ERROR, View.OnClickListener { reload() }) } })

Slide 15

Slide 15 text

5. SmartCast͕ྑ͍ fun hoge(optionalVal1: String?, optionalVal2: String?) { if (optionalVal1 != null && optionalVal2 != null) { val hoge = optionalVal1 + optionalVal2 // Do something } } if (object is Person) { print(object.name) }

Slide 16

Slide 16 text

6. είʔϓؔ਺͕ศར class HogeActivity: AppCompatActivity() { companion object { val BUNDLE_KEY_HOGE_INT = "HOGE_INT" fun createIntent(context: Context, hogeInt: Int): Intent = Intent(context, HogeActivity::class.java).apply { putExtra(BUNDLE_KEY_HOGE_INT, hogeInt) } } }

Slide 17

Slide 17 text

7. let let ͕Ϝζ͍ optionalVal1?.let { optionalVal1 -> optionalVal2?.let { optionalVal2 -> // Do something } }

Slide 18

Slide 18 text

7. let let ͕Ϝζ͍ if (optionalVal1 != null || optionalVal2 != null) { return } // Do something

Slide 19

Slide 19 text

7. let let ͕Ϝζ͍ optionalVal1 ?: optionalVal2 ?: return // Do something

Slide 20

Slide 20 text

7. let let ͕ຊ౰ʹϜζ͍ inline fun let(s: S?, t: T?, block: (s: S?, t: T?) -> R) { if (s != null && t != null) { block(s, t) } } let(optionalVal1, optionalVal2) { optionalVal1, optionalVal2 -> // Do something }

Slide 21

Slide 21 text

8. Gson࢖͍ͬͯΔ৔߹͸஫ҙ✋ ɾNonNullͷobjectʹNull͕ೖͬͯ͘Δ ɾύʔε࣌͸Θ͔Β࣮ͣߦ࣌ʹࢮ͵ ɾmoshi࢖͓͏ https://github.com/square/moshi

Slide 22

Slide 22 text

9. AndroidΤϯδχΞ͕΍Δؾ ɾؓࢄͱͯͨ͠Slack͕Kotlinͷॻ͖ํٞ࿦ ɹͰ੝Γ্͕Δ ɾࢼߦࡨޡָ͕͍͠ ɾ͙͢͸͡ΊΒΕΔ => Ұ෦Kotlinʹม͑ͯ΋ྑ͍͠ɺ ɹ ࣗಈม׵΋ͦͦ͜͜༗ೳ

Slide 23

Slide 23 text

10. iOSͷΤϯδχΞ͕΍Δؾ ɾʮKotlinͩͬͨΒྑ͍Ͱ͢Αʯ ɾʮSwiftͱࣅͯΔ͡ΌΜʯ ɾʮָͦ͠͏ʢখฒʣʯ

Slide 24

Slide 24 text

෱ԬΦϑΟεͰΤϯδχΞืूத ڵຯ͕͋Δํ͸·ͣϥϯνͰ΋͠·͠ΐ͏ʂ https://www.wantedly.com/projects/90433