Bird
Raised Fist0
Kotlinprogramming~10 mins

Passing lambdas to functions in Kotlin - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - Passing lambdas to functions
Define lambda
↓
Define function with lambda parameter
↓
Call function, pass lambda
↓
Inside function: invoke lambda
↓
Use lambda result or side effect
↓
Function ends
This flow shows how a lambda is defined, passed to a function, invoked inside it, and then the function completes.
Execution Sample
Kotlin
fun operateOnNumber(x: Int, op: (Int) -> Int): Int {
    return op(x)
}

val result = operateOnNumber(5) { it * 2 }
println(result)
This code defines a function that takes a number and a lambda, applies the lambda to the number, and prints the result.
Execution Table
StepActionEvaluationResult
1Call operateOnNumber with x=5 and lambda { it * 2 }Pass x=5 and lambdaFunction starts
2Inside operateOnNumber, invoke lambda with x=5lambda(5) = 5 * 210
3Return lambda result 10 from functionReturn 10result = 10
4Print resultprintln(10)Output: 10
💡 Function ends after returning the lambda result and printing it.
Variable Tracker
VariableStartAfter CallAfter Lambda InvocationFinal
xundefined555
op (lambda)undefined{ it * 2 }{ it * 2 }{ it * 2 }
resultundefinedundefinedundefined10
Key Moments - 3 Insights
Why do we write { it * 2 } outside the parentheses when calling the function?
In Kotlin, if the last parameter of a function is a lambda, you can pass it outside the parentheses. See execution_table step 1 where the lambda is passed this way.
What does 'it' mean inside the lambda?
'it' is the implicit name for the single parameter of the lambda. In step 2, 'it' is 5, the value passed to the lambda.
How does the function get the lambda result?
The function calls op(x) in step 2, which runs the lambda and returns the result 10, then returns it in step 3.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table step 2, what is the value of 'it' inside the lambda?
A2
B10
C5
Dundefined
💡 Hint
Check the 'Evaluation' column in step 2 where lambda(5) = 5 * 2
At which step does the function return the lambda's result?
AStep 3
BStep 2
CStep 1
DStep 4
💡 Hint
Look at the 'Action' column in step 3 about returning the lambda result
If we change the lambda to { it + 3 }, what will be printed?
A15
B8
C10
D5
💡 Hint
Refer to variable_tracker 'result' and how lambda transforms x=5
Concept Snapshot
Passing lambdas to functions in Kotlin:
- Define function with lambda parameter: fun f(x: Int, op: (Int) -> Int)
- Call function passing lambda outside parentheses if last param: f(5) { it * 2 }
- Inside function, invoke lambda: op(x)
- Lambda uses 'it' for single param
- Function returns lambda result
Full Transcript
This example shows how to pass a lambda to a Kotlin function. The function operateOnNumber takes an integer and a lambda that transforms an integer. When called with 5 and the lambda { it * 2 }, the function invokes the lambda with 5, getting 10. It returns 10, which is printed. The lambda parameter 'it' represents the input number. Kotlin allows passing the lambda outside parentheses if it is the last argument. This flow helps beginners see how lambdas are passed, invoked, and results returned.

Practice

(1/5)
1. What is a lambda in Kotlin when passed to a function?
easy
A. A small block of code that can be passed and executed inside the function
B. A type of variable that stores numbers
C. A special kind of loop
D. A keyword to declare a class

Solution

  1. Step 1: Understand what a lambda is

    A lambda is a small piece of code that you can write inline and pass around like a value.
  2. Step 2: Recognize its use in functions

    Functions can accept lambdas to customize behavior without changing the function code.
  3. Final Answer:

    A small block of code that can be passed and executed inside the function -> Option A
  4. Quick Check:

    Lambda = small code block passed to function [OK]
Hint: Lambdas are code blocks you pass to functions [OK]
Common Mistakes:
  • Thinking lambda is a variable type
  • Confusing lambda with loops
  • Believing lambda is a keyword for classes
2. Which of the following is the correct syntax to pass a lambda to a function in Kotlin?
easy
A. fun greet(action: Unit -> ()) { action() } greet { println("Hi") }
B. fun greet(action: () -> Unit) { action() } greet { println("Hi") }
C. fun greet(action: () -> Unit) { action } greet { println("Hi") }
D. fun greet(action: () -> Unit) { action() } greet(println("Hi"))

