Slide 1

Slide 1 text

Kotlin in Google I/O 2017 2017.05.29 CA.apk #3 @satorufujiwara

Slide 2

Slide 2 text

About me Satoru Fujiwara (@satorufujiwara) Android Engineer @CyberAgent ,Inc Shibuya.apk

Slide 3

Slide 3 text

Kotlin & Me FRESH! (KotlinͰ։ൃ 2015೥3݄ʙ) 2016೥ɺKotlinͰAndroid։ൃ͢Δํ΁ @Qiita - goo.gl/0medax CA.kt #1 6/15(໦)

Slide 4

Slide 4 text

Kotlin in Google I/O 2017 @satorufujiwara

Slide 5

Slide 5 text

Google Keynote

Slide 6

Slide 6 text

Kotlin in Keynote • KotlinΛAndroidʹ͓͚Δެࣜݴޠͱͯ͠αϙʔτ • JetBrainsࣾΛύʔτʔφʔͱͯ͠Kotlinࡒஂͷઃཱ • طଘͷίʔυ(Java)ʹ΋͞ΒͳΔ౤ࢿΛ͢Δ

Slide 7

Slide 7 text

Why Kotlin? • Kotlin͸Androidͷ։ൃऀίϛϡχςΟ͕طʹٻΊ͍ͯ ͨݴޠͰɺ։ൃऀͷੜ࢈ੑΛߴΊΔ͜ͱ͕ग़དྷΔ • AndroidͷϥϯλΠϜͱͷ׬શͳޓ׵ੑ͕͋Γɺطଘͷ ίʔυͱͷ૬ޓӡ༻͕ՄೳͰ͋Δ • ૉ੖Β͍͠IDEʹΑΔαϙʔτ • ݴޠ͕੒ख़͠ɺ੡඼൛ͱͯ͠ϦϦʔεՄೳͳঢ়ଶͰ͋Δ

Slide 8

Slide 8 text

Developer Keynote

Slide 9

Slide 9 text

4 big themes in Android • Kotlin • Android Studio & Libraries • App Quality & Success • Android Instant App

Slide 10

Slide 10 text

Kotlin in Developer Keynote • First-class Language ʹ • γϯλοΫεϊΠζͷগͳ͍ඒ͍͠ݴޠ • Android Studio 3.0 ʹ૊Έࠐ·ΕΔ • Java8 ͷ͞ΒͳΔαϙʔτ(Android O)

Slide 11

Slide 11 text

Android Studio 3.0

Slide 12

Slide 12 text

