📖 Scenario: Imagine you are creating a simple calculator app. You want to create different operations like addition and multiplication. Instead of writing separate functions for each operation, you will write a function that returns another function based on the operation you want.
🎯 Goal: Build a Kotlin program where a function returns another function that performs a math operation. You will create a function that returns either an addition or multiplication function based on a given input.
📋 What You'll Learn
Create a function called getOperation that takes a String parameter called operation.
Inside getOperation, return a function that takes two Int parameters and returns an Int.
If operation is "add", return a function that adds two numbers.
If operation is "multiply", return a function that multiplies two numbers.
Call getOperation with "add" and "multiply" and print the results of calling the returned functions with numbers 5 and 3.
💡 Why This Matters
🌍 Real World
Returning functions from functions is useful in apps that need flexible behavior, like calculators, games, or event handlers.
💼 Career
Understanding how to return functions helps in writing clean, reusable, and flexible code, a skill valued in software development jobs.
Progress0 / 4 steps
1
Create the getOperation function skeleton
Write a function called getOperation that takes a String parameter named operation and returns a function type that takes two Int parameters and returns an Int. For now, return a function that adds two numbers.
Kotlin
Hint
Remember, the function getOperation should return another function that takes two integers and returns their sum.
2
Add condition to return different functions
Inside the getOperation function, add an if statement to check if operation is "add". If yes, return a function that adds two numbers. Otherwise, return a function that multiplies two numbers.
Kotlin
Hint
Use an if statement to check the operation string and return the correct function.
3
Call getOperation and use returned functions
Create two variables called addFunc and multiplyFunc. Assign them the result of calling getOperation with "add" and "multiply" respectively. Then call each function with arguments 5 and 3 and store the results in sumResult and productResult.
Kotlin
Hint
Call getOperation with the correct strings and then call the returned functions with 5 and 3.
4
Print the results
Write two println statements to print sumResult and productResult.
Kotlin
Hint
Use println to show the results on the screen.
Practice
(1/5)
1. What does it mean when a Kotlin function returns another function?
easy
A. The function can only return primitive data types like Int or String.
B. The function cannot have parameters if it returns another function.
C. The outer function produces a function as its result that can be called later.
D. The returned function must be called immediately inside the outer function.
Solution
Step 1: Understand function return types
In Kotlin, a function can return any type, including another function type.
Step 2: Interpret returning a function
Returning a function means the outer function gives back a function that can be stored or called later.
Final Answer:
The outer function produces a function as its result that can be called later. -> Option C
Quick Check:
Returning a function means output is a callable function [OK]
Hint: Returning function means output is a callable function [OK]
Common Mistakes:
Thinking only primitive types can be returned
Assuming returned function must be called immediately
Believing returned functions cannot have parameters
2. Which of the following is the correct syntax to declare a Kotlin function that returns another function taking an Int and returning a String?
easy
A. fun outer(): (Int) -> String = { i -> i.toString }
B. fun outer(): (Int) -> String { return { i -> i.toString() } }
C. fun outer(): (Int) String { return { i -> i.toString() } }
D. fun outer(): Int -> String = return { i -> i.toString() } }
Solution
Step 1: Check function return type syntax
In Kotlin, a function returning another function uses syntax like: fun name(): (ParamType) -> ReturnType
Step 2: Verify the return statement
The function returns a lambda matching (Int) -> String, e.g., { i -> i.toString() }
Final Answer:
fun outer(): (Int) -> String { return { i -> i.toString() } } -> Option B
Quick Check:
Correct function type syntax = fun outer(): (Int) -> String { return { i -> i.toString() } } [OK]
Hint: Return type for function is (ParamType) -> ReturnType [OK]
Common Mistakes:
Using arrow -> incorrectly in return type
Mixing return type syntax with function body
Omitting parentheses around function type
3. What is the output of this Kotlin code?
fun makeMultiplier(x: Int): (Int) -> Int {
return { y -> x * y }
}
fun main() {
val multiplyBy3 = makeMultiplier(3)
println(multiplyBy3(5))
}
medium
A. 35
B. 8
C. Compilation error
D. 15
Solution
Step 1: Understand makeMultiplier function
makeMultiplier returns a function that multiplies its input by x (captured from outer function).
Step 2: Trace main function calls
multiplyBy3 is a function multiplying by 3; multiplyBy3(5) = 3 * 5 = 15.
Final Answer:
15 -> Option D
Quick Check:
3 * 5 = 15 [OK]
Hint: Returned function uses captured outer variable [OK]
Common Mistakes:
Confusing parameter names
Forgetting the closure captures x
Expecting immediate multiplication without calling returned function
4. Identify the error in this Kotlin code that tries to return a function:
fun outer(): (Int) -> Int {
val inner = { x: Int -> x * 2 }
return inner()
}
medium
A. Calling inner() instead of returning the function itself
B. Missing return type declaration for outer function
C. Incorrect lambda parameter syntax
D. Cannot return a lambda from a function
Solution
Step 1: Analyze return statement
inner is a lambda function; inner() calls it and returns Int, not a function.
Step 2: Correct return value
To return the function itself, return inner without parentheses.
Final Answer:
Calling inner() instead of returning the function itself -> Option A
Quick Check:
Return function, not function call [OK]
Hint: Return function name without () to return function itself [OK]
Common Mistakes:
Returning function call instead of function
Omitting function return type
Misunderstanding lambda syntax
5. Given this Kotlin code, what will be the output?
fun createCounter(start: Int): () -> Int {
var count = start
return {
count += 1
count
}
}
fun main() {
val counter = createCounter(10)
println(counter())
println(counter())
}
hard
A. 11
12
B. 10
11
C. 12
13
D. Compilation error
Solution
Step 1: Understand closure capturing variable
The returned lambda captures 'count' variable and increments it each call.
Step 2: Trace calls to counter()
First call: count = 10 + 1 = 11; prints 11. Second call: count = 11 + 1 = 12; prints 12.
Final Answer:
11
12 -> Option A
Quick Check:
Closure increments count on each call [OK]
Hint: Closures keep state between calls [OK]
Common Mistakes:
Assuming count resets each call
Confusing initial value with first output
Expecting compilation error due to var usage
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.