Bird
Raised Fist0
Kotlinprogramming~5 mins

Closures and variable capture in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a closure in Kotlin?
A closure is a function that captures variables from its surrounding scope and can use them even after that scope has ended.
Click to reveal answer
intermediate
How does Kotlin handle variable capture in closures?
Kotlin captures variables by reference, so if the variable changes after the closure is created, the closure sees the updated value.
Click to reveal answer
intermediate
What happens if you modify a captured variable inside a Kotlin closure?
If the variable is mutable (like a var), the closure can modify it, and changes will be visible outside the closure as well.
Click to reveal answer
beginner
Explain variable capture with an example in Kotlin.
Example: var count = 0 val increment = { count += 1 } increment() println(count) // prints 1 Here, the closure 'increment' captures 'count' and modifies it.
Click to reveal answer
beginner
Why are closures useful in Kotlin programming?
Closures let you write flexible code by keeping state inside functions, enabling callbacks, and simplifying asynchronous or event-driven programming.
Click to reveal answer
In Kotlin, what does a closure capture from its surrounding scope?
AOnly function names
BVariables and their current values
COnly immutable variables
DNothing, closures have no access to outside variables
If a variable captured by a Kotlin closure changes after the closure is created, what value does the closure see?
AThe updated value
BThe original value at capture time
CNull
DAn error occurs
Which keyword in Kotlin declares a mutable variable that can be captured and modified by a closure?
Avar
Bval
Cfun
Dconst
What will the following Kotlin code print? var x = 5 val f = { x += 10 } f() println(x)
AError
B5
C10
D15
Why are closures important in asynchronous programming?
AThey run code faster
BThey prevent any variable changes
CThey keep state and access variables even after the outer function ends
DThey block the main thread
Describe what a closure is and how Kotlin captures variables inside it.
Think about how a function can remember variables from outside its own body.
You got /3 concepts.
    Explain with an example how modifying a captured variable inside a Kotlin closure affects the variable outside the closure.
    Use a simple var variable and a lambda that changes it.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does a closure in Kotlin do with variables from its surrounding scope?
      easy
      A. It copies the variables but cannot modify them.
      B. It deletes those variables to save memory.
      C. It ignores variables outside its own body.
      D. It remembers and can use those variables even after the outer function ends.

      Solution

      1. Step 1: Understand closure behavior

        A closure is a function that keeps access to variables from where it was created, even if that place no longer exists.
      2. Step 2: Apply to Kotlin closures

        In Kotlin, lambdas capture variables from the surrounding scope and can use them later.
      3. Final Answer:

        It remembers and can use those variables even after the outer function ends. -> Option D
      4. Quick Check:

        Closure remembers and can use variables even after outer ends = C [OK]
      Hint: Closures keep variables alive beyond their original scope [OK]
      Common Mistakes:
      • Thinking closures delete outside variables
      • Believing closures only copy variables without access
      • Assuming closures ignore outside variables
      2. Which of the following is the correct syntax to create a lambda that captures a variable count in Kotlin?
      easy
      A. val lambda = (count) -> println(count)
      B. val lambda = { println(count) }
      C. val lambda = fun(count) { println(count) }
      D. val lambda = { count -> println() }

      Solution

      1. Step 1: Identify lambda syntax capturing external variable

        In Kotlin, a lambda can access variables from outside without parameters by just using them inside curly braces.
      2. Step 2: Check each option

        val lambda = { println(count) } correctly uses count from outside. val lambda = (count) -> println(count) tries to declare a parameter but syntax is wrong. val lambda = fun(count) { println(count) } uses fun keyword incorrectly. val lambda = { count -> println() } declares a parameter but does not use it properly.
      3. Final Answer:

        val lambda = { println(count) } -> Option B
      4. Quick Check:

        Lambda uses outside variable directly = A [OK]
      Hint: Use curly braces and refer to outside variables directly [OK]
      Common Mistakes:
      • Trying to declare external variables as lambda parameters
      • Using incorrect lambda syntax with fun keyword
      • Not referencing the variable inside the lambda body
      3. What will be the output of the following Kotlin code?
      fun main() {
          var x = 5
          val closure = { x += 1; println(x) }
          closure()
          closure()
          println(x)
      }
      medium
      A. 6\n7\n7
      B. 6\n6\n5
      C. 6\n7\n5
      D. 5\n5\n5

      Solution

      1. Step 1: Trace the closure calls and variable changes

        Initially, x = 5. First closure call increments x to 6 and prints 6. Second call increments x to 7 and prints 7.
      2. Step 2: Print final value of x

        After two increments, x is 7, so printing x outputs 7.
      3. Final Answer:

        6\n7\n7 -> Option A
      4. Quick Check:

        Closure increments x twice, final x = 7 [OK]
      Hint: Closures can modify captured vars; track changes stepwise [OK]
      Common Mistakes:
      • Assuming closure uses a copy of x, not the original
      • Forgetting x increments on each closure call
      • Confusing printed values with initial x
      4. Identify the error in this Kotlin code that tries to capture a variable inside a loop:
      fun main() {
          val funcs = mutableListOf<() -> Unit>()
          for (i in 1..3) {
              funcs.add { println(i) }
          }
          funcs.forEach { it() }
      }
      medium
      A. All lambdas print 3 instead of 1, 2, 3
      B. Runtime error: variable i not found
      C. Lambdas print 1, 2, 3 correctly
      D. Syntax error: cannot capture loop variable

      Solution

      1. Step 1: Understand variable capture in Kotlin loops

        Kotlin captures the loop variable i correctly for each lambda, so each lambda remembers its own i value.
      2. Step 2: Check output of lambdas

        When calling each lambda, they print 1, 2, and 3 respectively, no error occurs.
      3. Final Answer:

        Lambdas print 1, 2, 3 correctly -> Option C
      4. Quick Check:

        Kotlin captures loop vars per iteration = B [OK]
      Hint: Kotlin captures loop vars freshly each iteration [OK]
      Common Mistakes:
      • Assuming all lambdas print the last loop value
      • Expecting syntax or runtime errors for capturing loop vars
      • Confusing Kotlin behavior with other languages like JavaScript
      5. You want to create a list of functions in Kotlin, each printing a different number from 1 to 3. Which code correctly captures the variable to avoid all functions printing the same number?
      val funcs = mutableListOf<() -> Unit>()
      for (i in 1..3) {
          // What to do here?
      }
      funcs.forEach { it() }
      hard
      A. for (i in 1..3) { funcs.add { println(i) } }
      B. for (i in 1..3) { val x = i + 1; funcs.add { println(x) } }
      C. for (i in 1..3) { funcs.add { println(i + 1) } }
      D. for (i in 1..3) { val x = i; funcs.add { println(x + 1) } }

      Solution

      1. Step 1: Understand variable capture in Kotlin for loops

        In Kotlin, lambdas added inside a for (i in 1..3) capture the i from their iteration correctly.
      2. Step 2: Check each snippet

        funcs.add { println(i) } prints 1 then 2 then 3. The snippet with val x = i + 1; funcs.add { println(x) } prints 2 3 4. funcs.add { println(i + 1) } prints 2 3 4. val x = i; funcs.add { println(x + 1) } prints 2 3 4.
      3. Final Answer:

        for (i in 1..3) { funcs.add { println(i) } } -> Option A
      4. Quick Check:

        Direct println(i) in for loop lambda = B [OK]
      Hint: Directly use loop var i inside lambda [OK]
      Common Mistakes:
      • Declaring x = i + 1 and printing x (prints 2 3 4)
      • Printing i + 1 directly (prints 2 3 4)
      • Copying to x = i but printing x + 1 (prints 2 3 4)
      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