2017_12_18-19_Kotlin_Conf_Report_Kotlin_Types_Updated

Daec7e5cd5fae384eda88037d937343b?s=47 AAkira
December 18, 2017

 2017_12_18-19_Kotlin_Conf_Report_Kotlin_Types_Updated

CA.kt #5, 6 Kotlin Conf Report in Osaka, Fukuoka
Kotlin Types
This presentation based on Kotlin Exposed Type by Svetlana Isakova in Kotlin Conf 2017.

https://cyberagent.connpass.com/event/73540/
https://cyberagent.connpass.com/event/73541/

Daec7e5cd5fae384eda88037d937343b?s=128

AAkira

December 18, 2017
Tweet

Transcript

  1. Kotlin Conf報告会 @ CA.kt #5, 6 AAkira - Kotlin Types

    -
  2. @_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
  3. About • 生放送配信プラットフォーム ≠ AbemaTV ≒ • M11の頃からFull Kotlinで開発 • サーバサイドも1年前からKotlinを使用

  4. 私と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
  5. None
  6. None
  7. Svetlana Isakova @JetBrains Kotlin in Action の著者の1人

  8. None
  9. Agenda • Basic types • Nullable types • Collection types

  10. Agenda • Basic types • Nullable types • Collection types

    • Kotlin/Java types • Any, Unit, Nothing, void • Collections →
  11. Kotlin types Java types

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

    Int? = 1
  13. Kotlin, Java Types

  14. Kotlin, Java Types public static final int foo() { return

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

    1; } @Nullable public static final Integer bar() { return Integer.valueOf(1); }
  16. Kotlin, Java Types Int → int Int? → java.lang.Integer

  17. Kotlin, Java Types Double → double Double? → java.lang.Double Boolean

    → boolean Boolean? → java.lang.Boolean
  18. Kotlin, Java Types List<Int> → java.util.List<Integer> kotlin.String → java.lang.String Array<Int>

    → Integer[]
  19. Kotlin, Java Types List<Int> → java.util.List<Integer> kotlin.String → java.lang.String Array<Int>

    → Integer[]
  20. Kotlin, Java Types "one.two.".replaceAll(".", "*")

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

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

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

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

    one*two*
  25. Any, Unit, Nothing, void

  26. Any java.lang.Object Any, Unit, Nothing, void

  27. Any, Unit, Nothing, void The root of the Kotlin class

    hierarchy. Every Kotlin class has [Any] as a superclass. Any
  28. Any, Unit, Nothing, void log(2017) fun log(any: Any) { println("Value:

    $any") } fun log(i: Int) { println("Value: $i”) }
  29. Any, Unit, Nothing, void log(2017) fun log(any: Any) { println("Value:

    $any") } fun log(i: Int) { println("Value: $i”) } Auto boxing
  30. Any, Unit, Nothing, void fun log(i: Int) { println("Value: $i”)

    }
  31. Any, Unit, Nothing, void fun log(any: Any) { println("Value: $any")

    }
  32. Any, Unit, Nothing, void Int String Any

  33. val hoge: Int? = 2017 log(hoge) fun log(any: Any) {

    println("Value: $any") } Any, Unit, Nothing, void
  34. val hoge: Int? = 2017 log(hoge) fun log(any: Any) {

    println("Value: $any") } Any, Unit, Nothing, void ⇨ Compile Error
  35. Any, Unit, Nothing, void Any Nullable Type Any? Non-null Type

  36. Any, Unit, Nothing, void void Unit Nothing

  37. Any, Unit, Nothing, void void Unit Nothing ≠ ,

  38. Any, Unit, Nothing, void void Unit

  39. Any, Unit, Nothing, void Unit The type with only one

    value: the Unit object. This type corresponds to the `void` type in Java.
  40. Any, Unit, Nothing, void void Unit ⇨ 意味のない値を返す =

  41. Any, 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
  42. Any, Unit, Nothing, void Nothing ⇨ 存在しないを表す, 値は返さない

  43. Any, Unit, Nothing, void val foo = if (bar) {

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

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

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

    123 } else { fail() } fun fail(): Unit { throw IllegalStateException() } Int Unit
  47. Any, Unit, Nothing, void Int Unit Any

  48. Any, Unit, Nothing, void val foo: Any = if (bar)

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

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

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

    123 } else { fail() } fun fail(): Nothing { throw IllegalStateException() } Int Nothing
  52. Any, Unit, Nothing, void Int Unit Any Nothing

  53. Any, Unit, Nothing, void val foo: Int = if (bar)

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

    { 123 } else { fail() } fun fail(): Nothing { throw IllegalStateException() }
  55. Nothing? Any, Unit, Nothing, void

  56. Any, Unit, Nothing, void Int Unit Any Nothing

  57. Any, Unit, Nothing, void Non-null Type Any Nothing Non-null Type

  58. Any, Unit, Nothing, void Any Any? Non-null Type Nothing

  59. Any, Unit, Nothing, void Any Nullable Type Any? Non-null Type

    Nothing
  60. Any, Unit, Nothing, void Any Nullable Type Any? Non-null Type

    Nothing? Nothing
  61. Collections

  62. Collections kotlin.MutableList kotlin.List

  63. Collections val mutableList = mutableListOf(1, 2, 3) val list: List<Int>

    = mutableList println(list) // [1, 2, 3]
  64. Collections val mutableList = mutableListOf(1, 2, 3) val list: List<Int>

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

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

    3, 4]
  67. Collections fun foo(): List<Int> = listOf(1) fun bar(): MutableList<Int> =

    mutableListOf(1) ⇨ Decompile
  68. 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)}); }
  69. 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)}); }
  70. Collections kotlin.MutableList kotlin.List java.util.ArrayList

  71. Summary

  72. Summary • Decompile to Java code • Nothing ≠ Unit,

    void • Read-only ≠ immutable
  73. Have a nice Kotlin!