0
0
Kotlinprogramming~20 mins

Building blocks of type-safe builders in Kotlin - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Type-Safe Builder Master
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 type-safe builder code?
Consider this Kotlin code using a type-safe builder pattern. What will it print?
Kotlin
class Html {
    private val children = mutableListOf<String>()
    fun body(init: Body.() -> Unit) {
        val body = Body()
        body.init()
        children.add(body.render())
    }
    fun render() = "<html>" + children.joinToString() + "</html>"
}

class Body {
    private val texts = mutableListOf<String>()
    fun p(text: String) {
        texts.add("<p>$text</p>")
    }
    fun render() = texts.joinToString("")
}

fun html(init: Html.() -> Unit): Html {
    val html = Html()
    html.init()
    return html
}

fun main() {
    val page = html {
        body {
            p("Hello")
            p("World")
        }
    }
    println(page.render())
}
A<html><p>Hello</p><p>World</p></html>
B<html><p>HelloWorld</p></html>
C<html><body><p>Hello</p><p>World</p></body></html>
D<html><body>HelloWorld</body></html>
Attempts:
2 left
💡 Hint
Look at how the Body class renders its paragraphs and how Html collects children.
🧠 Conceptual
intermediate
1:30remaining
Which Kotlin feature enables type-safe builders to restrict DSL usage?
In Kotlin type-safe builders, which language feature helps restrict the scope of DSL functions to prevent misuse?
AThe lateinit modifier
BThe companion object
CThe inline keyword
DThe @DslMarker annotation
Attempts:
2 left
💡 Hint
This feature marks DSL receiver classes to avoid mixing scopes.
🔧 Debug
advanced
2:00remaining
Why does this Kotlin type-safe builder code cause a compilation error?
Examine the code below. Why does it fail to compile?
Kotlin
class Container {
    fun addItem(item: String) {
        println("Added: $item")
    }
}

fun container(init: Container.() -> Unit): Container {
    val c = Container()
    c.init()
    return c
}

fun main() {
    container {
        addItem("First")
        addItem(123) // Error here
    }
}
ABecause Container class lacks a constructor
BBecause container function is missing return type
CBecause addItem expects a String but 123 is an Int
DBecause init lambda is not marked inline
Attempts:
2 left
💡 Hint
Check the parameter type of addItem and the argument passed.
📝 Syntax
advanced
1:30remaining
Which option correctly defines a Kotlin type-safe builder function with receiver?
Select the correct syntax for a Kotlin function that takes a lambda with receiver to build a DSL.
Afun build(init: Builder.() -> Unit): Unit { val b = Builder(); init(b) }
Bfun build(init: Builder.() -> Unit): Builder { val b = Builder(); b.init(); return b }
Cfun build(init: Builder -> Unit): Builder { val b = Builder(); init(b); return b }
Dfun build(init: (Builder) -> Unit): Builder { val b = Builder(); init(b); return b }
Attempts:
2 left
💡 Hint
Look for the correct lambda with receiver syntax and return type.
🚀 Application
expert
1:30remaining
How many items are in the resulting list after this Kotlin type-safe builder runs?
Given this Kotlin code using a type-safe builder, how many items does the list contain after execution?
Kotlin
class ListBuilder {
    private val items = mutableListOf<String>()
    fun item(value: String) {
        items.add(value)
    }
    fun build() = items
}

fun list(init: ListBuilder.() -> Unit): List<String> {
    val builder = ListBuilder()
    builder.init()
    return builder.build()
}

fun main() {
    val result = list {
        item("A")
        item("B")
        item("C")
    }
    println(result.size)
}
A3
B0
C1
DCompilation error
Attempts:
2 left
💡 Hint
Count how many times item() is called inside the builder.