JavaエンジニアがKotlinを触ってみて感じたこと

システム開発グループの角刈り、関谷です。今はSMOOSY開発を担当しています。
今回は最近話題のプログラミング言語Kotlinを紹介します。

Kotlinってなに?

Kotlinとはプログラミング言語の1つで、Kotlinで書いたコードはJVM(Java Virtual Machine)上で動作するJavaバイトコードにコンパイルされます。
2017年5月からAndroidの公式言語に加わり、今では主にAndroidのアプリ開発で使われています。それ以外にも、Spring Framework のバージョン 5.0からKotlinを使ってWeb開発ができるようになり、注目されています。

Kotlinとの出会い

とあるWebの記事で、Kotlinでアプリ開発をすると1つのソースコードでAndroid・iOSの両方のアプリ開発が出来ることを知りました。その時はAndroidやiOSのアプリ開発に直接関わっていなかったので「便利だな〜」程度に思っていました。
今年度からシステム開発グループのAndroidチームに加わったので、以前から興味があったKotlinを実際に触ってみることにしました。
その後、JJUG2017 SpringでKotlinのセッションがあることを知り、参加してきました。
発表内容は、JavaのサンプルコードをKotlinで書き直したコードと比較するというものでした。発表資料は英語で書かれていますが、サンプルコードが多いので英語が苦手でもJavaが分かる方なら分かりやすいと思います。興味のある方は是非見てください。

「Javaエンジニアから見たKotlinの魅力」
https://www.slideshare.net/JSUXDesign/the-charm-of-the-kotlin-as-seen-from-a-java-engineer

発表資料の14ページ目「Nullに対する安全性」で、”KotlinはデフォルトではNullの代入を許可していないため、NullPointerExceptionはほぼ発生しない”と聞き、さらに興味が湧きました。詳しくは次で説明します。

Kotlinの特徴

ここではKotlinの特徴を3つ紹介します。

1つ目は、Javaと組み合わせてプログラミングができることです。
1つのシステムを新しいプログラミング言語で書き換えようとすると、全てのプログラムを書き換えないといけません。しかしKotlinはJavaとの互換性があるので、一部のプログラムだけを置き換えることができます。そのため導入のハードルが低いのが特徴です。

2つ目は、Javaの豊富なライブラリが使えることです。
新しいプログラム言語ではライブラリが乏しいことが多いのですが、Javaのライブラリがそのまま使えるので、開発する手間が減ります。

3つ目は、Nullに対する安全性が高いことです。
KotlinはデフォルトでNullの代入を許可していないため、代入するとコンパイルエラーになります。(どうしても代入するなら変数の宣言時に型の後ろに「?」を付けることで代入が可能になります。)
下のサンプルコードは変数にNullを代入した場合の挙動です。3行目に「?」がついていない変数text2にNullを代入しようとしてエラーが表示されています。

次はNullを代入した場合の処理について紹介します。
下のサンプルコードの3行目ではNullを許可している変数textに対して、Nullチェックをしていないためコンパイルエラーになっています。

文字列の長さを出力する前にNullチェックを入れるとコンパイルエラーが解消されます。

このようにNullに対して厳しくチェックしてくれるので、Nullチェックの漏れ防止に繋がり、NullPointerExceptionが発生する可能性が低くなります。

Kotlinを触る前に

まずは開発環境構築です。前提条件としてJavaをインストールしておいてください。Kotlinは各開発ツールにプラグインが用意されています。

IntelliJの場合

IntelliJは有料版と無料版があります。どちらも初期設定でKotlinプラグインがインストールされています。Kotlinプラグインを最新バージョンへアップデートして使ってください。

Android Studio・Eclipseの場合

Android StudioまたはEclipseをインストール後に起動し、メニューバーからプラグインをインストールしてください。

プラグインインストール画面(Eclipse)

Kotlinを実際に触る

簡単なサンプルコードを書いてみました。1から10までの数値のリストをループして、値によって処理を分けるプログラムです。

サンプルコード

出力結果

Javaと大きく異なる箇所を2つ紹介します。

1つ目はレンジです。
2行目の「1..10」をレンジと言います。指定した最小値と最大値の範囲を扱うことができます。今回はリストを作成するために使いました。

2つ目はwhen文です。Kotlinのwhen文を一言で言うと、Javaのswitch文の上位互換です。条件分岐は定数のほかに型や式を指定できます。文法はJavaに似ているのでJavaエンジニアであれば理解しやすいと思います。以下のサンプルコードでは4行目にwhen文を使用しています。

Kotlinを触ってみた感想

KotlinはJavaの知識がそのまま使えるので、Javaエンジニアならそれほど時間をかけずに習得できそうです。既存のJavaプロジェクトの一部にKotlinを導入できる点も魅力で、他の言語で作り直す時間がないからという理由でKotlinの導入を諦めなくていいのです。
ただしKotlinは制約が厳しい言語です。制約を厳しいまま使ってもいいのですが、厳しすぎると逆に生産性が落ちてしまいます。コーディングルールで、どのレベルまで許容するかがポイントになると思います。制約が厳しい状態からスタートして、状況に応じてコーディングルールを整える方が良いでしょう。

今までのシステム開発は複数のプログラム言語を習得して、WebとAndroidはJavaで開発し、iOSはSwiftで開発をしていることが多かったと思います。これからはWeb・Android・iOSの全てをKotlinでプログラミングすることができます。全てと言ってもWebとMobile(Android・iOS)は今まで通り別々にプログラミングしなければいけませんが、AndroidとiOSは1つのプログラムで開発できるので、プログラミングする時間が短縮できます。メリットに比べてデメリットが少ないので、Kotlinに興味がある方は是非触ってみてください。