Slide 1

Slide 1 text

Kotlin Conf報告会 @ CA.kt #4 AAkira - Kotlin Types -

Slide 2

Slide 2 text

@_a_akira AAkira CyberAgent, Inc. Akira Aratani private lateinit var aakira : User data class User(val name: String, val twitterId: String, val githubId: String, val company: String) print("Name : ${aakira.name}”) println("Github Id : ${aakira.githubId}") print("Twitter Id : ${aakira.twitterId}") println("Company : ${aakira.company}") $ whois

Slide 3

Slide 3 text

About • 生放送配信プラットフォーム ≠ AbemaTV ≒ • M11の頃からFull Kotlinで開発 • サーバサイドも1年前からKotlinを使用

Slide 4

Slide 4 text

私とKotlin M1 2012-04-12 M11 2015-03-19 M14 2015-10-01 1.0-beta4 2015-12-22 M13 2015-09-16 1.0 2016-02-16 1.0-RC 2016-02-04 2016-01-21 Release 2015-04 開発開始 kotlin FRESH 1.1 2017-03-01 2017-05-15 Renewal

Slide 5

Slide 5 text

No content

Slide 6

Slide 6 text

No content

Slide 7

Slide 7 text

Svetlana Isakova @JetBrains Kotlin in Action の著者の1人

Slide 8

Slide 8 text

No content

Slide 9

Slide 9 text

Agenda • Basic types • Nullable types • Collection types

Slide 10

Slide 10 text

Agenda • Basic types • Nullable types • Collection types • Kotlin/Java types • Unit, Nothing, void • Collections →

Slide 11

Slide 11 text

Kotlin types Java types

Slide 12

Slide 12 text

Kotlin, Java Types fun foo(): Int = 1 fun bar(): Int? = 1

Slide 13

Slide 13 text

Kotlin, Java Types

Slide 14

Slide 14 text

Kotlin, Java Types public static final int foo() { return 1; } @Nullable public static final Integer bar() { return Integer.valueOf(1); }

Slide 15

Slide 15 text

Kotlin, Java Types public static final int foo() { return 1; } @Nullable public static final Integer bar() { return Integer.valueOf(1); }

Slide 16

Slide 16 text

Kotlin, Java Types Int → int Int? → java.lang.Integer

Slide 17

Slide 17 text

Kotlin, Java Types Double → int Double? → java.lang.Integer Boolean → boolean Boolean? → java.lang.Boolean

Slide 18

Slide 18 text

Kotlin, Java Types List → List kotlin.String → java.lang.String Array → Integer[]

Slide 19

Slide 19 text

Kotlin, Java Types List → List kotlin.String → java.lang.String Array → Integer[]

Slide 20

Slide 20 text

Kotlin, Java Types "one.two".replaceAll(".", "*")

Slide 21

Slide 21 text

Kotlin, Java Types "one.two".replaceAll(".", "*") ********

Slide 22

Slide 22 text

Kotlin, Java Types "one.two".replaceAll(".", "*") "one.two".replace(".", "*") ********

Slide 23

Slide 23 text

Kotlin, Java Types "one.two".replaceAll(".", "*") "one.two".replace(".", "*") ******** one*two

Slide 24

Slide 24 text

Kotlin, Java Types "one.two".replace(".".toRegex(), "*") "one.two".replaceAll(".", "*") "one.two".replace(".", "*") ******** one*two

Slide 25

Slide 25 text

Unit, Nothing, void

Slide 26

Slide 26 text

Unit, Nothing, void void Unit Nothing

Slide 27

Slide 27 text

Unit, Nothing, void void Unit Nothing ≠ ,

Slide 28

Slide 28 text

Unit, Nothing, void void Unit

Slide 29

Slide 29 text

Unit, Nothing, void Unit The type with only one value: the Unit object. This type corresponds to the `void` type in Java.

Slide 30

Slide 30 text

Unit, Nothing, void void Unit ⇨ 意味のない値を返す =

Slide 31

Slide 31 text

Unit, Nothing, void Nothing has no instances. You can use Nothing to represent "a value that never exists”: for example, if a function has the return type of Nothing,
 it means that it never returns (always throws an exception). Nothing

Slide 32

Slide 32 text

Unit, Nothing, void Nothing ⇨ 存在しないを表す, 値は返さない

Slide 33

Slide 33 text

Unit, Nothing, void val foo = if (bar) { 123 } else { fail() } fun fail() { throw IllegalStateException() }

Slide 34

Slide 34 text

Unit, Nothing, void val foo = if (bar) { 123 } else { fail() } fun fail(): Unit { throw IllegalStateException() }

Slide 35

Slide 35 text

Unit, Nothing, void val foo = if (bar) { 123 } else { fail() } fun fail(): Unit { throw IllegalStateException() }

Slide 36

Slide 36 text

Unit, Nothing, void val foo = if (bar) { 123 } else { fail() } fun fail(): Unit { throw IllegalStateException() } Int Unit

Slide 37

Slide 37 text

Unit, Nothing, void Int Unit Any

Slide 38

Slide 38 text

Unit, Nothing, void val foo: Any = if (bar) { 123 } else { fail() } fun fail(): Unit { throw IllegalStateException() }

Slide 39

Slide 39 text

Kotlin, Java Types Any → java.lang.Object

Slide 40

Slide 40 text

Unit, Nothing, void val foo: Any = if (bar) { 123 } else { fail() } fun fail(): Unit { throw IllegalStateException() } ⇨ fooはInt型にしたい

Slide 41

Slide 41 text

Unit, Nothing, void val foo = if (bar) { 123 } else { fail() } fun fail(): Nothing { throw IllegalStateException() }

Slide 42

Slide 42 text

Unit, Nothing, void val foo = if (bar) { 123 } else { fail() } fun fail(): Nothing { throw IllegalStateException() } Int Nothing

Slide 43

Slide 43 text

Unit, Nothing, void Int Unit Any Nothing

Slide 44

Slide 44 text

Unit, Nothing, void val foo: Int = if (bar) { 123 } else { fail() } fun fail(): Nothing { throw IllegalStateException() }

Slide 45

Slide 45 text

Unit, Nothing, void val foo: Int = if (bar) { 123 } else { fail() } fun fail(): Nothing { throw IllegalStateException() }

Slide 46

Slide 46 text

Collections

Slide 47

Slide 47 text

Collections kotlin.MutableList kotlin.List

Slide 48

Slide 48 text

Collections val mutableList = mutableListOf(1, 2, 3) val list: List = mutableList println(list) // [1, 2, 3]

Slide 49

Slide 49 text

Collections val mutableList = mutableListOf(1, 2, 3) val list: List = mutableList println(list) // [1, 2, 3] mutableList.add(4) println(list)

Slide 50

Slide 50 text

Collections val mutableList = mutableListOf(1, 2, 3) val list: List = mutableList println(list) // [1, 2, 3] mutableList.add(4) println(list) // [1, 2, 3, 4]

Slide 51

Slide 51 text

Collections ⇨ Read-only ≠ immutable mutableList.add(4) println(list) // [1, 2, 3, 4]

Slide 52

Slide 52 text

Collections fun foo(): List = listOf(1) fun bar(): MutableList = mutableListOf(1) ⇨ Decompile

Slide 53

Slide 53 text

Collections @NotNull public static final List foo() { return CollectionsKt.listOf(Integer.valueOf(1)); } @NotNull public static final List bar() { return CollectionsKt.mutableListOf(
 new Integer[]{Integer.valueOf(1)}); }

Slide 54

Slide 54 text

Collections @NotNull public static final List foo() { return CollectionsKt.listOf(Integer.valueOf(1)); } @NotNull public static final List bar() { return CollectionsKt.mutableListOf(
 new Integer[]{Integer.valueOf(1)}); }

Slide 55

Slide 55 text

Collections kotlin.MutableList kotlin.List java.util.ArrayList

Slide 56

Slide 56 text

Summary

Slide 57

Slide 57 text

Summary • Decompile to Java code • Nothing ≠ Unit, void • Read-only ≠ immutable

Slide 58

Slide 58 text

Have a nice Kotlin!