【Kotlin】ラムダ式(lambda expression)の書き方

Kotlin
この記事は約4分で読めます。

この記事では、Kotlinのラムダ式の書き方と、その使いどころを紹介します。

ラムダ式とは

ラムダ式はfunキーワードを使わなくても関数を定義できる構文です。

またラムダ式は、変数に代入したり、関数の引数として渡すことができます。

ラムダ式の書き方

基本的なラムダ式の書き方

ラムダ式は基本的に次のように書きます。

Kotlin
val area: (Int, Int) -> Int = { w: Int, h: Int -> w * h }

=の右側が、ラムダ式です。wとhを引数に取り、その積を返すラムダ式です。

  • 引数は->の左側に記述し、型が推測できる場合は型を省略可能
  • ボディ(処理)は、->の右側に記述
  • 戻り値は、Unit型ではないと推測されたら、ボディの最後の式が戻り値として返される

今回の場合、変数areaの関数型が書かれており、ラムダの引数の型は推測可能なので、引数の型は省略できます。引数の型を省略するとだいぶスッキリしますね。

Kotlin
val area: (Int, Int) -> Int = { w, h -> w * h }

引数がない場合

引数がない場合は、ボディ(処理)だけを記述します。

Kotlin
val sayHello = { println("Hello") }
sayHello() // Hello

引数が一つだけなら仮引数は省略可能

引数が一つだけの場合は、仮引数を省略して暗黙の仮引数itとして処理を記述できます。

まずは、仮引数を書くパターン

Kotlin
val introduceMySelf: (String) -> Unit = { name -> println("Hi, I'm ${name}.") }
introduceMySelf("Hoge") // Hi, I'm Hoge.

仮引数を省略して、itという暗黙の名前で書くパターン

Kotlin
val introduceMySelf: (String) -> Unit = { println("Hi, I'm ${it}.") }
introduceMySelf("Hoge") // Hi, I'm Hoge.

“Hoge”が変数itとして、処理が実行されていますね。

明示的にreturnする

明示的にreturnを書く場合はラベル付きreturnを使います。return@というやつです。

ラムダ式を渡してる関数名をreturn@の後ろに書きます。この場合filter関数にラムダ式を渡しているので、return@filterとしています。

return@filter isFilteredと書かずに、return isFilteredと書くと、main関数のreturnと認識され、意図しない動きになるのでラムダ式で明示的にreturnを書く場合はreturn@と書く必要があります。

Kotlin
fun main() {
  var intArray: IntArray = intArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  intArray = intArray.filter {
    val isFiltered = it % 2 == 0
    return@filter isFiltered
    // return isFilteredと書くと、main関数のreturnになり、そこでmain関数を抜けることになる。
  }.toIntArray()
}

ラベル付きreturnについては、この記事で解説しています。

ラムダ式の使いどころ

kotlinの経験が浅く、多くは思いつかないですが、いくつか使いどころを上げます。

リストのフィルター処理

listの要素をフィルタリングしたいときや、要素に何かしらの操作を行いたい時などに、その処理をラムダ式として渡します。

Kotlin
fun main() {
  val intArray: IntArray = intArrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
  intArray.filter { it % 2 == 0 }.forEach { println(it) } // 2 4 6 8 10
}

androidでコールバック関数を設定するとき

androidでコールバック関数を設定するときは、必ずと言っていいほどラムダ式を渡しています。

Kotlin
binding.someButton.setOnKeyListener { _, keyCode, keyEvent ->
  // ...
}

おすすめUdemy講座

はじめての Kotlin【Java 知らなくてOK!丁寧な解説で Android に必要な Kotlin の基本を学習】 icon
タイトルとURLをコピーしました