FreeStyleWiki

Kotlinの文法で気になったものをまとめる

[Kotlin]

Kotlinの文法で気になったものをまとめる

  暗黙的な"it"

    • ラムダ式にパラメーターが1つしかないことは非常に一般的です。
    • コンパイラがシグネチャを把握できる場合、唯一のパラメータを宣言せずに->を省略できます。
    • パラメータは、itという名前で暗黙的に宣言されます。

これはGroovyとかでもあった、ラムダ式内の引数を自動的にitで受け取れるようにするやつだ。

  • Rubyだと以下のような感じで書くものに近い
list.each{|e| puts(e) }

  単一式関数

  • 関数定義に色々な記法があり、ちょっと混乱する
    • 具体的には関数の定義に=を使うか、{}(中括弧)を使うか
  • Single-expression functions
    • 関数が単一の式を返す場合、中括弧は省略でき、関数の内容は=記号の後に記述する。
    • Scalaでも同じような機能があった気がする
// 一番一般的なスタイル
fun double(x: Int): Int {
    return x * 2
}

// 返り値が単一の式なので、中括弧を省略できる
fun double(x: Int): Int = x * 2

// 型も省略できる
fun double(x: Int) = x * 2

  拡張関数・拡張プロパティ

  • Kotlinは定義ずみクラスのメソッドやプロパティを継承なしに拡張できる
class Baby {
    // no function
}

fun Baby.cry() {
    println("Ahaaaaaa!!!!!!!") 
}

fun main() {
        // コンパイルエラーにならない?!
        // 実行すると "Ahaaaaaa!!!!!!!" が出力される
	Baby().cry()
}
  • 結構驚きの機能なんだけど、ライブラリのコードを拡張できるのが嬉しい
  • いわゆる モンキーパッチ っぽいのだけど、動的に書き換えている訳ではないのでちょっと異なる

  総称型

<K: Entity<K>> fun abc(): Entity<K>