BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース Kotlin 1.1はコルーチンと型エイリアスを追加し、JavaScriptへのサポートを改善した

Kotlin 1.1はコルーチンと型エイリアスを追加し、JavaScriptへのサポートを改善した

ブックマーク

原文(投稿日:2017/03/09)へのリンク

新バージョンのKotlinは多くの新機能を導入した。最も注目すべきはコルーチンだ。そしてJavaScriptターゲットへのサポートを改善した。KotlinのマーケティングエンジニアであるRoman Belov氏が書いている

まだ実験的と考えられるが、Kotlin 1.1の新機能のキーの1つはコルーチンだ。これは3つの高レベルの概念であるasyncawaityieldを使うことで利用できる。 たとえば非同期処理を扱うためにasyncawaitをどのように使うのだろうか。

// 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

Relevance
Style
 
 

この記事に星をつける

おすすめ度
スタイル

BT