Kotlinは、バージョン1.1に向けて開発が進められている。 Kotlin言語のリードデザイナ、Andrey Breslav氏は、JetBrain用JVM言語の新バージョンに関するロードマップを説明した。この中で、彼は主な新言語機能について述べている。
Kotlin 1.1はいくつもの新言語機能を提供する。
-
型エイリアス(type aliases)は、長い型宣言に対する略称指定の仕組みを提供する。 型エイリアスは、新しい型を宣言するものではない。 もともとの型宣言と相互に運用可能な型名を提供するものである。
-
束縛メソッド参照(bound method references)は、オブジェクトのメンバに対する参照の取得方法を拡張する。 これを使用すると、例えば
String
クラスのequals
メソッドに対する参照を取得できる。取得した参照は、別の箇所で、述語として使用可能である。val p: Predicate<String> = “foo”::equals
なお、すでにKotlin1.0.xより、型に対しては、この機能がサポートされている。 -
委譲されたプロパティ(delegated properties)は、トップレベル(クラスや関数の中)で利用できる。
fun foo() { val lazyBar by lazy { ... } while (...) { if (...) { lazyBar.doBaz() ... } } }
委譲されたプロパティは、“確実に一度だけ”特定の種類のプロパティを実装するメカニズムである。 たとえば、遅延評価されるプロパティ、観測可能なプロパティ、マップなどに格納されるプロパティなどである。 本機能により、こういったプロパティを、毎回実装する必要がなくなる。
-
データクラス(data classes)は、継承をサポートする。 これにより、別のデータクラスからの派生が可能となる。 データクラスは、データのみを保持するクラスである。 Kotlinは、データクラスに対し、自動的にアクセサ、
equals
、hadhCode
その他共通メソッドを生成する。 データクラスをシールクラス(sealed class)の中で拡張することも可能になる。sealed class C() { data class Example(...) : C() }
-
デストラクチャリング(destructuring)は、名前の組み合わせをラムダ式の引数として指定できるようにする。以下に一例を示す。
forEach
の引数として値のペアを渡すと、2つのコンポーネント(k、vの2変数)に分解される。myMap.forEach { (k, v) -> println(“$k => $v”) }
-
コルーチン(coroutines)は、Kotlinの非同期振る舞いの骨格を提供する。 Breslav氏によれば、コルーチンは、C# 5にて導入された
async/await
モデルよりも汎用的である。 Kotlinもasync/await
を提供する。 しかし、Kotlinの場合はコルーチンを元に構築されており、プリミティブではない。fun loadImage(url: URL) = async { val bytes = await(loadBytes(url)) bytesToImage(bytes) }
Kotlin1.1は、Java8/9の機能(デフォルトメソッド生成など)を直接サポートする。 加えて、JavaScriptバックエンドが言語機能セットとして取り込まれる。
Kotlinの開発は、Kotlin Evolution and Enhancement Process (KEEP)が主導している。 GitHubリポジトリには全ての計画済みユースケースが記載されている。
Kotlin1.1は旧バージョンに対してソースコード、バイナリのどちらも互換性を維持する。 新バージョンのKotlinコンパイラは、旧バージョンのソースコードやバイナリによって停止することはない。
Rate this Article
- Editor Review
- Chief Editor Action