読者です 読者をやめる 読者になる 読者になる

算譜王におれはなる!!!!

偏りはあると思うけど情報技術全般についてマイペースに書くよ。

Kotlin未実装の機能(予想)

はじめに

この記事はKotlin Advent Calendar 2014の11日目です。

昨日はyy_yankさんの【これは便利】知っててよかったKotlinのenum #ktac2014でした。 当アドベントカレンダーの記事ではありませんが、id:ayato0211さんが今日Kotlin のドキュメントが新しくなってた。あと Delegate とかそのへん。を書いてくださいました。

現在、Kotlinのバージョンは0.9.xで、もりもり開発中です。 ということで計画はされているけどまだ実装されていない機能も多いです。 今日は未実装の機能について紹介したいと思います。

参考

未実装の文法/機能

エイリアス

M9のときにtypeキーワードがなくなったと聞いて、型エイリアスは実装しないことに決めたと思ったけど文法のドキュメントみたらそれらしいキーワードtypeAliasというのを見つけました。

public typeAlias Id = Long
public typeAlias Name = String
 
data class User(id: Id, name: Name)

こういう感じで使えるのかと思います。

パッケージの入れ子のやつ

Scalaみたいにpackageをコード中で入れ子にして表現できるっぽいです。

package foo {
    package bar {
        class Hoge
    }
}

dynamic型

dynamicという型があります。 C#のそれと同じで、JavaScript用らしい(?)

自分型

Thisという型。 すでにIntelliJ IDEAのKotlinプラグインはこれをキーワードとして見ているみたいだけど、コンパイルエラーになります。

ローカル変数の委譲

Delegated Propertyの仕組みをローカル変数でやりたいらしいです。 https://youtrack.jetbrains.com/issue/KT-6228

数値リテラル

数値リテラルアポストロフィを使えるようになるかもしれません。 https://youtrack.jetbrains.com/issue/KT-6341

Java7のようにアンスコも。 https://youtrack.jetbrains.com/issue/KT-2964

関数型の書式

シンプルに。

https://youtrack.jetbrains.com/issue/KT-6358

// 今
val map: (Int) -> Int
 
// こうなる
val map: Int -> Int

型パラメータにデフォルト指定

https://youtrack.jetbrains.com/issue/KT-1215

fun list<T = Nothing>(vararg a : T) = ReadOnlyList(a)

引数のデフォルト値から型推論

// 今
fun foo(s: String = "Default") {}
 
// これもOKにしたい
fun bar(s = "Default") {}

https://youtrack.jetbrains.com/issue/KT-2801

ループにelse

いるかなこれ。 https://youtrack.jetbrains.com/issue/KT-476

whenの分岐でのcontinue

https://youtrack.jetbrains.com/issue/KT-771

parameterKindと呼ばれる修飾子

ref, out, lazyの3つが定義されています(が、ドキュメントに説明はないと思われます)。

refoutC#にもありますね。 それと同じ意味だったらこんなことができます。

fun <T> swap(ref a: T, ref b: T) {
    val w = a
    a = b
    b = w
}
 
val x = 5
val y = 3
swap(x, y)
println("$x, $y") // => 3, 5

lazyはなんだろ。。 こういう感じかな。

fun log(lazy message: String) {
    if(isDebug) {
       println(message) 
    }
}
 
log("${時間のかかる計算とか()}")

isDebugfalseを返すときはmessageが使用されないので時間のかかる計算とか()が呼び出されずに済む、と。

おわりに

こうやってみるとバージョン1.0への道のりは長そうに感じます。 それから、実装はゆっくりでいいからせめてドキュメントには書いといてよと思う文法・機能もいくつかありますね。。 でもこれらが実装されたらKotlinは今以上にずっと魅力的な言語になるのではないかと思います!

ということで明日は@bina1204さんです。