Solution

  1. Step 1: Check function parameter type

    The function expects a lambda with no parameters and no return value: () -> Unit.
  2. Step 2: Check how lambda is called and passed

    Inside the function, calling action() executes the lambda. Passing greet { println("Hi") } is correct syntax.
  3. Final Answer:

    fun greet(action: () -> Unit) { action() } greet { println("Hi") } -> Option B
  4. Quick Check:

    Correct lambda syntax = fun greet(action: () -> Unit) { action() } greet { println("Hi") } [OK]
Hint: Use () -> Unit and call lambda with () inside function [OK]
Common Mistakes:
  • Wrong lambda type syntax
  • Forgetting to call lambda with ()
  • Passing lambda as function argument incorrectly
3. What will be the output of this Kotlin code?
fun operate(x: Int, action: (Int) -> Int): Int {
    return action(x)
}

fun main() {
    val result = operate(5) { it * 2 }
    println(result)
}
medium
A. 5
B. 25
C. 10
D. Compilation error

Solution

  1. Step 1: Understand the operate function

    It takes an integer and a lambda that doubles the integer (it * 2).
  2. Step 2: Calculate the result

    Passing 5 to the lambda doubles it to 10, which is returned and printed.
  3. Final Answer:

    10 -> Option C
  4. Quick Check:

    5 * 2 = 10 [OK]
Hint: Trace lambda input and output carefully [OK]
Common Mistakes:
  • Confusing input and output values
  • Forgetting lambda parameter 'it'
  • Assuming no return from lambda
4. Identify the error in this Kotlin code snippet:
fun applyOperation(x: Int, op: (Int) -> Int) {
    op(x)
}

fun main() {
    applyOperation(3) { println(it * 3) }
}
medium
A. No error, code runs fine
B. The function applyOperation should return Int but returns Unit
C. The lambda syntax is incorrect
D. The lambda passed does not return a value but function expects Int return

Solution

  1. Step 1: Check function signature and lambda

    applyOperation expects a lambda returning Int, but the lambda only prints and returns Unit.
  2. Step 2: Understand mismatch consequences

    Because the lambda returns Unit, but function expects Int, this causes a type mismatch error.
  3. Final Answer:

    The lambda passed does not return a value but function expects Int return -> Option D
  4. Quick Check:

    Lambda return type mismatch = The lambda passed does not return a value but function expects Int return [OK]
Hint: Match lambda return type with function parameter type [OK]
Common Mistakes:
  • Ignoring return type mismatch
  • Thinking println returns Int
  • Assuming no return needed for lambdas
5. You want to write a Kotlin function filterAndTransform that takes a list of integers and two lambdas: one to filter the list and one to transform each filtered item. Which of these function signatures correctly allows passing both lambdas?
hard
A. fun filterAndTransform(list: List<Int>, filter: (Int) -> Boolean, transform: (Int) -> Int): List<Int>
B. fun filterAndTransform(list: List<Int>, filter: Int, transform: Int): List<Int>
C. fun filterAndTransform(list: List<Int>, filter: (Int) -> Int, transform: (Int) -> Boolean): List<Int>
D. fun filterAndTransform(list: List<Int>, filter: () -> Boolean, transform: () -> Int): List<Int>

Solution

  1. Step 1: Identify correct lambda types for filtering and transforming

    Filtering needs a lambda that takes Int and returns Boolean; transforming needs a lambda that takes Int and returns Int.
  2. Step 2: Match function signature with these lambda types

    fun filterAndTransform(list: List<Int>, filter: (Int) -> Boolean, transform: (Int) -> Int): List<Int> matches these types correctly; others have wrong parameter or return types.
  3. Final Answer:

    fun filterAndTransform(list: List<Int>, filter: (Int) -> Boolean, transform: (Int) -> Int): List<Int> -> Option A
  4. Quick Check:

    Filter returns Boolean, transform returns Int [OK]
Hint: Filter lambda returns Boolean, transform lambda returns transformed value [OK]
Common Mistakes:
  • Using wrong lambda parameter or return types
  • Confusing filter and transform lambda roles
  • Using lambdas with no parameters
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard