$30 off During Our Annual Pro Sale. View Details »

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

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

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

Takehata Naoto

August 25, 2018
Tweet

More Decks by Takehata Naoto

Other Decks in Programming

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. 以上