Kotlin1.1のEAP(Early Access Preview、開発中バージョン)が出たので、新機能を触ってみました。

Kotlinとは

JetBrains社が提供する静的片付けのオブジェクト指向言語です。 今年2月にversion1.0のメジャーアップデートがあり、Javaよりも比較的簡潔に、かつ安全に記述できる言語とされています。

すでに国内でも専門の書籍が出版され始めたり、Androidアプリ開発での導入事例が散見されたりしています。

バージョン1.1

さて、そんなKotlinのバージョン1.1EAPが発表されました。

1.1を入れてみる

早速入れてみましょう。 Android Studioのバージョンは2.1.2です。

Kotlin Pluginが入っていない場合は、Preferences > Plugins > Install JetBrains plugin…よりKotlin Pluginを入れてAndroid Studioを再起動してください。

導入後、Tools > Kotlin > Configure Kotlin Plugin UpdateよりUpdate ChannelからEarly Access Preview 1.1を選択し、EAP版を入れます。

1.1の追加機能

現在発表されている主な変更点は以下のようになっております。

  • Coroutines
  • Bound Callable Referenses
  • Type aliases
  • Local delegated properties

それぞれ説明していきます。

Coroutines

メソッドの処理をローカル変数などを維持したまま中断・再開させることができる機能です。 以下のように記述することができます。

fun startLongAsyncOperation(v: Int) =
	CompletableFuture.supplyAsync {
	Thread.sleep(1000)
	"Result: $v"
}

fun Coroutine() {
	val future = async<String> {
		(1..5).map {
			await(startLongAsyncOperation(it))
		}.joinToString("\n")
	}
	println(future.get())
    }
}

実行結果

Result: 1
Result: 2
Result: 3
Result: 4
Result: 5

Bound callable referenses

いわゆるダブルコロン記法。<クラス名orインスタンス名>::<メソッド名>こんな感じのやつです。

class Printer {
	fun print(text: String) {
		println(text)
	}
}

fun BoundCallableReferences() {
	val printer = Printer()

	(1..10).map { it.toString() }
		.forEach(printer::print)
}

実行結果

1
2
3
4
5
6
7
8
9
10

ラムダ式などで便利です。

Type aliases

既存の型を別名で利用できる機能です。 コードの可読性が上がります。

typealias Money = Int

fun buy(money: Money) {
	println((money * 1.08).toInt().toString())
}

@Test
fun TypeAlias() {
	buy(100)
}

実行結果

108

Local delegated properties

Delegated Propertyは特定のオブジェクトに処理を委譲するための仕組みです。 hoge by <処理を委譲するオブジェクト>のように記述します。 1.1では、これをメソッド内でも宣言できるようになりました。

fun DelegatedProperty() {
	val text by lazy { "LocalDelegatedProperties!" }
	println(text)
}

lazyはクロージャを引数に取る標準ライブラリ関数です。 初めてゲッターが呼ばれた時にクロージャを実行し、評価結果を返します。

実行結果

LocalDelegatedProperties!

まとめ

  • kotlinはJetBrains社が提供する静的片付けのオブジェクト指向言語

  • version1.1では以下のような機能が追加されている。

    • コルーチン
    • タイプエイリアス
    • リファレンス参照
    • ローカルdelegateプロパティ
  • どんどん便利になっていくため、今後に期待が高まる。