Convert Java File to Kotlin File おかしな変換集

Convert Java File to Kotlin File おかしな変換集

Kotlin Fest 2018のLT大会発表のスライドです。

D1531f9547e24397c7e85881fac03096?s=128

Takehata Naoto

August 25, 2018
Tweet

Transcript

  1. Convert Java File to Kotlin File おかしな変換集 株式会社 アプリボット ⽵端

    尚⼈
  2. ⾃⼰紹介 ⽵端 尚⼈ @n_takehata 分野:サーバーサイドエンジニア(Kotlin) 2006.04 2007.12 2011.01 2014.04 公務員

    SES サイバーエージェント アプリボット 業種:ゲーム開発
  3. 省略します

  4. •  IntelliJにはJavaのコードをKotlinに変換して くれる素晴らしい機能があります •  対象ファイルを選択 -> Code -> Convert Java

    File to Kotlin File
  5. 2万⾏を⼀気に変換した時に出た おかしな変換例を紹介します!

  6. 1個⽬

  7. public String getMessage() { UserService userService = new UserService(); return

    userService.createMessage(); } val message: String get() { val userService = UserService() return userService.createMessage() } なんかプロパティになってる Java Kotlin
  8. 拡張プロパティ val score1 = 0 val score2 = 0 val

    totalScore get() = score1 + score2 ・get〜という名前の引数なしメソッドが  全てプロパティとして認識されてしまう ・割とゴリゴリ処理を書いた拡張プロパティが  できあがった
  9. 2個⽬

  10. Java Kotlin public sta8c Integer calc(Integer num1, Integer num2) {

    return num1 + num2; } companion object { fun calc(num1: Int?, num2: Int?): Int { return num1!! + num2!! } } 謎のオブジェクトcompanionが出現する
  11. コンパニオンオブジェクト Javaから呼び出そうとすると、Companionというオブジェクトを 経由しなくてはならなくなる companion object { fun execute() { //

    ・・・
 } } Sample.Companion.execute(); Java Kotlin staticな関数を定義したい時、コンパニオンオブジェクトを使う
  12. companion object { @JvmStaMc fun execute() { // ・・・
 }

    } @JvmSatic付けてあげてね
  13. 3個⽬(最後)

  14. Java public String execute(Integer userId, Integer targetId) { Map<Integer, String>

    userMap = createUserMap(); return userMap.entrySet() .stream() .filter(entry -> { if (userMap.containsKey(userId)) { return true; } if (userMap.containsKey(targetId)) { return true; } return false; }).map(entry -> { return entry.getValue(); }).toString(); }
  15. Kotlin fun execute(userId: Int?, targetId: Int?): String { val userMap

    = createUserMap() return userMap.entries .stream() .filter { entry -> if (userMap.containsKey(userId)) { return@userMap.entrySet() .stream() .filter true } if (userMap.containsKey(targetId)) { return@userMap.entrySet() .stream() .filter true } false }.map { entry -> entry.value }.toString() }
  16. 難しいのであとで聞いてください

  17. •  Convert Java File to Kotlin Fileは素晴らしい 機能 •  でも頼りすぎるとエラーまみれになる

  18. ツールの⽤法・容量を守って Kotlinを愛でましょう

  19. Kotlinかわいい!

  20. 以上