0Pricing
Kotlin Academy · Aula

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

As propriedades de extensão adicionam propriedades calculadas a tipos existentes sem criar subclasses. Elas não têm um campo de suporte.

Propriedade de extensão somente leitura

Defina um acessor de leitura para criar uma propriedade de extensão calculada.
val String.wordCount: Int
    get() = trim().split(Regex("\\s+")).size
println("hello world kotlin".wordCount)  // 3

Propriedade de extensão mutável

Defina um acessor de leitura e um de escrita para criar uma propriedade de extensão que possa ser lida e alterada.
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

As propriedades de extensão não podem ter campos de suporte. Elas são sempre calculadas a partir do estado existente.
// 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

Adicione propriedades convenientes aos tipos de coleção.
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)  // 2

Propriedades de extensão booleanas

Crie propriedades booleanas legíveis para verificações de tipo.
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)   // true

Propriedades de extensão versus funções de extensão

Use uma propriedade quando o cálculo for simples e representar uma característica do objeto. Use uma função quando houver parâmetros ou efeitos colaterais.
// 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

Adicione propriedades de extensão a objetos companheiros.
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

As propriedades de extensão definidas dentro de uma classe só se aplicam quando você está no escopo dessa classe.
class Formatter {
    val Int.formatted: String
        get() = "%,d".format(this)
    fun format(n: Int) = n.formatted
}
println(Formatter().format(1000000))  // 1,000,000

Uso de extensões para DSLs

As propriedades de extensão são fundamentais para o design de DSLs em Kotlin.
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

As propriedades de extensão podem ter parâmetros de tipo.
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

As propriedades de extensão podem ter campos de suporte em Kotlin?

Recapitulação

As propriedades de extensão adicionam características calculadas aos tipos sem campos de suporte. Use-as para cálculos simples e sem estado. Propriedades de extensão mutáveis podem ter acessores de escrita. Elas são excelentes para DSLs e interfaces de programação fluentes. Próximo: extensões com escopo e de objetos companheiros!

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

  1. Funções de extensão: sintaxe e regras de despacho
  2. Propriedades de extensão e extensões calculadas
  3. Extensões com escopo e extensões de companion
  4. Extensões práticas: auxiliares de Context, View e String
← Voltar para Kotlin Academy