📖 Scenario: You are creating a simple Kotlin program that uses a function with a lambda parameter to greet users. Kotlin allows a special way to write lambdas called the trailing lambda convention, which makes your code cleaner and easier to read.
🎯 Goal: Learn how to define and call a function with a lambda parameter using the trailing lambda convention in Kotlin.
📋 What You'll Learn
Create a function called greetUser that takes a name string and a lambda called action with no parameters and no return value.
Call the action lambda inside the greetUser function after printing a greeting message.
Call greetUser with the name "Alice" and use the trailing lambda convention to print "Welcome to Kotlin!" inside the lambda.
Print the greeting and the lambda message as output.
💡 Why This Matters
🌍 Real World
Trailing lambda convention is used in Kotlin to write cleaner and more readable code, especially when working with functions that take lambdas, such as event handlers, callbacks, or collection operations.
💼 Career
Understanding trailing lambda syntax is important for Kotlin developers working on Android apps or backend services, as it improves code clarity and is widely used in Kotlin libraries and frameworks.
Progress0 / 4 steps
1
Create the greetUser function
Create a function called greetUser that takes a name parameter of type String and a lambda parameter called action of type () -> Unit. Inside the function, print "Hello, $name!" using println. Do not call the lambda yet.
Kotlin
Hint
Remember to define the lambda parameter action with type () -> Unit and print the greeting inside the function.
2
Call the action lambda inside the function
Inside the greetUser function, after printing the greeting, call the action lambda by writing action().
Kotlin
Hint
Call the lambda by writing action() inside the function body after the greeting.
3
Call greetUser using trailing lambda
Call the greetUser function with the name argument set to "Alice". Use the trailing lambda convention to pass a lambda that prints "Welcome to Kotlin!".
Kotlin
Hint
Use the trailing lambda syntax by placing the lambda block outside the parentheses after the function call.
4
Print the final output
Run the program to print the greeting and the message from the lambda. The output should show Hello, Alice! on one line and Welcome to Kotlin! on the next line.
Kotlin
Hint
Just run the program. The output should show the greeting and the lambda message on separate lines.
Practice
(1/5)
1. What is the main purpose of the trailing lambda convention in Kotlin?
easy
A. To allow placing the lambda expression outside the parentheses when it is the last argument
B. To require all lambda expressions to be inside parentheses
C. To prevent using lambda expressions as function arguments
D. To force lambda expressions to be declared as variables before use
Solution
Step 1: Understand the trailing lambda convention and compare options
The trailing lambda convention lets you write a lambda expression outside the parentheses if it is the last argument of a function. Only "To allow placing the lambda expression outside the parentheses when it is the last argument" correctly describes this behavior. Other options contradict the convention.
Final Answer:
To allow placing the lambda expression outside the parentheses when it is the last argument -> Option A
Quick Check:
Trailing lambda = lambda outside parentheses [OK]
Hint: Last lambda argument can go outside parentheses [OK]
Common Mistakes:
Thinking lambdas must always be inside parentheses
Confusing trailing lambda with lambda variable declaration
Believing trailing lambda disallows lambdas as arguments
2. Which of the following Kotlin function calls correctly uses the trailing lambda convention?
easy
A. list.filter { it > 0 }
B. list.filter({ it > 0 })
C. list.filter(it > 0)
D. list.filter it > 0
Solution
Step 1: Identify correct trailing lambda syntax and check other options
Trailing lambda means the lambda is placed outside the parentheses. list.filter { it > 0 } shows this correctly. list.filter({ it > 0 }) uses lambda inside parentheses (valid but not trailing). list.filter(it > 0) and D are syntax errors.
Final Answer:
list.filter { it > 0 } -> Option A
Quick Check:
Trailing lambda = lambda outside parentheses [OK]
Hint: Trailing lambda goes after parentheses, no extra parentheses needed [OK]
Common Mistakes:
Putting lambda inside parentheses when trailing lambda is expected
Step 1: Understand the function call and evaluate the output
The function greet takes a lambda returning a String and prints its result. The call uses trailing lambda syntax. The lambda returns "Hello, Kotlin!" which is printed by println.
Final Answer:
Hello, Kotlin! -> Option D
Quick Check:
Trailing lambda call prints lambda result [OK]
Hint: Trailing lambda calls run the lambda and print result [OK]
Common Mistakes:
Expecting syntax error due to trailing lambda
Confusing return value with Unit
Missing that println prints the lambda result
4. Identify the error in this Kotlin code using trailing lambda:
fun calculate(x: Int, operation: (Int) -> Int): Int {
return operation(x)
}
val result = calculate(5) operation { it * 2 }
medium
A. Missing parentheses around lambda argument
B. Incorrect function declaration
C. Trailing lambda must be outside parentheses but parentheses are missing
D. No error, code is correct
Solution
Step 1: Analyze the function call syntax and correct trailing lambda usage
The function call calculate(5) operation { it * 2 } is invalid because the trailing lambda must be placed immediately after the parentheses without extra tokens. The correct call is calculate(5) { it * 2 }. The word operation should not appear between parentheses and lambda.
Final Answer:
Trailing lambda must be outside parentheses but parentheses are missing -> Option C
Quick Check:
Trailing lambda goes right after parentheses [OK]
Hint: Trailing lambda must follow parentheses directly, no extra tokens [OK]
Common Mistakes:
Inserting parameter name between parentheses and lambda
Forgetting to remove parentheses when using trailing lambda
Confusing function parameter names with call syntax
5. Given this Kotlin function:
fun processNumbers(numbers: List<Int>, filter: (Int) -> Boolean, action: (Int) -> Unit) {
for (number in numbers) {
if (filter(number)) action(number)
}
}
Which is the correct way to call processNumbers using trailing lambda convention for both lambdas?
hard
A. processNumbers(listOf(1,2,3)) { it > 1 } { println(it) }
B. processNumbers(listOf(1,2,3), { it > 1 }) { println(it) }
C. processNumbers(listOf(1,2,3)) { println(it) } { it > 1 }
D. processNumbers(listOf(1,2,3), { println(it) }, { it > 1 })
Solution
Step 1: Understand trailing lambda rules for multiple lambdas and apply to function call
Kotlin allows only the last lambda argument to be passed outside parentheses as a trailing lambda. Since action is the last lambda, it can be trailing. The first lambda filter must be inside parentheses. processNumbers(listOf(1,2,3), { it > 1 }) { println(it) } correctly places filter inside parentheses and action outside.
Final Answer:
processNumbers(listOf(1,2,3), { it > 1 }) { println(it) } -> Option B
Quick Check:
Only last lambda can be trailing [OK]
Hint: Only last lambda argument goes outside parentheses [OK]
Common Mistakes:
Trying to put multiple lambdas outside parentheses
Swapping lambda order incorrectly
Putting non-lambda arguments outside parentheses
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.