Extensions let you add new functions to existing types like String or Int without changing their code. This helps you write cleaner and easier-to-read programs.
Extensions on built-in types in Kotlin
fun TypeName.newFunctionName(params): ReturnType { // function body }
Replace TypeName with the built-in type you want to extend, like String or Int.
The function can be called directly on any value of that type.
fun String.addExclamation(): String { return this + "!" }
fun Int.isEven(): Boolean { return this % 2 == 0 }
fun Double.square(): Double = this * this
This program adds two extension functions: one to make a string uppercase and add an exclamation, and one to check if an integer is positive. It then uses them and prints the results.
fun String.shout(): String { return this.uppercase() + "!" } fun Int.isPositive(): Boolean { return this > 0 } fun main() { val word = "hello" println(word.shout()) val number = 10 println("Is $number positive? ${number.isPositive()}") }
Extension functions do not actually change the original class; they are just a convenient way to call new functions on existing types.
You can add extension properties, but they do not store data in the instance (they use getters/setters).
If a member function and an extension function have the same signature, the member function is called.
Extensions let you add new functions to built-in types without changing their code.
They make your code cleaner and easier to read by calling functions directly on values.
Use the syntax fun TypeName.functionName() to create an extension function.
Practice
Solution
Step 1: Understand extension functions concept
Extension functions allow adding new functions to existing types without changing their original code.Step 2: Compare options with concept
Only To add new functions to existing types without modifying their source code correctly describes this purpose. Options B and C talk about inheritance and overriding, which are different concepts. To convert one type to another automatically is unrelated.Final Answer:
To add new functions to existing types without modifying their source code -> Option BQuick Check:
Extension functions add new behavior without changing original code [OK]
- Confusing extension functions with inheritance
- Thinking extensions override existing methods
- Believing extensions convert types automatically
isEven for Int in Kotlin?Solution
Step 1: Recall extension function syntax
Extension functions are declared asfun TypeName.functionName(). Here,Int.isEven()is correct.Step 2: Check each option
fun Int.isEven(): Boolean { return this % 2 == 0 } matches the correct syntax. fun isEven(): Boolean { return this % 2 == 0 } misses the receiver type. fun Int.isEven: Boolean = this % 2 == 0 misses parentheses. fun isEven(Int): Boolean = Int % 2 == 0 has wrong parameter syntax.Final Answer:
fun Int.isEven(): Boolean { return this % 2 == 0 } -> Option AQuick Check:
Extension syntax = fun TypeName.functionName() [OK]
- Omitting the receiver type before function name
- Missing parentheses after function name
- Using parameter instead of receiver for extension
fun String.addExclamation() = this + "!"
fun main() {
val word = "Hello"
println(word.addExclamation())
}Solution
Step 1: Understand the extension function behavior
The extension functionaddExclamationadds an exclamation mark to the string.Step 2: Trace the main function output
Callingword.addExclamation()returns "Hello!" which is printed.Final Answer:
Hello! -> Option DQuick Check:
Extension adds "!" so output is "Hello!" [OK]
- Expecting original string unchanged
- Thinking extension adds multiple exclamations
- Assuming syntax error due to extension
fun Int.isPositive {
return this > 0
}Solution
Step 1: Check function declaration syntax
Extension functions must have parentheses after the function name, even if no parameters.Step 2: Identify the fix
Add parentheses:fun Int.isPositive(). Other options are incorrect because Boolean return is allowed, Int is valid receiver, and return statements are allowed.Final Answer:
Missing parentheses after function name; should be fun Int.isPositive() -> Option AQuick Check:
Extension functions need () after name [OK]
- Omitting parentheses after function name
- Thinking extensions can't return values
- Confusing receiver type validity
wordCount for String that returns the number of words separated by spaces. Which implementation correctly handles multiple spaces and empty strings?Solution
Step 1: Understand the problem requirements
We need to count words separated by spaces, ignoring extra spaces and empty strings.Step 2: Analyze each option
fun String.wordCount() = this.split(" ").size splits by space but counts empty strings if multiple spaces exist. fun String.wordCount() = this.trim().split(" ").filter { it.isNotEmpty() }.size trims, splits, filters out empty strings, then counts, correctly handling multiple spaces and empty strings. fun String.wordCount() = this.length returns string length, unrelated. fun String.wordCount() = this.count { it == ' ' } counts spaces, not words.Final Answer:
fun String.wordCount() = this.trim().split(" ").filter { it.isNotEmpty() }.size -> Option CQuick Check:
Trim, split, filter empty = correct word count [OK]
- Counting empty strings as words
- Using string length instead of word count
- Counting spaces instead of words
Ready to prove it?
Pass the test and this pattern moves unknown
