Kotlin
Beginner
1 min read
Extension Properties and Members
Example
// Extension property on String
val String.isPalindrome: Boolean
get() {
val cleaned = lowercase().filter { it.isLetter() }
return cleaned == cleaned.reversed()
}
// Extension property on List
val <T> List<T>.lastIndex: Int
get() = size - 1
// Extension on companion object (if class has one)
class Matrix(val rows: Int, val cols: Int) {
companion object
}
fun Matrix.Companion.identity(n: Int): Matrix {
// returns n×n identity matrix (simplified)
return Matrix(n, n)
}
// Member extension — DSL pattern
class HtmlBuilder {
private val sb = StringBuilder()
fun String.tag(name: String): String {
sb.append("<$name>$this</$name>")
return this
}
fun build() = sb.toString()
}
fun buildHtml(block: HtmlBuilder.() -> Unit): String {
val builder = HtmlBuilder()
builder.block()
return builder.build()
}
fun main() {
println("level".isPalindrome) // true
println("kotlin".isPalindrome) // false
val list = listOf(10, 20, 30)
println("Last index: ${list.lastIndex}") // 2
val m = Matrix.identity(3)
println("${m.rows}x${m.cols} identity") // 3x3 identity
val html = buildHtml {
"Hello".tag("h1")
"World".tag("p")
}
println(html) // <h1>Hello</h1><p>World</p>
}