Bird
Raised Fist0
Kotlinprogramming~20 mins

Also function behavior and use cases in Kotlin - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Also Function Mastery
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Kotlin code using also?
Consider the following Kotlin code snippet using the also function. What will be printed when this code runs?
Kotlin
val result = mutableListOf<Int>().also {
    it.add(1)
    it.add(2)
    it.add(3)
}
println(result)
A[1, 2, 3]
B[]
Cnull
DCompilation error
Attempts:
2 left
💡 Hint
Remember that also returns the original object after applying the block.
🧠 Conceptual
intermediate
1:30remaining
What is the main purpose of the also function in Kotlin?
Choose the best description of what the also function is used for in Kotlin.
ATo filter elements from a collection based on a condition.
BTo perform additional actions on an object and return the original object.
CTo transform an object and return the transformed result.
DTo create a new object by copying an existing one.
Attempts:
2 left
💡 Hint
Think about whether also changes the object or just lets you do something with it.
🔧 Debug
advanced
2:30remaining
Why does this Kotlin code using also cause a NullPointerException?
Examine the code below. Why does it throw a NullPointerException at runtime?
Kotlin
var name: String? = null
val result = name.also {
    println(it!!.length)
}
println(result)
ABecause <code>also</code> returns null and println cannot print null.
BBecause <code>println</code> cannot be called inside <code>also</code>.
CBecause <code>also</code> cannot be called on nullable types.
DBecause <code>it!!</code> forces a non-null assertion on a null value causing the exception.
Attempts:
2 left
💡 Hint
Check what it!! means when it is null.
🚀 Application
advanced
2:00remaining
How to use also to log and return an object in Kotlin?
You want to log the value of a variable while returning it unchanged in a Kotlin function. Which code snippet correctly uses also for this purpose?
Aval x = compute().also { println("Value is $it") }
Bval x = compute().apply { println("Value is $this") }
Cval x = compute().run { println("Value is $this") }
Dval x = compute().let { println("Value is $it") }
Attempts:
2 left
💡 Hint
also returns the original object after running the block with it.
❓ Predict Output
expert
3:00remaining
What is the output of this Kotlin code combining also and apply?
Analyze the code below. What will be printed when it runs?
Kotlin
data class Person(var name: String, var age: Int)

val person = Person("Alice", 25).also {
    println("Also: ${it.name}")
}.apply {
    age += 1
    println("Apply: $age")
}
println("Final: ${person.age}")
A
Also: Alice
Apply: 26
Final: 25
B
Also: Alice
Apply: 25
Final: 25
C
Also: Alice
Apply: 26
Final: 26
D
Also: Alice
Apply: 25
Final: 26
Attempts:
2 left
💡 Hint
Remember that apply runs with this and returns the object, also runs with it and returns the object.

Practice

(1/5)
1. What does the also function do in Kotlin?
easy
A. Runs extra code on an object and returns the original object
B. Transforms the object and returns a new one
C. Stops the execution of the program
D. Creates a copy of the object

Solution

  1. Step 1: Understand the purpose of also

    The also function is used to run some extra code on an object without changing it.
  2. Step 2: Check the return value of also

    It returns the original object, not a transformed copy.
  3. Final Answer:

    Runs extra code on an object and returns the original object -> Option A
  4. Quick Check:

    also returns original object [OK]
Hint: Remember: also returns the original object unchanged [OK]
Common Mistakes:
  • Thinking it returns a transformed object
  • Confusing it with map or let
  • Assuming it stops program execution
2. Which of the following is the correct syntax to use also with a variable num in Kotlin?
easy
A. also(num) { println(it) }
B. num.also -> { println(it) }
C. num.also println(it)
D. num.also { println(it) }

Solution

  1. Step 1: Recall the syntax of also

    The also function is called on an object with a lambda block: object.also { ... }.
  2. Step 2: Check each option for correct syntax

    num.also { println(it) } uses the correct dot call and lambda syntax. Options A, C, and D have syntax errors or wrong usage.
  3. Final Answer:

    num.also { println(it) } -> Option D
  4. Quick Check:

    Correct also syntax uses dot and lambda [OK]
Hint: Use dot and curly braces for lambda with also [OK]
Common Mistakes:
  • Calling also as a standalone function
  • Missing curly braces for lambda
  • Using arrow without lambda properly
3. What is the output of this Kotlin code?
val list = mutableListOf(1, 2, 3)
val result = list.also { it.add(4) }
println(result)
medium
A. Compilation error
B. [1, 2, 3]
C. [1, 2, 3, 4]
D. Runtime exception

Solution

  1. Step 1: Understand what also does here

    The also block adds 4 to the mutable list. Since the list is mutable, it changes the original list.
  2. Step 2: Check the returned value

    also returns the original list, now modified with 4 added.
  3. Final Answer:

    [1, 2, 3, 4] -> Option C
  4. Quick Check:

    also returns original object after modification [OK]
Hint: also returns original object, so changes show in output [OK]
Common Mistakes:
  • Thinking also returns a new list
  • Ignoring that list is mutable
  • Expecting original list without 4
4. Identify the error in this Kotlin code using also:
val text = "Hello"
text.also { it = it + " World" }
println(text)
medium
A. println syntax is incorrect
B. Cannot reassign 'it' inside also lambda
C. also cannot be used with strings
D. Missing return statement in also

Solution

  1. Step 1: Analyze the lambda parameter 'it'

    In also, 'it' is a val (read-only), so you cannot reassign it inside the lambda.
  2. Step 2: Check the code for reassignment

    The code tries to do it = it + " World", which is illegal and causes a compilation error.
  3. Final Answer:

    Cannot reassign 'it' inside also lambda -> Option B
  4. Quick Check:

    Lambda parameter 'it' is read-only [OK]
Hint: Remember: 'it' in also lambda is read-only [OK]
Common Mistakes:
  • Trying to reassign 'it' inside lambda
  • Confusing also with let for transformations
  • Ignoring immutability of lambda parameters
5. Given a list of user names, how can you use also to log each name while returning the original list unchanged?
val users = listOf("Alice", "Bob", "Carol")
// Insert code here
println(users)
hard
A. users.also { it.forEach { name -> println(name) } }
B. users.map { println(it) }
C. users.let { it.forEach { println(it) } }
D. users.forEach { println(it) }

Solution

  1. Step 1: Understand the goal

    We want to log each name but keep the original list unchanged and returned.
  2. Step 2: Check each option's behavior

    users.also { it.forEach { name -> println(name) } } uses also to run logging side effects and returns the original list. Options B and C return transformed or Unit types, and D returns Unit.
  3. Final Answer:

    users.also { it.forEach { name -> println(name) } } -> Option A
  4. Quick Check:

    also runs side effects and returns original object [OK]
Hint: Use also for side effects without changing the object [OK]
Common Mistakes:
  • Using map which changes the list
  • Using let which returns last lambda result
  • Using forEach alone which returns Unit
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