An infix function is a special kind of function that can be called using infix notation, meaning you can write it between its receiver and argument without dots or parentheses, making code more readable and natural.
Click to reveal answer
beginner
How do you declare an infix function in Kotlin?
You declare an infix function by adding the keyword infix before the function name. It must be a member function or an extension function with a single parameter and no varargs or default values.
Click to reveal answer
intermediate
Why are infix functions useful in DSLs (Domain Specific Languages)?
Infix functions make DSL code look cleaner and more like natural language, improving readability and expressiveness by allowing calls without dots or parentheses, which fits well with DSL style.
Click to reveal answer
beginner
Example: What does this Kotlin code do?
infix fun Int.times(str: String) = str.repeat(this)
This defines an infix function times that repeats a string a given number of times. For example, 2 times "Hi" returns "HiHi".
Click to reveal answer
intermediate
What are the restrictions on parameters for infix functions?
Infix functions must have exactly one parameter. They cannot have varargs, default parameter values, or multiple parameters.
Click to reveal answer
Which keyword is used to declare an infix function in Kotlin?
Afun
Binline
Cinfix
Doverride
✗ Incorrect
The infix keyword marks a function as infix, allowing it to be called without dots or parentheses.
What is a requirement for the parameter of an infix function?
AIt must be a vararg parameter
BIt can have multiple parameters
CIt must have default values
DIt must be a single parameter without default values
✗ Incorrect
Infix functions must have exactly one parameter and cannot have default values or varargs.
How would you call an infix function named connect on an object a with argument b?
Aa.connect(b)
Ba connect b
Cconnect(a, b)
Dconnect a b
✗ Incorrect
Infix functions are called using infix notation: a connect b without dots or parentheses.
Why are infix functions popular in Kotlin DSLs?
AThey make code look more natural and readable
BThey improve performance
CThey allow multiple parameters
DThey require less memory
✗ Incorrect
Infix functions improve readability and make DSL code look like natural language.
Which of these is NOT allowed in an infix function declaration?
AMultiple parameters
BSingle parameter
CExtension function
DMember function
✗ Incorrect
Infix functions cannot have multiple parameters; they must have exactly one.
Explain what an infix function is and how it helps in creating DSLs in Kotlin.
Think about how you write code that reads like a sentence.
You got /4 concepts.
Describe the rules and restrictions for declaring an infix function in Kotlin.
Focus on the function signature and keywords.
You got /5 concepts.
Practice
(1/5)
1. What is the main benefit of using infix functions in Kotlin DSLs?
easy
A. They allow calling functions without dots or parentheses, making code more readable.
B. They improve the performance of the program.
C. They enable functions to have multiple return types.
D. They automatically generate UI components.
Solution
Step 1: Understand the purpose of infix functions
Infix functions let you call a function with one argument without using dots or parentheses, making code look cleaner.
Step 2: Identify the benefit in DSLs
This style makes domain-specific languages (DSLs) easier to read and write, resembling natural language.
Final Answer:
They allow calling functions without dots or parentheses, making code more readable. -> Option A
Quick Check:
Infix functions improve readability = C [OK]
Hint: Infix means no dots or parentheses for one-argument calls [OK]
Common Mistakes:
Thinking infix improves performance
Believing infix allows multiple return types
Assuming infix auto-generates UI
2. Which of the following is the correct syntax to declare an infix function in Kotlin?
easy
A. infix fun add(x: Int) { }
B. fun infix add(x: Int) { }
C. fun add infix(x: Int) { }
D. fun add(x: Int) infix { }
Solution
Step 1: Recall infix function declaration rules
In Kotlin, the keyword infix must appear before fun when declaring an infix function.
Step 2: Match the correct syntax
infix fun add(x: Int) { } correctly places infix before fun and declares the function with one parameter.
Final Answer:
infix fun add(x: Int) { } -> Option A
Quick Check:
Keyword order: infix before fun = A [OK]
Hint: Remember: 'infix' keyword comes before 'fun' in declaration [OK]
Common Mistakes:
Placing 'infix' after function name
Putting 'infix' after parameter list
Omitting 'infix' keyword entirely
3. What will be the output of the following Kotlin code?
class Builder {
infix fun add(value: String) {
println("Added: $value")
}
}
fun main() {
val b = Builder()
b add "Kotlin"
}
medium
A. No output
B. b add Kotlin
C. Syntax error
D. Added: Kotlin
Solution
Step 1: Understand infix function call
The infix function add is called on object b with argument "Kotlin" without dots or parentheses.
Step 2: Check the function behavior
The function prints "Added: Kotlin" to the console.
Final Answer:
Added: Kotlin -> Option D
Quick Check:
Infix call prints 'Added: Kotlin' = A [OK]
Hint: Infix calls print inside function as expected [OK]
Common Mistakes:
Expecting syntax error due to missing parentheses
Thinking it prints the call expression
Assuming no output without explicit print
4. Identify the error in this Kotlin code using an infix function:
class Config {
infix fun set(key: String, value: String) {
println("$key = $value")
}
}
fun main() {
val c = Config()
c set ("color", "blue")
}
medium
A. Missing return type declaration.
B. Infix functions cannot have more than one parameter.
C. The function name 'set' is reserved and cannot be infix.
D. Parentheses are not allowed in infix calls.
Solution
Step 1: Check infix function parameter count
Kotlin infix functions must have exactly one parameter, but here set has two parameters.
Step 2: Understand the error cause
This causes a compilation error because infix functions cannot have multiple parameters.
Final Answer:
Infix functions cannot have more than one parameter. -> Option B
Quick Check:
One parameter only for infix = D [OK]
Hint: Infix functions accept exactly one parameter [OK]
Common Mistakes:
Trying to use multiple parameters in infix
Assuming parentheses are forbidden in all calls
Thinking 'set' is a reserved infix name
5. Given the following Kotlin DSL code, what will be the output?
class HtmlTag(val name: String) {
private val children = mutableListOf<HtmlTag>()
infix fun add(child: HtmlTag) {
children.add(child)
}
fun render(): String {
val inner = children.joinToString("") { it.render() }
return "<$name>$inner</$name>"
}
}
fun main() {
val html = HtmlTag("html")
val body = HtmlTag("body")
val p = HtmlTag("p")
html add body
body add p
println(html.render())
}
hard
A.
B.
C.
D. Compilation error due to infix usage
Solution
Step 1: Understand the infix add function
The infix function add adds child tags to the parent's children list, building a tree structure.
Step 2: Trace the tag hierarchy and rendering
html adds body, body adds p, so the structure is html > body > p. The render function outputs nested tags accordingly.