Kotlin

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索
Kotlin
パラダイム オブジェクト指向
登場時期 2011年
設計者 アンドリー・ブレスラフ、ドミトリー・ジェメロフ
開発者 アンドリー・ブレスラフ、ドミトリー・ジェメロフ
最新リリース マイルストーンM6 / 2013年08月12日(12か月前) (2013-08-12 ダウンロードサイト参照
型付け 静的型付け
主な処理系 Java仮想マシンが動作するオペレーティングシステム
方言 なし
影響を受けた言語 JavaGroovyScala
プラットフォーム

JavaプラットフォームAndroid含む)、

JavaScript
ライセンス Apache 2.0
ウェブサイト kotlin.jetbrains.org
拡張子 kt

Kotlin(ことりん、コトリン)は、ジェットブレインズ社のアンドリー・ブレスラフ、ドミトリー・ジェメロフが開発した、静的型付けオブジェクト指向プログラミング言語である。

開発経緯[編集]

Kotlin言語は、ジェットブレインズ社の研究所のひとつ、ロシア連邦レニングラード州都のサンクトペテルブルクで生まれた。

ジェットブレインズ社は JavaRubyPython などのプログラミング言語による開発環境などを開発して販売してきた。Kotlin言語は同社が経験を活かしてJava言語をもっと簡潔、安全になるように改良した産業利用向け汎用言語として、2011年7月20日に発表された。

オペーレーティング・システムによらずJava仮想マシン上で動く。Java言語が書かれたプログラムと同じほど速くコンパイルされ同じほど速く動作するとしている。

Java言語に望まれている機能であっても互換性を保つために実現できていない機能や、将来のJava言語の仕様で実現が予定されている機能から、有用と思う機能を採用した。また、Java仮想マシンで動く点で似ているスクリプト言語 Groovy関数型プログラミング言語色の強い Scala から、機能や簡易記法(糖衣構文)を採用した。

2012年2月14日KotlinApacheライセンス バージョン2.0に基づいてオープンソース化された[1]

アプリケーションプログラミングインタフェース[2]が公開され、ウェブサイト上でのデモンストレーション[3] のほか、スタンドアローンコンパイラの形と同社提供の統合開発環境IntelliJ IDEA」上のプラグインの形で、マイルストーン安定版「M1」が2012年4月12日より提供[4]された。

「M2」では言語機能が強化されたほか、Android 上の開発、動作も可能となり、JavaScript へのコンパイルもサポートされて応用が広がった。「M3」で約400件の障害修正を行ない、性能向上、型引数推論の強化その他を行った。「M4」で128件の障害修正を行ない、型引数推論の高速化、JDK 7 対応、データクラスの copy メソッド新設などを行った。

名称[編集]

コトリン島にちなんで命名された。コトリンは、開発の地サンクトペテルブルクに近いバルト海フィンランド湾にあり、全長約12kmの細長い島である。

もともと Kotlin というのは湯沸かしのやかんを表すフィンランド語であり、Kotlin 言語のロゴマークもやかんである。

公式サイトには[5]「この島から名前が付いたコトリン型駆逐艦というのがありますが、Kotlin 言語は別にクラスを駆逐しようというわけではありません」とか、Java の由来がコーヒーであることにかけて「この島ではコーヒーなどの外来植物はあまり作っていないと思います」というジョークを載せている。

日本ではことりんが「小鳥」に聞こえて可愛いと言われる。

特徴[編集]

Java 言語よりも簡潔に書けることを目指している。たしかに KotlinHello World プログラムでも、JavaHello World プログラムよりは短い。

文の末尾にセミコロンが不要、また、function の意味のキーワードが短縮形のfunだったりという小技もあるが、オブジェクトを生成する文の左辺と右辺に型を書くことなく一度書けば済むようにした。必ずしも型を毎回宣言しなくてよい型推論機能を設け、また、敢えて初期値なしの変数定義を可能にした。

var str: String? = "foo";

のようにヌル収容可能と明示しておけば実行時に「str=null ;」などをしてしまってもヌルポインター例外で落ちなくなった。ほかにも、性能と機能性を保ちながら簡潔化を図るさまざまな工夫が凝らされている。

Java では数値をもつオブジェクト変数の演算は「+」「-」「*」「/」などでできなかった。メソッド名の引数の中にメソッドを入れたりドットでつないだメソッドチェインの記法によるので長い式は分かりにくかった。Kotlin には演算子オーバロード機能が採用されたので、自然な四則演算式で記述できる(例.BigDecimal の項を「+」「*」などでつないで加減乗除できる)。演算子オーバロードは C++ 言語にもあるが初心者が濫用するとミスを招く諸刃の剣との懸念もあり、Java では要望も強かったが採用されなかった。それにしてもこの機能は、桁数の大きな数値計算を多用する事務処理計算などに威力を発揮する、強力な機能といえる。

関数には名前付き引数と規定値の機能がある[6]。これにより、関数をひとつ

fun edit( 
   number   : Int, 
   blankIf0 : Boolean = true, 
   comma    : Boolean = true, 
   maxSize  : Int = 18) { 
  // some work
  ...
 }

と定義するだけで、呼び出し側は

edit(number)
edit(number, comma = true, maxSize = 10)
edit(number, maxSize = 10, blankIf0 = true)

などのように、そのとき規定値から変えたい引数だけ選んで指定できる(Kotlin では「blankIf0=true」といった代入式は戻り値を返さない仕様なので、代入の戻り値を引数に与えているのかどうかという曖昧性は生じない)。Java では引数を毎回多数並べて順序で識別するのが基本で、一部のみ使うメソッドがあればオーバロードで多数定義する、あるいは呼び出し前に規定値から変更する必要のあるフィールド値を順々にセットするなど、冗長で分かりにくい方法しかなかった。Kotlin では他言語でも昔から多くサポートされているこの名前付き引数を採用したので、オプションの組合せをもつ機能が明快に定義でき明快に呼べるようになった。

特徴的な機能は以下のとおり[7]

  • 演算子オーバロード
  • ヌル安全を保証
  • 高次関数(クロージャ
  • ミックスインと第一級デリゲーション
  • プロパティ(フィールドはない)
  • 具象ジェネリックス
  • 宣言箇所分散および使用箇所分散
  • 拡張関数
  • モジュール、ビルド基盤機能
  • インライン関数(オーバヘッドなしクロージャ)
  • パターンマッチング
  • Java との相互運用性(Kotlin から Java を呼び出すことも、Java から Kotlin を呼び出すこともできる)

統合開発環境[編集]

同社提供の統合開発環境 IntelliJ IDEA で利用できる。将来は自社製品でない統合開発環境 Eclipse でのサポートも予定。

関連項目[編集]

脚注[編集]

[ヘルプ]

外部リンク[編集]

Kotlin開発元からの情報へのリンク[編集]

日本語解説サイト・研究会へのリンク[編集]

その他のリンク[編集]