buid.gradle buildscript { ext.kotlin_version = '1.1.2-4' dependencies { classpath 'com.android.tools.build:gradle:3.0.0-alpha1' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" } } app/build.gradle apply plugin: ‘kotlin-android' dependencies { compile "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version" }

Slide 13

Slide 13 text

Why Kotlin? in Developer Keynote • Kotlin͸Javaͱͷ׬શͳ૬ޓӡ༻͕ग़དྷɺ1Ϋϥε͔ΒKotlinԽͰ͖Δ • 100% interoperable with Java and Android • ։ൃ͔Β5೥ܦͪɺݴޠ͕੒ख़͠ɺ੡඼൛ͱͯ͠ϦϦʔεՄೳͳঢ়ଶͰ͋ Γɺ࣮ࡍʹ࢖ΘΕ͍ͯΔ • Flipboard,Pinterest ,Square Cash, Expedia • ݴޠ͕ૉ੖Β͍͠ͷʹՃ͑ɺIDEαϙʔτ͕ૉ੖Β͍͠ • Android Studioͷϕʔεͱͳ͍ͬͯΔIntelliJ IDEAͱಉ͡νʔϜ • Kotlin͸طʹApache2ϥΠηϯεͷΦʔϓϯιʔε͕ͩɺ͜Ε͔Β΋Φʔ ϓϯιʔεϓϩδΣΫτͱͯ͠ඇӦརࡒஂ͕։ൃ͍ͯ͘͠

Slide 14

Slide 14 text

Sessions about Kotlin • Introduction to Kotlin • Life is Great and Everything Will Be Ok, Kotlin is Here

Slide 15

Slide 15 text

Introduction to Kotlin Google I/O 2017 : Introduction to Kotlin (࿨༁/ཁ໿) @Qiita goo.gl/U24xkw

Slide 16

Slide 16 text

Life is Great and Everything Will Be Ok, Kotlin is Here • KotlinͰAndroidΛ։ൃ͢Δ্ͰͷTips • by Jake Wharton (Square) @JakeWharton • KotlinΛ͍͔ʹͯ͠ಋೖ͔ͨ͠ʁ • by Christina Lee (Pinterest) @RunChristinaRun • https://speakerdeck.com/jakewharton/life-is-great-and- everything-will-be-ok-kotlin-is-here-google-io-2017 • https://www.youtube.com/watch?v=fPzxfeDJDzY

Slide 17

Slide 17 text

Kotlin͕ެࣜݴޠʹͳͬͯ • Android։ൃͰʮKotlinΛબͿ͜ͱʯ͕ग़དྷΔ • Ҿ͖ଓ͖Javaͷ஌ࣝ͸ඞཁ • Swiftͱ͸ࣅͯඇͳΔݴޠɺڞ௨Խ͸ग़དྷͳ͍ • Kotlin͸ࣗ༝౓͕ߴ͘ɺ͜Ε·ͰҎ্ʹֶशɾ νʔϜͰͷٞ࿦͕ඞཁ

Slide 18

Slide 18 text

Kotlin͸ࣗ༝౓͕ߴ͍

Slide 19

Slide 19 text

ྫ1: lambda

Slide 20

Slide 20 text

fun findEmails(users: List, predicate: (String) -> (Boolean)) : List { //… } findEmails(users, { value -> value.endsWith(".com") })

Slide 21

Slide 21 text

fun findEmails(users: List, predicate: (String) -> (Boolean)) : List { //… } findEmails(users, { value -> value.endsWith(".com") }) findEmails(users, { it.endsWith(".com") })

Slide 22

Slide 22 text

fun findEmails(users: List, predicate: (String) -> (Boolean)) : List { //… } findEmails(users, { value -> value.endsWith(".com") }) findEmails(users, { it.endsWith(".com") }) findEmails(users) { it.endsWith(".com") }

Slide 23

Slide 23 text

ྫ2: nullable

Slide 24

Slide 24 text

data class Money(val amount: Int, val currency: String) fun sumUp(money : Money?) { // money is nullable }

Slide 25

Slide 25 text

data class Money(val amount: Int, val currency: String) fun sumUp(money : Money?) { sumOfAmount += money!!.amount }

Slide 26

Slide 26 text

data class Money(val amount: Int, val currency: String) fun sumUp(money : Money?) { sumOfAmount += money!!.amount }

Slide 27

Slide 27 text

data class Money(val amount: Int, val currency: String) fun sumUp(money : Money?) { if (money != null) { sumOfAmount += money.amount } }

Slide 28

Slide 28 text

data class Money(val amount: Int, val currency: String) fun sumUp(money : Money?) { if (money != null) { sumOfAmount += money.amount } } fun sumUp(money : Money?) { money ?: return sumOfAmount += money.amount }

Slide 29

Slide 29 text

data class Money(val amount: Int, val currency: String) fun sumUp(money : Money?) { if (money != null) { sumOfAmount += money.amount } } fun sumUp(money : Money?) { money ?: return sumOfAmount += money.amount } fun sumUp(money : Money?) { sumOfAmount += money?.amount ?: 0 }

Slide 30

Slide 30 text

data class Money(val amount: Int, val currency: String) fun sumUp(money : Money?) { if (money != null) { sumOfAmount += money.amount } } fun sumUp(money : Money?) { money ?: return sumOfAmount += money.amount } fun sumUp(money : Money?) { sumOfAmount += money?.amount ?: 0 } fun sumUp(money : Money?) { money?.run { sumOfAmount += amount } }

Slide 31

Slide 31 text

ྫ3: είʔϓؔ਺

Slide 32

Slide 32 text

companion object { private const val KEY_USER = “user” fun newInstance(user: User): UserFragment { val fragment = UserFragment() val args = Bundle() args.putParcelable(KEY_USER, user) fragment.argument = args return fragment } }

Slide 33

Slide 33 text

companion object { private const val KEY_USER = “user” fun newInstance(user: User): UserFragment { val fragment = UserFragment() val args = Bundle() args.putParcelable(KEY_USER, user) fragment.argument = args return fragment } fun newInstance(user: User): UserFragment { val fragment = UserFragment() fragment.argument = Bundle().apply { putParcelable(KEY_USER, user) } return fragment } }

Slide 34

Slide 34 text

companion object { private const val KEY_USER = “user” fun newInstance(user: User): UserFragment { val fragment = UserFragment() val args = Bundle() args.putParcelable(KEY_USER, user) fragment.argument = args return fragment } fun newInstance(user: User): UserFragment { val fragment = UserFragment() fragment.argument = Bundle().apply { putParcelable(KEY_USER, user) } return fragment } fun newInstance(user: User) = UserFragment().apply { arguments = Bundle().apply { putParcelable(KEY_USER, user) } } }

Slide 35

Slide 35 text

είʔϓؔ਺ • let / with / run /apply / also • Kotlin είʔϓؔ਺ ༻్·ͱΊ@Qiita • http://qiita.com/ngsw_taro/items/ d29e3080d9fc8a38691e

Slide 36

Slide 36 text

How to start Kotlin • Official Site : kotl.in/ , kotl.in/android • Kotlin is awesome! (kotlin.link/) • Kotlin ελʔτϒοΫ(੺΂͜ຊ) • Kotlin Advent Calendar (2015/2016)

Slide 37

Slide 37 text

How to start Kotlin • Official Site : kotl.in/ , kotl.in/android • Kotlin is awesome! (kotlin.link/) • Kotlin ελʔτϒοΫ(੺΂͜ຊ) • Kotlin Advent Calendar (2015/2016) • Kotlinೖ໳·Ͱͷॿ૸ಡຊ( goo.gl/5vUT7o )

Slide 38

Slide 38 text

Thank you ! Let’s enjoy Kotlin