Bird
Raised Fist0
Kotlinprogramming~5 mins

Lazy property delegation in Kotlin - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is lazy property delegation in Kotlin?
Lazy property delegation means the property value is computed only once when it is first accessed, not when the object is created. This helps save resources by delaying work until needed.
Click to reveal answer
beginner
How do you declare a lazy property in Kotlin?
Use the by lazy { ... } syntax. For example:
val name: String by lazy { "John" } means name is computed only on first use.
Click to reveal answer
beginner
What happens if you access a lazy property multiple times?
The lazy property is computed only once on the first access. Later accesses return the cached value without recomputing.
Click to reveal answer
intermediate
Can lazy properties be thread-safe in Kotlin?
Yes. By default, lazy is thread-safe and ensures the value is computed only once even in multiple threads. You can change this behavior with parameters.
Click to reveal answer
intermediate
Why use lazy property delegation instead of initializing directly?
Lazy delegation delays expensive computations or resource loading until needed. This improves performance and reduces startup time.
Click to reveal answer
How do you declare a lazy property in Kotlin?
Aval x by lazy { ... }
Bval x = lazy { ... }
Clazy val x = ...
Dval x = lazy()
When is the value of a lazy property computed?
ANever
BWhen the object is created
CEvery time the property is accessed
DWhen the property is first accessed
What happens if multiple threads access a lazy property by default?
AThe property is computed multiple times
BThe property is computed once safely
CAn error occurs
DThe property is not computed
Which of these is NOT a benefit of lazy property delegation?
AAlways recomputes value on access
BImproves startup performance
CDelays expensive computation
DCaches computed value
How can you change the thread-safety mode of a lazy property?
ABy overriding a method
BBy using a different keyword
CBy passing a parameter to lazy()
DYou cannot change it
Explain how lazy property delegation works in Kotlin and why it is useful.
Think about when the property value is created and how it helps with resources.
You got /4 concepts.
    Describe the syntax to declare a lazy property and how thread-safety is handled by default.
    Focus on the keyword and default behavior in multi-threaded situations.
    You got /4 concepts.

      Practice

      (1/5)
      1. What does lazy property delegation in Kotlin do?
      easy
      A. Deletes the property value after each use
      B. Delays the creation of a property value until it is first accessed
      C. Creates the property value immediately when the object is created
      D. Allows multiple values to be stored in the same property

      Solution

      1. Step 1: Understand lazy delegation concept

        Lazy delegation means the property value is not created when the object is made, but only when the property is accessed for the first time.
      2. Step 2: Compare options with this concept

        Delays the creation of a property value until it is first accessed matches this behavior exactly. Options A, B, and D describe different behaviors not related to lazy delegation.
      3. Final Answer:

        Delays the creation of a property value until it is first accessed -> Option B
      4. Quick Check:

        Lazy property = delayed creation [OK]
      Hint: Lazy means create value only when first needed [OK]
      Common Mistakes:
      • Thinking lazy creates value immediately
      • Confusing lazy with caching multiple values
      • Assuming lazy deletes values after use
      2. Which of the following is the correct syntax to declare a lazy property in Kotlin?
      easy
      A. val name = lazy("John")
      B. val name = lazy { "John" }
      C. val name by lazy { "John" }
      D. lazy val name = "John"

      Solution

      1. Step 1: Recall Kotlin lazy syntax

        In Kotlin, lazy properties use the syntax: val propertyName by lazy { initializer }.
      2. Step 2: Match options with correct syntax

        val name by lazy { "John" } matches this exactly. val name = lazy { "John" } assigns lazy delegate but does not use 'by'. lazy val name = "John" uses invalid order. val name = lazy("John") uses wrong function call syntax.
      3. Final Answer:

        val name by lazy { "John" } -> Option C
      4. Quick Check:

        Use 'by lazy { }' for lazy property [OK]
      Hint: Remember: val x by lazy { ... } [OK]
      Common Mistakes:
      • Omitting 'by' keyword
      • Using lazy() as a function call incorrectly
      • Placing 'lazy' before 'val'
      3. What will be the output of this Kotlin code?
      val lazyValue by lazy {
          println("Computing...")
          10
      }
      
      fun main() {
          println(lazyValue)
          println(lazyValue)
      }
      medium
      A. Computing...\n10\n10
      B. 10\n10
      C. Computing...\n10\nComputing...\n10
      D. Computing...\nComputing...\n10\n10

      Solution

      1. Step 1: Understand lazy initialization behavior

        The lambda inside lazy runs only once, when the property is first accessed. It prints "Computing..." and returns 10.
      2. Step 2: Trace the program output

        First println(lazyValue) triggers lazy initialization, printing "Computing..." then 10. Second println(lazyValue) uses cached value, printing only 10.
      3. Final Answer:

        Computing...\n10\n10 -> Option A
      4. Quick Check:

        Lazy runs once, then caches value [OK]
      Hint: Lazy block runs once, then cached value used [OK]
      Common Mistakes:
      • Assuming lazy block runs every access
      • Missing that println inside lazy prints once
      • Confusing output order
      4. Identify the error in this Kotlin code using lazy delegation:
      class Example {
          val number = lazy { 5 }
      }
      
      fun main() {
          val e = Example()
          println(e.number)
      }
      medium
      A. The lazy block must return a String, not Int
      B. The println statement is missing parentheses
      C. The lazy delegate cannot be used inside a class
      D. The property 'number' should be declared with 'by lazy', not assigned directly

      Solution

      1. Step 1: Check lazy property declaration

        The property 'number' is assigned lazy { 5 } directly, but lazy delegation requires 'by lazy' syntax.
      2. Step 2: Identify correct syntax

        Correct declaration is 'val number by lazy { 5 }'. Without 'by', 'number' is a Lazy<Int> object, not the Int value.
      3. Final Answer:

        The property 'number' should be declared with 'by lazy', not assigned directly -> Option D
      4. Quick Check:

        Use 'by lazy' keyword for lazy properties [OK]
      Hint: Lazy needs 'by lazy', not just assignment [OK]
      Common Mistakes:
      • Omitting 'by' keyword
      • Confusing lazy delegate type with property type
      • Thinking lazy only works outside classes
      5. You want to create a Kotlin class where a heavy computation is done only once and reused, but the computation depends on a constructor parameter. How should you use lazy delegation to achieve this?
      class Calculator(val input: Int) {
          val result by lazy { /* ??? */ }
      }
      Which is the correct way to implement the lazy block?
      hard
      A. val result by lazy { compute() } // where compute() is a member function
      B. val result by lazy { Calculator(input).compute() }
      C. val result by lazy { input }
      D. val result by lazy { input * 2 }

      Solution

      1. Step 1: Understand lazy with constructor parameter

        The lazy block can access constructor parameters and member functions. Using a member function keeps code clean and reusable.
      2. Step 2: Evaluate options

        val result by lazy { input * 2 } uses input directly, which works but may duplicate logic. val result by lazy { Calculator(input).compute() } creates a new Calculator inside lazy, causing recursion. val result by lazy { input } just returns input, no computation. val result by lazy { compute() } // where compute() is a member function calls a member function compute(), which can use input and perform heavy work once.
      3. Final Answer:

        val result by lazy { compute() } // where compute() is a member function -> Option A
      4. Quick Check:

        Use member function inside lazy for complex computation [OK]
      Hint: Call member function inside lazy for complex work [OK]
      Common Mistakes:
      • Creating new instance inside lazy causing recursion
      • Using constructor parameter directly without logic
      • Returning parameter without computation
      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