Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

⾃⼰紹介 ⽵端 尚⼈ @n_takehata 分野:サーバーサイドエンジニア(Kotlin) 2006.04 2007.12 2011.01 2014.04 公務員 SES サイバーエージェント アプリボット 業種:ゲーム開発

Slide 3

Slide 3 text

省略します

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

1個⽬

Slide 7

Slide 7 text

public String getMessage() { UserService userService = new UserService(); return userService.createMessage(); } val message: String get() { val userService = UserService() return userService.createMessage() } なんかプロパティになってる Java Kotlin

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

2個⽬

Slide 10

Slide 10 text

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が出現する

Slide 11

Slide 11 text

コンパニオンオブジェクト Javaから呼び出そうとすると、Companionというオブジェクトを 経由しなくてはならなくなる companion object { fun execute() { // ・・・
 } } Sample.Companion.execute(); Java Kotlin staticな関数を定義したい時、コンパニオンオブジェクトを使う

Slide 12

Slide 12 text

companion object { @JvmStaMc fun execute() { // ・・・
 } } @JvmSatic付けてあげてね

Slide 13

Slide 13 text

3個⽬(最後)

Slide 14

Slide 14 text

Java public String execute(Integer userId, Integer targetId) { Map 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(); }

Slide 15

Slide 15 text

Kotlin fun execute(userId: Int?, targetId: Int?): String { val userMap = createUserMap() return userMap.entries .stream() .filter { entry -> if (userMap.containsKey(userId)) { [email protected]() .stream() .filter true } if (userMap.containsKey(targetId)) { [email protected]() .stream() .filter true } false }.map { entry -> entry.value }.toString() }

Slide 16

Slide 16 text

難しいのであとで聞いてください

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

Kotlinかわいい!

Slide 20

Slide 20 text

以上