Propriedades de extensão e extensões calculadas
Adicione propriedades calculadas a classes existentes sem criar subclasses.
Propriedades de extensão e extensões calculadas é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 2 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Kotlin Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Kotlin Academy inclui 4 aulas no total.
Propriedades de extensão
Propriedade de extensão somente leitura
val String.wordCount: Int
get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount) // 3Propriedade de extensão mutável
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]Sem campo de suporte
// ERROR: extension property cannot have backing field
// var String.cache: String = "" // NOT allowed!
// OK: computed only:
val String.isPalindrome: Boolean
get() = this == this.reversed()Propriedades de extensão em coleções
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) // 2Propriedades de extensão booleanas
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) // truePropriedades de extensão versus funções de extensão
// Property: stateless, simple characteristic
val String.isEmail: Boolean get() = '@' in this
// Function: has parameters
fun String.padCenter(width: Int) = padStart((length + width) / 2)Extensão de um objeto companheiro
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)Propriedades de extensão contextuais
class Formatter {
val Int.formatted: String
get() = "%,d".format(this)
fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000)) // 1,000,000Uso de extensões para 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())Propriedades de extensão genéricas
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]Verificação rápida
Recapitulação
Perguntas Frequentes
A aula “Propriedades de extensão e extensões calculadas” é grátis?
Sim — o texto completo de “Propriedades de extensão e extensões calculadas” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Kotlin Academy, atualize para CoddyKit PRO. O curso de Kotlin Academy inclui 4 aulas no total.
O que vou aprender em “Propriedades de extensão e extensões calculadas”?
Adicione propriedades calculadas a classes existentes sem criar subclasses. Você pratica Kotlin Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar Kotlin Academy?
Nenhuma experiência prévia é necessária. Kotlin Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 2 de 4.
Quanto tempo leva a aula “Propriedades de extensão e extensões calculadas”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de Kotlin Academy?
Sim. Cada aula de Kotlin Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Funções de extensão: sintaxe e regras de despacho
- Propriedades de extensão e extensões calculadas
- Extensões com escopo e extensões de companion
- Extensões práticas: auxiliares de Context, View e String