Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2017_09_20_Java2Kotlin_IDOM

AAkira
September 20, 2017
190

 2017_09_20_Java2Kotlin_IDOM

Java to Kotlin hands on
Github repository
https://github.com/AAkira/Java2KotlinPractice

AAkira

September 20, 2017
Tweet

More Decks by AAkira

Transcript

  1. @_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
  2. 準備 • Android Studio 2.3以上
 最新の3.0-beta5でも可
 https://developer.android.com/studio/index.html • Emulator or

    出来れば実機 
 で実行出来る環境が良いが無くても良い • このRepositoryをcloneして下さい
 https://github.com/AAkira/Java2KotlinPractice • 資料のリンクは @_a_akira で呟いています
  3. Kotlinとは • JetBrains社が開発したJVM上で動く言語 • Javaとの完全互換 • 簡潔に生産性を高く書ける • Google I/O

    2017で正式採用 • Android, Server(Spring)がメインだが、iOS, JS向け もサポートしていく予定
  4. Agenda • val, var • Data class • if, when,

    for, while • Null • Extension • Lambda
  5. val, var • var : 可変変数定義 • val : 不変変数定義

    • 型推論可能な場合は省略可能 val hoge: Int = 0 hoge = 10 // compile error var hoge = 0 // ܕ͸লུՄೳ
  6. Data class • getter, setterはプロパティアクセスで可能 • copy, toString, hasCode, equalsを自動生成

    // Java class Hoge { private String foo; private int bar; Hoge(String foo, int bar) { ... } public String getFoo() { return foo; } ... } // Kotlin data class Hoge(var foo: String, var bar: Int)
  7. if, when, for, while • if : Javaとほぼ同じ, 値を返せる =>

    三項演算子に置き換え可能 • when : switchの進化版(Kotlinにswitchはない) • for : for-eachのみ(Kotlinにfor(int i = 0; i <…)はない) • while : Javaと同じ // if 
 val hoge = if(foo > bar) 10 else 100 // when val hoge = when(foo) { 0 -> "a" 1 -> "b" else -> "c" } // for for (item in hogeList) { result += item }
  8. Null • non-null : 通常の定義 • nullable : 型の後ろに『?』をつける •

    primitive型もnullableに出来る • 変数の後ろに?を付けるとnullの場合は何もしない val foo: String = 0 var bar: String? = null // if(foo != null) foo.lengthΛࣗಈͰ΍ͬͯ͘ΕΔ val hoge = foo?.length // ڧ੍తʹΞΫηε΋Մೳfoo͕nullͩͱψϧϙ val hoge = foo!!.length // elvisԋࢉࢠͰnullͩͬͨ࣌ͷॲཧ΋ॻ͚Δ val hoge = bar ?: 0
  9. Extension : 拡張関数 • スコープ関数 (run, let, apply, also, with)

    • forEach()も拡張関数 • 自分で既存のクラスに定義することも可能 fun String.toInt(): Int = java.lang.Integer.parseInt(this) val hoge = "100".toInt() val hoge: String = “100" // run಺Ͱ͸this.***ͱ͍͏ҙຯ hoge.run { print(toInt()) // print 100 print(length) // print 3 }
  10. Lambda • 値として扱える関数 • 高階関数の引数にもなる • lambda式の引数が1つの場合は『it』でアクセス可 • lambda式の引数が1つの場合は()を省略可能 //

    Java button2.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { } } // Kotlin : SAMม׵ button.setOnClickListener { } // શ෦ಉ͡ҙຯ lambda.hoge({ foo: Int -> foo }) lambda.hoge() { foo: Int -> foo} lambda.hoge({ foo }) lambda.hoge() { foo } lambda.hoge { foo }
  11. 準備 • Android Studio 2.3以上
 最新の3.0-beta5でも可
 https://developer.android.com/studio/index.html • Emulator or

    出来れば実機 
 で実行出来る環境が良いが無くても良い • このRepositoryをcloneして下さい
 https://github.com/AAkira/Java2KotlinPractice • 資料のリンクは @_a_akira で呟いています
  12. Lesson Agenda • Lesson1 : val, var 3 min •

    Lesson2 : Data class  3 min • Lesson3 : if, when, for, while 5 min • Lesson4 : Null 7 min • Lesson5 : Extension 7 min • Lesson6 : Lambda 10 min
  13. Points • Lesson毎にKotlinに変換していきましょう • Branch • master branch -> Java

    • kotlin branch -> Kotlinで解答を書いています • Convert to Kotlinを有効に使って下さい
  14. Lesson2 • data class
 => PokemonDataクラスは1行になります
 => Default arguments •

    Property access 
 => foo.setBar(bar), getBar() • ${} で変数にアクセス可能