Slide 1

Slide 1 text

KOTLIN + ANDROID ϑϩϯτΤϯυษڧձ in ࢁӄ#03
 2017/12/08 όϨɾϙʔϧ

Slide 2

Slide 2 text

ΞδΣϯμ ➤ Kotlinݴޠͱ͸
 ➤ Kotlinݴޠͷػೳ
 ➤ AndroidͰ࣮૷͸Ͳ͏ͳΔʁ 2

Slide 3

Slide 3 text

ࣗݾ঺հ ➤ όϨɹϙʔϧ ➤ ϑϥϯεग़਎ ➤ ೔ຊࡏॅ̔೥໨ʢ౦ژɺٶ࡚ɺদߐʣ ➤ גࣜձࣾιχοΫϜʔϒɹౡࠜࣄۀॴɺϑϩϯτΤϯδχΞ ➤ ϞόΠϧ։ൃܦݧ͸̍೥ʢiOSɺAndroidʣ ➤ ϒϩάɿhttp://paulbarre.co ➤ Githubɿhttps://github.com/paulbarre 3

Slide 4

Slide 4 text

KOTLINͱ͸ ➤ KotlinʢίτϦϯʣ ➤ JetBrainsࣾ (PHPStorm, IntelliJ IDEA…ʣ
 ͕։ൃͯ͠Δ ➤ JVM্Ͱಈ࡞͢Δ ➤ ੩తܕ෇ͷOOPݴޠ ➤ ؔ਺ܕݴޠ ➤ Φʔϓϯιʔε
 Kotlinݴޠͷϩΰ ϑΟϯϥϯυ࿷ʹ͋ΔίτϦϯౡʢϩγΞʣ 4

Slide 5

Slide 5 text

KOTLINͷཤྺ ➤ 2010೥ɹ։ൃͷ͸͡Ί ➤ 2011೥7݄20೔ɹൃද ➤ 2012೥2݄14೔ɹApache 2.0ϥΠηϯεʹج͍ͮͯΦʔϓϯ ιʔεԽ ➤ 2016೥2݄15೔ɹKotlin v1.0ϦϦʔε ➤ 2017೥5݄17೔ɹGoogle I/OͰAndroidΞϓϦ։ൃʹ౰ͨͬͯ ୈҰڃݴޠͷҰͭબఆ 5

Slide 6

Slide 6 text

KOTLINΛ࣮ࡍ࢖ͬͯΔΞϓϦ ➤ KotlinݴޠΛ࢖͍ͬͯΔΞϓϦ͕૿͍͑ͯΔ https://developer.android.com/kotlin/index.html 6

Slide 7

Slide 7 text

HELLO KOTLIN! fun main(args: Array) { println("Hello, Kotlin!") } 7

Slide 8

Slide 8 text

جຊͷؔ਺ fun add(x: Int, y: Int): Int { fun x + y } fun add(x: Int, y: Int): Int = x + y fun add(x: Int, y: Int) = x + y 8

Slide 9

Slide 9 text

NULL҆શ class MyClass() { fun doSomething() { … } } val a: MyClass = null //ίϯύΠϧΤϥʔ val b: MyClass? = null b.doSomething() //ίϯύΠϧΤϥʔ 9

Slide 10

Slide 10 text

WHEN fun cases(obj: Any) { when (obj) { 1 -> println("One") "Hello" -> println("Greeting") is Long -> println("Long") !is String -> println("Not a string") else -> println("Unknown") } } 10

Slide 11

Slide 11 text

֦ுؔ਺ fun MutableList.swap(index1: Int, index2: Int) { val tmp = this[index1] this[index1] = this[index2] this[index2] = tmp } 11

Slide 12

Slide 12 text

֦ுϓϩύςΟ val List.lastIndex: Int get() = size - 1 12

Slide 13

Slide 13 text

SWIFTͱҧ͏͚ͲɺࣅͯΔͱ͜Ζ͕͋Δ // Swift var, let func foo(arg: Any) -> Any class MyClass {} var ins = MyClass() ins.add(x: 1, y: 2) // Kotlin var, val fun foo(arg: Any): Any class MyClass {} var ins = MyClass() ins.add(1, 2) 13

Slide 14

Slide 14 text

SWIFTͱҧ͏͚ͲɺࣅͯΔͱ͜Ζ͕͋Δ // SwiftͷOptional let ins2: MyClass? ins2?.foo() if let ins2 = ins2 { ins2.foo() } // KotlinͷNullable val ins2: MyClass? ins2?.foo() if (ins2 != null) { ins2.foo() } 14

Slide 15

Slide 15 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛσʔλΫϥε 15 data class User(val name: String, val age: Int) ➤ getters / settersʢvarͷ৔߹ʣ ➤ equals ➤ hashCode ➤ toString
 
 ্هͷؔ਺͸ࣗಈͰ࡞ͬͯ͘ΕΔ

Slide 16

Slide 16 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛϥϜμػೳ 16 // Java view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), “Click", Toast.LENGTH_SHORT).show(); } }); // Kotlin view.setOnClickListener(object : OnClickListener { override fun onClick(v: View) { toast("Click") } })

Slide 17

Slide 17 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛϥϜμػೳ 17 // Java view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), “Click", Toast.LENGTH_SHORT).show(); } }); // Kotlin view.setOnClickListener({ view -> toast(“Click”) })

Slide 18

Slide 18 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛϥϜμػೳ 18 // Java view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), “Click", Toast.LENGTH_SHORT).show(); } }); // Kotlin view.setOnClickListener({ toast(“Click”) })

Slide 19

Slide 19 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛϥϜμػೳ 19 // Java view.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Toast.makeText(v.getContext(), “Click", Toast.LENGTH_SHORT).show(); } }); // Kotlin view.setOnClickListener { toast(“Click”) }

Slide 20

Slide 20 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛANDROID EXTENSION 20 // Java TextView view = (TextView) findViewById(R.id.hello); view.setText(“Hello!”); // Kotlin import kotlinx.android.synthetic..* …
 hello.text = “Hello!”

Slide 21

Slide 21 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛޓ׵ੑ 21 ➤ Java͔Βม׵͸؆୯ ➤ StackoverflowʢͳͲʣ͔Βͷίϐϖ͕ ؆୯ ➤ KotlinͱJava͸Ұॹʹಈ͘

Slide 22

Slide 22 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛANKO ➤ AnkoɿਓؾͷϥΠϒϥϦ
 https://github.com/Kotlin/anko ➤ Anko layoutsʢDSLʣ 22 verticalLayout { val name = editText() button("Say Hello") { onClick { toast("Hello, ${name.text}!") } } }

Slide 23

Slide 23 text

ANDROIDͰ࣮૷͸Ͳ͏ͳΔʁʛANKO ➤ AnkoɿਓؾͷϥΠϒϥϦ
 https://github.com/Kotlin/anko ➤ Anko Intent 23 val intent = Intent(this, SomeOtherActivity::class.java) intent.putExtra("id", 5) intent.setFlag(Intent.FLAG_ACTIVITY_SINGLE_TOP) startActivity(intent) startActivity(intentFor("id" to 5).singleTop())

Slide 24

Slide 24 text

KOTLINͱؾʹͳͬͨͱ͜Ζ ➤ ৚݅ԋࢉࢠ͕ͳ͍ ➤ SwiftΈ͍ͨͷguard let͕ͳ͍ ➤ let͸Swiftͱͷҧ͏
 ➤ JavaΑΓϏϧυ͕࣌ؒ஗͍
 https://medium.com/keepsafe-engineering/kotlin-vs-java- compilation-speed-e6c174b39b5d ➤ JavaΑΓύοέʔδϑΝΠϧͷαΠζ͕େ͖͍ 24 val user = findUser(id) user?.let { foundUser -> }

Slide 25

Slide 25 text

·ͱΊ ➤ ҆શɿNullPointerException ➤ ؆ܿɿίʔυͷྔ͕ݮΔ ➤ Javaͱͷޓ׵ੑ
 ม׵͸؆୯
 Android SDK͸ී௨ʹ࢖͑Δ ➤ Android StudioͰ࢖͍΍ֶͯ͘͢ͼ΍͍͢ 25

Slide 26

Slide 26 text

ϦϯΫ ➤ Kotlin
 https://kotlinlang.org/ ➤ KotlinϓϩδΣΫτͷGithub
 https://github.com/JetBrains/kotlin
 ➤ Φεεϝͷϒϩάʢ@lime_clʣ
 https://antonioleiva.com
 ➤ Try Kotlin!
 https://try.kotlinlang.org
 26

Slide 27

Slide 27 text

“ ͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ 27