Kotlin Academy · Aula

Getters e setters personalizados com field

Escreva propriedades calculadas e setters personalizados usando a palavra-chave do campo de apoio.

Aula 3 de 413 etapas

Getters e setters personalizados com field é uma aula grátis de Kotlin Academy no CoddyKit. Esta é a aula 3 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 não são apenas campos

Cada propriedade Kotlin tem um acessor de leitura gerado automaticamente (e, para var, um acessor de escrita). Você pode substituí-los para adicionar lógica — validação, registro de eventos ou cálculos.

Acessor de leitura personalizado

Substitua get() para calcular o valor sempre que ele for lido.

class Circle(val radius: Double) {
    val area: Double
        get() = Math.PI * radius * radius
}
fun main() {
    val c = Circle(3.0)
    println(c.area) // ~28.27
}

Propriedades calculadas

Propriedades calculadas não têm um campo de suporte — seu valor é calculado a cada acesso.

class Rectangle(val w: Int, val h: Int) {
    val area get() = w * h
    val perimeter get() = 2 * (w + h)
}
fun main() {
    val r = Rectangle(3, 4)
    println("${r.area}, ${r.perimeter}") // 12, 14
}

Acessor de escrita personalizado com field

Dentro de um acessor de escrita personalizado, field se refere ao campo de suporte — o armazenamento efetivo.

class Temperature {
    var celsius: Double = 0.0
        set(value) {
            require(value >= -273.15) { "below absolute zero" }
            field = value
        }
}
fun main() {
    val t = Temperature()
    t.celsius = 25.0
    println(t.celsius)
    // t.celsius = -300.0 // throws
}

Campo de suporte gerado automaticamente

Se o acessor de leitura ou de escrita usar field, Kotlin gerará um campo de suporte. Se nenhum dos dois usar esse recurso, nenhum campo será criado — a propriedade será puramente calculada.

class Counter {
    var count: Int = 0
        set(value) {
            println("Setting count from $field to $value")
            field = value
        }
}
fun main() {
    val c = Counter()
    c.count = 5
    c.count = 10
}

Acessor de escrita com efeitos colaterais

Use acessores de escrita personalizados para registrar eventos, notificar alterações ou sincronizar estados relacionados.

class Brightness {
    var level: Int = 50
        set(value) {
            val clamped = value.coerceIn(0, 100)
            println("Brightness -> $clamped")
            field = clamped
        }
}
fun main() {
    val b = Brightness()
    b.level = 75
    b.level = 150 // clamps to 100
    println(b.level)
}

Acessor de escrita privado

Marque o acessor de escrita como private para expor uma API somente para leitura e ainda permitir mutações internas.

class Score {
    var value: Int = 0
        private set
    fun increment() { value++ }
    fun reset() { value = 0 }
}
fun main() {
    val s = Score()
    s.increment(); s.increment()
    println(s.value) // 2
    // s.value = 100 // ERROR: setter is private
}

Validação no acessor de escrita

Acessores de escrita personalizados são o local natural para validar entradas.

class Email {
    var address: String = ""
        set(value) {
            require(value.contains("@")) { "invalid email" }
            field = value
        }
}
fun main() {
    val e = Email()
    e.address = "ada@example.com"
    println(e.address)
}

Acessor de leitura com lógica

Acessores de leitura podem transformar o estado armazenado — por exemplo, formatar um valor armazenado ou aplicar um valor alternativo padrão.

class Profile(_name: String?) {
    var rawName: String? = _name
    val displayName: String
        get() = rawName ?: "(unset)"
}
fun main() {
    val p = Profile(null)
    println(p.displayName) // (unset)
}

Comparando propriedades somente leitura e mutáveis

Propriedades val têm apenas um acessor de leitura (sem acessor de escrita); propriedades var têm ambos.

class Box {
    val readOnly: Int get() = 42
    var readWrite: Int = 0
}
fun main() {
    println(Box().readOnly)
    val b = Box(); b.readWrite = 5; println(b.readWrite)
}

Erro comum: recursão

Não use o nome da propriedade dentro do próprio acessor — isso causa recursão infinita. Use field em vez disso.

class Wrong {
    var x: Int = 0
        set(value) {
            // x = value // INFINITE RECURSION — calls setter again
            field = value // CORRECT
        }
}
fun main() {
    val w = Wrong(); w.x = 42; println(w.x)
}

Verificação rápida

Dentro de um setter personalizado, a que o identificador field se refere?

Recapitulação

Substitua get() e set() para adicionar lógica ao acesso à propriedade. Use field dentro dos acessores para ler ou gravar o campo de suporte. Marque os setters como private para criar APIs públicas somente para leitura; use propriedades calculadas (sem campo de suporte) quando o valor for sempre derivado.

Grátis para começar

Aprenda Kotlin com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
51
Aulas
203

Perguntas Frequentes

A aula “Getters e setters personalizados com field” é grátis?

Sim — o texto completo de “Getters e setters personalizados com field” é 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 “Getters e setters personalizados com field”?

Escreva propriedades calculadas e setters personalizados usando a palavra-chave do campo de apoio. 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 3 de 4.

Quanto tempo leva a aula “Getters e setters personalizados com field”?

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. Construtor primário e parâmetros de propriedades
  2. Blocos init e ordem de inicialização
  3. Getters e setters personalizados com field
  4. lateinit e inicialização tardia
← Voltar para Kotlin Academy