Download directly

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...