プログラマに優しい現実指向JVM言語 Kotlin入門

第1回 Kotlinを勧める理由

この記事を読むのに必要な時間:およそ 3 分

今回からプログラマに優しい現実指向JVM言語 Kotlinを紹介します。最終的なゴールとしてはKotlinを使ったAndroidアプリケーション開発を解説します。今回は導入として,Kotlinの概要や特徴について説明します。

Kotlinとは

Kotlin(コトリン)というプログラミング言語をご存じですか?

IntelliJ IDEAなどのIDE(Integrated Development Environment:統合開発環境)で有名なJetBrainsが中心となって開発が進められている新しいプログラミング言語です。2011年夏に発表され,現在Apache 2.0ライセンスのもと,OSS(Open Source Software)として開発環境とそのソースコードが公開されています

Kotlinで書かれたコードはJVM(Java Virtual Machine:Java仮想マシン)で動作するJavaバイトコード(おなじみのclassファイル)へコンパイルされます。このようなプログラミング言語をJVM言語と呼ぶことがあります。ScalaやGroovyもKotlinと同じくJVM言語の1つです。さらにJavaScriptへのコンパイルもサポートしているaltJSの1つでもあります。Androidアプリの開発もサポートしています。

Kotlinは型推論やラムダ式,トレイトなどのモダンな文法,機能を持った静的型付けの本格的なオブジェクト指向言語です。Javaよりも簡潔で安全なコードを書けることが特徴です。執筆時現在のバージョンは0.10.195で,目下開発途中にあります。

なぜKotlinなのか

世の中には,すでに数えきれないほどプログラミング言語が存在します。その中からなぜKotlinを選ぶのか,これについて言及します。

まず言えることは,JVM言語であるということです。Javaは世界中で使われている非常に人気の高い言語です。1995年の登場以来,多くのコードが書かれ,多くのシステムが運用されてきました。Javaは今も進化を続けており,昨年3月にJava SE 8がリリースされたのは記憶に新しいです。しかし,その反面で後方互換性を維持するために記述の冗長さや型安全の問題は改善されにくい現状にあります。そこでJVM言語の登場です。Javaの抱える問題から解放されてプログラミングできるだけではなく,高い信頼と性能を持ったJVM上で動くこと,Javaによって記述された既存のライブラリ/フレームワークなどの資産を活用できるなどのメリットも併せ持っています。

JVM言語だけでもその数は非常に多いです。有名なものでは,ScalaやGroovyが真っ先に思い浮かびますね。このような競合がある中でJetBrainsは,次のようなKotlinの設計ゴールを定めています

  • Java互換
  • 少なくともJavaと同等のコンパイル速度
  • Javaよりも安全:nullポインタの逆参照注1のようなありふれた落とし穴のための静的チェックなど
  • Javaよりも簡潔:型変数の推論,高階関数(クロージャ)⁠拡張関数,ミックスインや第一級デリゲーションなどをサポート
  • Scalaよりもシンプルな方法で,表現力を実用的なレベルに維持する

特徴的なのは,nullポインタの逆参照,すなわちNullPointerExceptionが起こり得ないようなしくみNULL安全が言語機能として提供されているところです。その他にもミスを未然に防いでくれる機能があり,Javaよりもつまらないバグを生みにくい言語となっています。安全に重きを置くとコードが複雑になるのではないか,という心配があるかと思いますが,その点もKotlinでは考慮されています。これらのような特徴に加え,Javaから離れすぎない文法による学習コストの小ささから,実際の業務での利用に適しているのではないかと筆者は考えています。

注1)
dereferenceのこと。

Kotlinの特徴

簡潔,安全,JavaバイトコードとJavaScriptへコンパイル可能,静的型付け,オブジェクト指向,クロージャ……。これらはKotlinを説明する常套句に過ぎません。ですが,どれもKotlinの特徴を端的に表している重要な言葉です。簡単なコードを交えて1つずつ紹介していきます。

簡潔であること

Kotlinはコード自体のシンプルさはもとより,文法すなわち記述ルールも簡潔です。コードが簡潔であることでキーを叩く回数が少なくなり誤りが混入しづらいだけでなく,可読性が増しメンテナンスのコスト低減を期待できます。そして文法が簡潔であることで学習コストが小さく,プログラマのレベルの違いから引き起こされるコードのばらつきを,小さく抑えることができます。リスト1は毎度おなじみのHelloWorldをKotlinで記述したコードです。

リスト1 KotlinでHelloWorld

package sample

fun main(args: Array<String>) {
  val message = "Hello, world!"
  println(message)
}

CLIの黒い画面から挨拶文が表示されるだけのプログラムですが,Kotilnの特徴がうかがえます。まずはトップレベルに関数を定義できることがわかります。funキーワードが関数定義のために必要なキーワードです。そしてmainという名前で,Array<String>型の引数を取る関数がKotlinプログラムのエントリポイントです。変数の型を,変数名の後に置くのもJavaとは異なる点です。

表示するメッセージを変数messageに代入しています。Kotlinではvalキーワードなどを使って変数を宣言します。messageString型ですが,それは右辺から推論できるので明示する必要はありません。

printlnは引数の値を標準出力に書き出す関数です。;(セミコロン)を置いて文の終端を明示する必要はありません。同じ行に続けて文を書く場合には;で区切る必要があります。

安全であること

前述のとおり,KotlinはJavaと比べて安全です。型やnullの扱いが厳格です。たとえばKotlinではキャストやnullの逆参照による実行時例外が起こることは非常にまれです。

Kotlin ではnullが代入され得る変数と,され得ない変数を区別します。リスト2注2は,bnullを代入しようとしている個所でコンパイルエラーとなります。通常の型(ここではStringの変数へnullは代入できないのです。

リスト2 通常の型の変数にはnullを代入できない

val a: String = "Kotlin" // OK
val b: String = null // NG!!

少し変更を加えたリスト3はコンパイルに成功します。変数とdの型がString?になっています。

リスト3 ?付きの型の変数にはnullを代入できる

val c: String? = "Kotlin" // OK
val d: String? = null // OK

このような?が末尾に付く型の変数はnullを代入可能です。しかし,その変数が参照するオブジェクトのメンバへのアクセスに制限が伴います。NullPointerExceptionを防ぎNULL安全を貫くためです。NULL安全については,次回以降で説明します。

注2)
コードの説明上,main関数が不要な場合は省略します。

著者プロフィール

長澤太郎(ながさわたろう)

早稲田大学情報理工学科を2012年に卒業。同年入社したメーカー系SIerを経て,2013年にエムスリー株式会社へ入社。以来,世界の医療を変革するためソフトウェアエンジニアとして従事。

日本Kotlinユーザグループ代表,日本Javaユーザグループ幹事を務める。国内初となるKotlin入門書「Kotlinスタートブック」(リックテレコム)の著者。

ビールとディズニーが大好き。

コメント

コメントの記入