Functions help you organize code into reusable blocks. Lambdas let you write small, quick functions without naming them.
Functions and lambdas in Android Kotlin
fun functionName(parameter: Type): ReturnType {
// code
}
val lambdaName: (Type) -> ReturnType = { parameter ->
// code
}Functions start with fun keyword, followed by name and parameters.
Lambdas are anonymous functions assigned to variables or passed directly.
fun greet(name: String): String {
return "Hello, $name!"
}val greetLambda: (String) -> String = { name -> "Hello, $name!" }fun add(a: Int, b: Int) = a + b
val addLambda = { a: Int, b: Int -> a + b }This program shows a function and a lambda that both calculate the square of a number. It prints the results to the console.
fun main() {
fun square(x: Int): Int {
return x * x
}
val squareLambda: (Int) -> Int = { x -> x * x }
println("Function: square(4) = ${square(4)}")
println("Lambda: squareLambda(4) = ${squareLambda(4)}")
}Lambdas are great for short tasks but use functions for bigger, reusable code blocks.
You can pass lambdas directly to functions that expect them, like collection operations.
Use descriptive names for functions to make your code easier to understand.
Functions group code to reuse and organize it.
Lambdas are unnamed, quick functions useful for small tasks.
Both help keep your app code clean and easy to maintain.
Practice
val sum = { a: Int, b: Int -> a + b }Solution
Step 1: Understand lambda syntax
The code{ a: Int, b: Int -> a + b }defines a function without a name.Step 2: Identify lambda characteristics
This function is stored in the variablesum, showing it is unnamed but reusable.Final Answer:
An unnamed function that can be stored in a variable -> Option BQuick Check:
Lambda = unnamed function stored in variable [OK]
- Thinking lambdas must have names
- Confusing lambdas with classes
- Assuming lambdas are loops
Solution
Step 1: Review lambda syntax for no parameters
Lambdas with no parameters use{ expression }syntax.Step 2: Check each option
val greet = { "Hello" } correctly uses{ "Hello" }. val greet = { -> "Hello" missing closing brace, B is function type syntax, D is a named function.Final Answer:
val greet = { "Hello" } -> Option DQuick Check:
No-parameter lambda = { value } [OK]
- Missing closing brace in lambda
- Confusing lambda with function type syntax
- Using fun keyword inside lambda
val multiply = { x: Int, y: Int -> x * y }
println(multiply(3, 4))Solution
Step 1: Understand the lambda function
The lambda{ x: Int, y: Int -> x * y }multiplies two integers.Step 2: Calculate the result of multiply(3, 4)
3 * 4 equals 12, so the printed output is 12.Final Answer:
12 -> Option CQuick Check:
3 * 4 = 12 [OK]
- Adding instead of multiplying
- Concatenating numbers as strings
- Expecting syntax error
val greet = { name: String ->
println("Hello, " + name)
}Solution
Step 1: Check lambda syntax
The lambda takes a String parameter and calls println, which is allowed.Step 2: Confirm return type flexibility
Lambdas can return Unit (like void), so no return type declaration is needed.Final Answer:
No error, this is valid syntax -> Option AQuick Check:
Lambda with println is valid [OK]
- Expecting return type declaration
- Thinking println is disallowed
- Confusing Unit with error
val numbers = listOf(1, 2, 3, 4, 5, 6) val evens = numbers.filter( /* fill here */ ) println(evens)
Solution
Step 1: Understand filtering with lambda
The filter lambda should return true for even numbers using modulo operator.Step 2: Evaluate each option
numbers.filter { it % 2 == 0 } correctly usesit % 2 == 0. numbers.filter { x -> x / 2 == 0 } uses division instead of modulo, C uses assignment (=) instead of comparison (==), A uses bitwise AND incorrectly.Final Answer:
numbers.filter { it % 2 == 0 } -> Option AQuick Check:
Filter even numbers with modulo == 0 [OK]
- Using = instead of == for comparison
- Using division instead of modulo
- Misusing bitwise operators
Ready to prove it?
Pass the test and this pattern moves unknown
