【Kotlin】仮引数の最後が関数の場合は、丸カッコが省略できるらしい

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

先日Androidの勉強をしていたら、以下のようなサンプルコードを見かけました。

Kotlin
...
.setPositiveButton("OK") { _, _ ->
  (activity as MainActivity).checkQuizCount()
}
...

setPositionButtonの第一引数に”OK”を渡して、…??、ラムダ?

そのあとのラムダの意味が分からず、調べているとこれは、これはトレーリングラムダtrailing lambda)という文法ということがわかりました。

トレーリングラムダ(trailing lambda)とは

関数の最後の引数が、関数の場合は呼び出し時のラムダを丸カッコの外に出すことができる文法のことです。

例えば以下のcalc関数は、最後の引数として関数を受け取ります。この場合トレーリングラムダを使うことができます。

Kotlin
fun calc(num: Int, calcFunc: (Int) -> Int): Int {
  return calcFunc(num)
}

トレーリングラムダを使ったほうが、かっこが少なく読みやすいですね。

Kotlin
calc(2) { x -> 2 * x }  // トレーリングラムダ
calc(2, { x -> 2 * x }) // 普通に呼び出し 

蛇足ですが、関数だけを受け取る場合は、丸カッコをすべて省略できます。

Kotlin
fun executeFunc(f: () -> Unit): Unit {
  f()
}

executeFunc{ println("Hello") } // Hello

参考記事

Passing trailing lambdas

おすすめKotlin講座

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