Extension Properties and Computed Extensions
Add computed properties to existing classes without subclassing.
Extension Properties and Computed Extensions is a free Kotlin Academy lesson on CoddyKit — lesson 2 of 4. You can read the complete lesson below for free — then practise it hands-on in the browser with a built-in code editor and a 24/7 AI tutor. It is part of the Kotlin Academy learning path, one of 4 lessons in the course, and your progress syncs across the web and the CoddyKit app.
Extension Properties
Read-Only Extension Property
val String.wordCount: Int
get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount) // 3Mutable Extension Property
var MutableList<Int>.first: Int
get() = this[0]
set(value) { this[0] = value }
val list = mutableListOf(1, 2, 3)
list.first = 10
println(list) // [10, 2, 3]No Backing Field
// ERROR: extension property cannot have backing field
// var String.cache: String = "" // NOT allowed!
// OK: computed only:
val String.isPalindrome: Boolean
get() = this == this.reversed()Extension Properties on Collections
val <T> List<T>.secondOrNull: T?
get() = if (size >= 2) this[1] else null
val <T> List<T>.isNotNullOrEmpty: Boolean
get() = isNotEmpty()
println(listOf(1, 2, 3).secondOrNull) // 2Boolean Extension Properties
val Any.isString: Boolean get() = this is String
val String.hasDigits: Boolean get() = any { it.isDigit() }
val Int.isPositive: Boolean get() = this > 0
println(42.isPositive) // true
println("abc123".hasDigits) // trueExtension Properties vs Extension Functions
// Property: stateless, simple characteristic
val String.isEmail: Boolean get() = '@' in this
// Function: has parameters
fun String.padCenter(width: Int) = padStart((length + width) / 2)Extending a Companion Object
data class Color(val r: Int, val g: Int, val b: Int) {
companion object
}
val Color.Companion.RED get() = Color(255, 0, 0)
val Color.Companion.WHITE get() = Color(255, 255, 255)
println(Color.RED) // Color(r=255, g=0, b=0)Contextual Extension Properties
class Formatter {
val Int.formatted: String
get() = "%,d".format(this)
fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000)) // 1,000,000Using Extensions for DSLs
val Int.dp: Float get() = this * 2.5f
val Float.sp: Float get() = this * 1.0f
// In DSL context:
view.setPadding(16.dp.toInt())Generic Extension Properties
val <T> List<T>.head: T?
get() = firstOrNull()
val <T> List<T>.tail: List<T>
get() = drop(1)
println(listOf(1,2,3).head) // 1
println(listOf(1,2,3).tail) // [2, 3]Quick Check
Recap
Frequently asked questions
Is the “Extension Properties and Computed Extensions” lesson free?
Yes — the full text of “Extension Properties and Computed Extensions” is free to read here on the web, and the Kotlin Academy course includes 4 lessons in total. To practise it interactively (a built-in code editor and a 24/7 AI tutor) and unlock the rest of the Kotlin Academy course, upgrade to CoddyKit PRO.
What will I learn in “Extension Properties and Computed Extensions”?
Add computed properties to existing classes without subclassing. You practise Kotlin Academy with hands-on code you run directly in the browser, and a 24/7 AI tutor answers your questions as you work through the lesson.
Do I need any experience to start Kotlin Academy?
No prior experience is required. Kotlin Academy on CoddyKit is structured for beginners through advanced learners; this is — lesson 2 of 4, so you can start here or from the beginning and move at your own pace.
How long does the “Extension Properties and Computed Extensions” lesson take?
Most CoddyKit lessons take about 5–10 minutes. Each one is bite-sized and interactive, so you make steady progress and pick up exactly where you left off across the web and the app.
Can I write and run code in this Kotlin Academy lesson?
Yes. Every Kotlin Academy lesson includes a built-in code editor, so you write and run real code right in your browser and get instant AI feedback — no local setup required.
All lessons in this course
- Extension Functions: Syntax and Dispatch Rules
- Extension Properties and Computed Extensions
- Scoped Extensions and Companion Extensions
- Practical Extensions: Context, View & String Helpers