Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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