In this episode, Donn talks about Kotlin Lambda Expressions. He explains the syntax and how to build a couple of simple lambda expressions with and without type inference and declaration. We wrap up with a small example of passing a small lambda with multiple values to a function. See the show notes below for more info. This is part 1 of a multi-part series on Lambda Expressions in Kotlin.
The basic syntax of a lambda expression:
val myLambda : Type = { argumentList -> codeBody }
The codeBody is the only section that is not optional.
Double lambda expression (doubles an integer) with type inference
val double = { number: Int -> number * 2 }
val result = double(4)
// result = 8 now
Double string multi-line lambda with type inference.
val doubleString = { number: Int ->
// codebody
val doubleResult = number * 2
doubleResult.toString()
// Kotlin knows this will return a string
}
Type declaration in a lambda
val myLambda: (String, Int) -> String = { str, int ->
"$str - ${int.toString()}" // "Donn - 32"
}
val result = myLambda("Donn", 32)
// result = "Donn - 32"
Preview of next week … passing a lambda to a function:
fun doWork(name: String, favoriteNumber: Int, someLambda: (String, Int) -> String) { // Do some processing, this is a contrived example
val repeatedString = "$name$name"
val result = someLambda(repeatedString, favoriteNumber)
println(result)
}
// Usage
doWork("Donn", 32) { str, int ->
val someNewValue = "$str is my parameter and so is $int"
someNewValue.length.toString() // this is returned
}
// ’37’ is printed via println
// Or use it like this, the lambda code body is what can change, this is where the power is at
doWork("Donn", 32) { name, count ->
var result = ""
for (i in 1..count) {
result += "$name"
}
result // this is returned
}
// loops over and concatinates "Donn" until
// the favorite number (aka count) is met.
//
// Output looks like: "DonnDonnDonnDonnDonnDonn..."
// and so on...