サーチ…
構文
明示的なパラメータ:
{parameterName:ParameterType、otherParameterName:OtherParameterType - > anExpression()}
推論されるパラメータ:
加算:(Int、Int) - > Int = {a、b - > a + b}
単一のパラメータは、
it
省略します。val square:(Int) - > Int = {it * it}
署名:
() - > ResultType
(InputType) - > ResultType
(InputType1、InputType2) - > ResultType
備考
入力型のパラメータは、コンテキストから推測できるときに省略することができます。たとえば、関数をとるクラスの関数があるとします。
data class User(val fistName: String, val lastName: String) {
fun username(userNameGenerator: (String, String) -> String) =
userNameGenerator(firstName, secondName)
}
ラムダを渡すことによってこの関数を使用することができます。パラメータはすでに関数シグネチャで指定されているため、ラムダ式でパラメータを再宣言する必要はありません。
val user = User("foo", "bar")
println(user.userName { firstName, secondName ->
"${firstName.toUppercase}"_"${secondName.toUppercase}"
}) // prints FOO_BAR
これは、ラムダを変数に代入する場合にも適用されます。
//valid:
val addition: (Int, Int) = { a, b -> a + b }
//valid:
val addition = { a: Int, b: Int -> a + b }
//error (type inference failure):
val addition = { a, b -> a + b }
ラムダは、一つのパラメータを取り、型は文脈から推測できる場合は、次の方法でパラメータを参照することができit
。
listOf(1,2,3).map { it * 2 } // [2,4,6]
関数をフィルタリングするパラメータとしてのLambda
val allowedUsers = users.filter { it.age > MINIMUM_AGE }
ラムダは変数として渡される
val isOfAllowedAge = { user: User -> user.age > MINIMUM_AGE }
val allowedUsers = users.filter(isOfAllowedAge)
関数呼び出しをベンチマークするためのLambda
関数の実行に要する時間を計測する汎用ストップウォッチ:
object Benchmark {
fun realtime(body: () -> Unit): Duration {
val start = Instant.now()
try {
body()
} finally {
val end = Instant.now()
return Duration.between(start, end)
}
}
}
使用法:
val time = Benchmark.realtime({
// some long-running code goes here ...
})
println("Executed the code in $time")
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow