[毎日Kotlin] Day2. Java to Kotlin conversion(JavaをKotlinに変換)

はじめに

毎日Kotlinシリーズです。

このシリーズを初めての方はこちらです。「毎日Kotlin」はじめました | Developers.IO

問題

2日目は、既存のJavaコードがある想定で、Kotlin化のサポート機能を使ってみる問題。

Java to Kotlin conversion | Try Kotlin

We have a handy tool for Java developers: Java to Kotlin converter. It works better in IntelliJ IDEA, but you can try it online as well. To become familiar with it, please convert the code below. Copy Java code, choose 'Convert from Java' above and copy the result function back.

public class JavaCode {
    public String toJSON(Collection<Integer> collection) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        Iterator<Integer> iterator = collection.iterator();
        while (iterator.hasNext()) {
            Integer element = iterator.next();
            sb.append(element);
            if (iterator.hasNext()) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}

fun toJSON(collection: Collection<Int>): String = TODO()

IntelliJ IDEA or Android Studioで実際にやってみよう。

狙い

ここで考えて欲しい問題の意図はなんだろうか?

JetBrains神のやさしさを噛みしめましょう。

自動変換だとKotlinっぽいコードじゃないかもしれません。しかし初学者にはかなり有用な機能だと思います。コードの汚さには目をつぶってKotlin化の手順を覚えよう。

解答例

※ IntelliJ IDEAでも同じようなことができるはず。ここでは取り上げません。

Android Studioで変換その1

Javaクラスからメニューを使って変換してみよう

Android StudioでJavaCode.javaを作ります。

public class JavaCode {
    public String toJSON(Collection<Integer> collection) {
        StringBuilder sb = new StringBuilder();
        sb.append("[");
        Iterator<Integer> iterator = collection.iterator();
        while (iterator.hasNext()) {
            Integer element = iterator.next();
            sb.append(element);
            if (iterator.hasNext()) {
                sb.append(", ");
            }
        }
        sb.append("]");
        return sb.toString();
    }
}

Codeメニューから「Convert Java File to Kotlin File」を選択

変換後のKotlinコードです。

class JavaCode {
    fun toJSON(collection: Collection<Int>): String {
        val sb = StringBuilder()
        sb.append("[")
        val iterator = collection.iterator()
        while (iterator.hasNext()) {
            val element = iterator.next()
            sb.append(element)
            if (iterator.hasNext()) {
                sb.append(", ")
            }
        }
        sb.append("]")
        return sb.toString()
    }
}

Android Studioで変換その2

Javaクラスからショートカットを使って変換してみよう

その1と同様にJavaファイルを作成します。

Javaファイルを開いた状態で、ショートカットをおす。ご親切にショートカットキーまで書いてあります。

環境毎に違う可能性がありますので、ご自身の環境でショートカットをお調べください。

Android Studioで変換その3

Javaクラスからコマンド検索を使って変換してみよう

どこから、変換するんだっけ。と忘れてしまうことがあります。その時は最強コマンドの「コマンド検索」ができます。

デフォルト設定なら以下のショートカットのはずです。

ショートカットキー(Mac):Command + Shift + A

ショートカットキー(Windows):Ctrl + Shift + A

どんなときでも使える技なので、覚えておくと最悪探せます。

Android Studioで変換その4

JavaコードをコピーしてKotlinファイルに貼り付け時に変換してみよう。つまりktファイルにJavaのコードを貼り付けるだけです。そうすると変換するか聞かれます。

!?っとなる方いるでしょう。しかしこれだけなのです。たぶん一番これが楽だと思います。

「Kotlinでの書き方わからない。Kotlinだとこの機能なんだっけ。」となった時にとりあえずJavaで書いてktファイルに貼り付ける。そしてKotlinコードがわかる。検索キーワードをゲットできるので、調べやすい。すばらしい。

貼り付けするだけで、変換してくれるなんて。粋なはからいです。最高です。

余談

コレクションライブラリを使用する

え?それすでに標準であるよ!?っという身も蓋もない解答です。

fun toJSON(collection: Collection<Int>): String = collection.joinToString(prefix = "[", postfix = "]")

Kotlinっぽいコードにしたい

自動変換からの〜が気になっていると思います。以下のスライドはとても参考になります。

Day3.でまたお会いしましょう。