Getters e setters personalizados com field
Escreva propriedades calculadas e setters personalizados usando a palavra-chave do campo de apoio.
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.
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
- Construtor primário e parâmetros de propriedades
- Blocos init e ordem de inicialização
- Getters e setters personalizados com field
- lateinit e inicialização tardia