【学習kotlinシリーズ】ラムダ関数
Qiitaでことりん学習帳を発売しています!
ラムダ関数とは
ラムダ関数とは、関数を定義して関数オブジェクトを生成するのではなく、関数オブジェクトを直接生成する機能。定義の仕方は以下の例の通り。
1 2 3 4 |
// 標準的なラムダ関数の定義 val square1: (Int) -> Int = { i: Int -> i * i } |
型推論を利用することにより、もう少し簡単な形で定義できる。
1 2 3 4 5 6 7 8 9 |
// 型推論を利用したラムダ関数の定義1 val square2: (Int) -> Int = { i -> i * i } // 型推論を利用したラムダ関数の定義2 val square3 = { i: Int -> i * i } |
また、ラムダ関数には暗黙的に「it」という変数があり、これを利用することにより更に簡略化できる。
1 2 3 4 |
// itを利用したラムダ関数の定義 val square4: (Int) -> Int = { it * it } |
ラムダ関数を高階関数と組み合わせると、スマートになる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
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関数がとてもスマートになった。