Fragmented · June 17, 2019

165: Learning Kotlin: Lambda Expressions Part 1

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

Copyright 2024 Spec Network, Inc.