新バージョンのKotlinは多くの新機能を導入した。最も注目すべきはコルーチンだ。そしてJavaScriptターゲットへのサポートを改善した。KotlinのマーケティングエンジニアであるRoman Belov氏が書いている。
まだ実験的と考えられるが、Kotlin 1.1の新機能のキーの1つはコルーチンだ。これは3つの高レベルの概念であるasync
、await
、yield
を使うことで利用できる。 たとえば非同期処理を扱うためにasync
とawait
をどのように使うのだろうか。
// runs the code in the background thread pool
fun asyncOverlay() = async(CommonPool) {
// start two async operations
val original = asyncLoadImage("original")
val overlay = asyncLoadImage("overlay")
// and then apply overlay to both results
applyOverlay(original.await(), overlay.await())
}
// launches new coroutine in UI context
launch(UI) {
// wait for async overlay to complete
val image = asyncOverlay().await()
// and then show it in UI
showImage(image)
}
launch
での使い方に注意してほしい。これはコルーチンを開始する。実際、await
はコルーチン内かsuspend
とともに宣言した関数からのみ使える。これでコンパイラがコルーチン内のその関数を実行する適切なコードを生成できるようになる。
suspend fun workload(n: Int): Int {
delay(1000)
return n
}
上記の例のように、delay
はコルーチンをその関連スレッドをブロックすることなく中断する。
コルーチンはyield
でシーケンス生成を遅延させるためにも使われる。
// inferred type is Sequence<Int>
val fibonacci = buildSequence {
yield(1) // first Fibonacci number
var cur = 1
var next = 1
while (true) {
yield(next) // next Fibonacci number
val tmp = cur + next
cur = next
next = tmp
}
}
println(fibonacci.take(10).joinToString())
実験的ではあるが、コルーチンはオプトインに限っており、そのAPIは将来のリリースで変更されるかもしれない。
Kotlin 1.1で追加された重要な新機能は他にこのようなものがある。
- 型エイリアス。型に対して別の名前を定義できる。
::
オペレータ。特定のオブジェクトのメソッドへのメンバ参照を取得する。- データクラスを継承できる。
- ラムダでの分解のサポート(訳者注:引数を分解して別々の変数に渡せる分解宣言がラムダでも使える)。
JavaScriptサポートに関して、バージョン1.1へは主にJavaScriptサポートをJVMのものと同等にすることに努力が向けられた。これにより、すべての言語機能はリフレクションを例外として両方のターゲットに対して利用できる。現在JavaScriptではすべての言語機能を利用できない。1.1ではとくに次のことができる。
- Kotlin標準ライブラリの大部分を現在JavaScript上で使用できる。
- 生成コードはコード軽量化や最適化のようなJavaScriptツールと親和性がある。
external
修飾子はKotlinクラスでJavaScriptで実装されることを宣言するために使用できる。
KotlinはオンラインのREPLを使って試すことができる。またはさまざまな方法でインストールできる。
Rate this Article
- Editor Review
- Chief Editor Action