システムエンジニアの子育て

子育てや、仕事、日々の生活で感じたことを発信していきます。

Javaと比べてKotlinが便利だと思ったこと

最近プログラミング言語であるKotlinにふれる機会がありました。
KotlinがJavaと比べて便利だと思ったことを書いてみようと思います。

Kotlinって?

JVM上で動作するプログラミング言語です。
2011年にJetBrains社により発表されました。
2019年のStack Overflow Developer Surveyでは、注目の言語4位に入っています。
ただ、使用言語としては全体の6.4%とまだまだ普及しきっていません。

insights.stackoverflow.com

Javaと相互互換があり、お互いに作成したプログラムを呼び出す事が可能です。
代表的なもので以下の特徴があります。

基本的にはJavaより簡潔に記述できることが多いです。

Javaとの記述との違いは?

JavaとKotlinの違いを挙げていきます。

例1:null safe

Kotlinでは変数を定義するときに、nullが入る場合は明示的に「?」を付ける必要があります。
「?」がない場合はnullは入ることはありません。

Java

    public void test1(String value) {
        String s = value;
        if (value == null) {
            s = "";
        }
    }

Kotlin

    fun test1(value: String) {
        // nullは入らないためチェック不要
        val s = value
    }

例2:if文を式に入れられる

Java

    public String test2(String value) {
        if (value == null) {
            return "";
        } else {
            return value;
        }
    }

Kotlin

    fun test2(value: String?): String {
        return if (value == null) {
            ""
        } else {
            value
        }
    }

例3:nullを特定の値に置換

よく発生するnullだったら特定の値に変更するという処理。
例2のケースでもKotlinだとエルビス演算子でシンプルにかけます。

Kotlin

    // 例2よりシンプル
    fun test3(value: String?): String {
        return value ?: ""
    }

    // ワンラインならこんな書き方も
    fun test3another(value: String?) = value ?: ""

例4:データクラス

データを格納するオブジェクトを定義するときは非常にシンプルになります。

Java

    class TestData {
        private String code;
        private String name;

        TestData(String code, String name) {
            this.code = code;
            this.name = name;
        }

        public String getCode() {
            return code;
        }

        public String getName() {
            return name;
        }
    }

Kotlin

    class TestData (
        val code: String,
        val name: String
    )

また、data classにすることでequals()やhashcode()をオーバーライドすることなく、オブジェクトの等価確認が可能になります。
value objectを生成するときに非常に便利です。

Kotlin

    data class TestData (
        val code: String,
        val name: String
    )

    fun test4(testData: TestData) {
      val testData2 = TestData("1", "太郎")
      // オブジェクトの等価確認が可能
      if (testData == testData2) {
          print(testData)
      }
    }

例5:オブジェクトのnull確認

オブジェクト自体がnullだった場合、値を取得する処理を記述するときにKotlinでは「?.」を使用することで非常にシンプルにかけます。

Java

    public String test5(TestData data) {
        if (data == null) {
            return null;
        } else {
            return data.getName();
        }
    }

Kotlin

    // dataがnullでもヌルポにはならない
    fun test5(data: TestData?) = data?.name

例6:stream api

Kotlinではわざわざstream apiを記述する必要がないため、非常にシンプルに記述できます。

Java

    public List<String> test6(List<TestData> list) {
        return list.stream()
            .map(TestData::getName)
            .collect(Collectors.toList());
    }

Kotlin

    fun test6(list: List<TestData>) = list.map { it.name }.toList()

Kotlinでコードを書き続けて

他にも便利な部分はありますが、パッと思いついたものを記載してみました。
かなりシンプルに記述できるので、Javaに戻りたくなくなるレベルです。
興味を持っている方は、これを読んで良いきっかけになればと思います。
JetBrains社のIntellJ IDEAではJavaからKotlinへの自動変換機能もあるため、試してみるのも良いと思います。
また、Kotlin駆け出しの方へオススメの書籍は下記です。
基本的な内容は記載されているため、勉強の参考になればと思います。

Kotlinイン・アクション

Kotlinイン・アクション