【学習kotlinシリーズ】ラムダ関数

Qiitaでことりん学習帳を発売しています!

ラムダ関数とは

ラムダ関数とは、関数を定義して関数オブジェクトを生成するのではなく、関数オブジェクトを直接生成する機能。定義の仕方は以下の例の通り。

// 標準的なラムダ関数の定義
val square1: (Int) -> Int = {
    i: Int -> i * i
}

型推論を利用することにより、もう少し簡単な形で定義できる。

// 型推論を利用したラムダ関数の定義1
val square2: (Int) -> Int = {
    i -> i * i
}

// 型推論を利用したラムダ関数の定義2
val square3 = {
    i: Int -> i * i
}

また、ラムダ関数には暗黙的に「it」という変数があり、これを利用することにより更に簡略化できる。

// itを利用したラムダ関数の定義
val square4: (Int) -> Int = {
    it * it
}

ラムダ関数を高階関数と組み合わせると、スマートになる。

fun find(str: String, predicate:(Char) -> Boolean): Int {
    tailrec fun go(str: String, index: Int): Int =
            when {
                str.isEmpty() -> -1
                predicate(str.first()) -> index
                else -> go(str.drop(1), index+1)
            }
    

    return go(str, 0)
}

fun findLower(str: String): Int {
    return find(str, {it.isLowerCase()})
}

fun main(args: Array<String>){

    println(findLower("ASFNSFOsNSFON"))
}

findLower関数がとてもスマートになった。