Bird
Raised Fist0
Kotlinprogramming~10 mins

Testing scope functions and lambdas in Kotlin - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to print the length of the string using let.

Kotlin
val text = "hello"
text.[1] {
    println(it.length)
}
Drag options to blanks, or click blank then click option'
Aapply
Brun
Clet
Dalso
Attempts:
3 left
💡 Hint
Common Mistakes
Using apply which uses this instead of it.
Using also which returns the original object but is meant for side effects.
2fill in blank
medium

Complete the code to initialize and print the length of the string using run.

Kotlin
val length = "Kotlin".[1] {
    length
}
println(length)
Drag options to blanks, or click blank then click option'
Aalso
Blet
Cwith
Drun
Attempts:
3 left
💡 Hint
Common Mistakes
Using also which returns the original object, not the lambda result.
Using let which uses it instead of this.
3fill in blank
hard

Fix the error in the lambda to correctly filter even numbers.

Kotlin
val numbers = listOf(1, 2, 3, 4, 5)
val evens = numbers.filter { it [1] 2 == 0 }
println(evens)
Drag options to blanks, or click blank then click option'
A+
B%
C*
D/
Attempts:
3 left
💡 Hint
Common Mistakes
Using / which performs division and returns a quotient.
Using + or * which are arithmetic but not for checking evenness.
4fill in blank
hard

Fill both blanks to create a map of words to their lengths, filtering words longer than 3 characters.

Kotlin
val words = listOf("cat", "house", "dog", "elephant")
val lengths = words.associateWith { [1] }
val filtered = lengths.filter { it.value [2] 3 }
println(filtered)
Drag options to blanks, or click blank then click option'
Ait.length
B>
C<=
Dit.size
Attempts:
3 left
💡 Hint
Common Mistakes
Using it.size which is not a string property.
Using wrong comparison operators like <= instead of >.
5fill in blank
hard

Fill all three blanks to create a map of uppercase words to their lengths, filtering lengths greater than 4.

Kotlin
val words = listOf("apple", "bat", "carrot", "dog")
val result = words.associate { [1] to [2] }
    .filter { it.value [3] 4 }
println(result)
Drag options to blanks, or click blank then click option'
Ait.uppercase()
Bit.length
C>
Dit.toString()
Attempts:
3 left
💡 Hint
Common Mistakes
Using it.toString() which returns the same string.
Using < or <= instead of > for filtering.

Practice

(1/5)
1. Which Kotlin scope function returns the object it was called on after executing the given lambda?
easy
A. run
B. also
C. let
D. apply

Solution

  1. Step 1: Understand scope function behavior

    The also function executes the lambda with the object as it and returns the original object.
  2. Step 2: Compare with other functions

    let returns the lambda result, run returns lambda result, apply returns the object but uses this inside lambda.
  3. Final Answer:

    also -> Option B
  4. Quick Check:

    Returns original object after lambda = also [OK]
Hint: Remember: also returns object, let returns lambda result [OK]
Common Mistakes:
  • Confusing 'also' with 'let' return values
  • Mixing 'apply' and 'also' usage
  • Assuming 'run' returns the object
2. Which of the following is the correct syntax to use the let scope function on a nullable variable name?
easy
A. name?.let { println(it) }
B. name.let { println(it) }
C. let(name) { println(it) }
D. name?.let println(it)

Solution

  1. Step 1: Check nullable safe call usage

    To safely call let on a nullable variable, use the safe call operator ?..
  2. Step 2: Validate lambda syntax

    The lambda must be enclosed in braces {} and use it as the implicit parameter.
  3. Final Answer:

    name?.let { println(it) } -> Option A
  4. Quick Check:

    Safe call with lambda braces = name?.let { println(it) } [OK]
Hint: Use ?.let { } for nullable variables to avoid errors [OK]
Common Mistakes:
  • Omitting safe call operator on nullable
  • Incorrect lambda syntax without braces
  • Trying to call let as a standalone function
3. What is the output of this Kotlin code?
val result = "hello".run {
    println(this.uppercase())
    this.length
}
println(result)
medium
A. 5 HELLO
B. hello 5
C. HELLO hello
D. HELLO 5

Solution

  1. Step 1: Understand run behavior

    The run function executes the lambda with this as the receiver and returns the lambda's last expression.
  2. Step 2: Trace the code execution

    Inside lambda, println(this.uppercase()) prints "HELLO". Then this.length returns 5, assigned to result. Finally, println(result) prints 5.
  3. Final Answer:

    HELLO 5 -> Option D
  4. Quick Check:

    run prints uppercase then returns length = HELLO and 5 [OK]
Hint: run returns last lambda value; println outputs immediately [OK]
Common Mistakes:
  • Assuming run returns the printed string
  • Confusing this with it inside lambda
  • Mixing order of printed lines
4. Identify the error in this Kotlin code snippet:
val numbers = listOf(1, 2, 3)
numbers.also {
    it.add(4)
}
println(numbers)
medium
A. Missing lambda parameter name
B. also does not return the list
C. Cannot call add on immutable list
D. Syntax error in lambda

Solution

  1. Step 1: Check list mutability

    listOf creates an immutable list; calling add is not allowed.
  2. Step 2: Understand scope function effect

    also runs the lambda but does not change immutability; trying to add causes a runtime error.
  3. Final Answer:

    Cannot call add on immutable list -> Option C
  4. Quick Check:

    Immutable list blocks add() method = Cannot call add on immutable list [OK]
Hint: listOf creates immutable list; use mutableListOf to add [OK]
Common Mistakes:
  • Assuming also changes list mutability
  • Ignoring immutable list restrictions
  • Thinking lambda syntax is wrong
5. Given a list of nullable integers val nums = listOf(1, null, 3, null, 5), which code snippet correctly uses scope functions and lambdas to create a list of doubled non-null values?
hard
A. nums.filterNotNull().map { it * 2 }
B. nums.map { it * 2 }.filterNotNull()
C. nums.also { it.map { it * 2 } }
D. nums.run { map { it!! * 2 } }

Solution

  1. Step 1: Remove nulls before mapping

    Use filterNotNull() to exclude null values safely.
  2. Step 2: Map remaining values to double

    Apply map { it * 2 } on non-null list to double each integer.
  3. Final Answer:

    nums.filterNotNull().map { it * 2 } -> Option A
  4. Quick Check:

    Filter nulls then map doubling = nums.filterNotNull().map { it * 2 } [OK]
Hint: Filter nulls first, then map to avoid null errors [OK]
Common Mistakes:
  • Mapping before filtering nulls causes null results
  • Using unsafe !! operator risking exceptions
  • Misusing also or run without returning correct list
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