Menu
Coddy logo textTech

Construtores Primários

Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 3 de 57.

A maioria das classes Kotlin recebe seus valores iniciais em um construtor primário, escrito entre parênteses após o nome da classe. val ou var antes de um parâmetro faz com que ele seja uma propriedade ao mesmo tempo:

class Book(val title: String, var pages: Int)

Dentro de main:

val book = Book("Dune", 412)
println(book.title)
book.pages += 8
println(book.pages)

Saída:

Dune
420

Um parâmetro sem val ou var só fica disponível enquanto a instância está sendo criada, por exemplo, para calcular uma propriedade. Propriedades val não podem ser reatribuídas após a criação; propriedades var podem:

class Temperature(celsius: Double) {
    val fahrenheit = celsius * 9 / 5 + 32
}

Dentro de main:

val t = Temperature(100.0)
println(t.fahrenheit)

Saída:

212.0

Os parâmetros do construtor podem ter valores padrão e podem ser passados por nome, portanto um construtor abrange várias maneiras de criar uma instância:

class Timer(val seconds: Int, val label: String = "timer")

Dentro de main:

val egg = Timer(300, "egg")
val quick = Timer(30)
val named = Timer(label = "tea", seconds = 180)
println("${egg.label} ${egg.seconds}")
println("${quick.label} ${quick.seconds}")
println("${named.label} ${named.seconds}")

Saída:

egg 300
timer 30
tea 180

Dentro do corpo da classe, this refere-se à instância atual. Ele é necessário quando um parâmetro de método tem o mesmo nome que uma propriedade:

class Player(var name: String) {
    fun rename(name: String) {
        this.name = name
    }
}

Dentro de main:

val p = Player("anon")
p.rename("Ada")
println(p.name)

Saída:

Ada
challenge icon

Desafio

Fácil

Declare a classe Account com um construtor primário: um owner somente para leitura e um balance que pode ser alterado e cujo valor padrão é 0. Adicione summary(), que retorna Ada has 150.

O código fornecido lê um proprietário e, quando uma segunda linha está presente, um saldo inicial. Ele cria a conta com ou sem o saldo e imprime summary().

Seu código deve ser colocado em Account.kt. Main.kt contém o código fornecido de entrada/saída e não pode ser editado.

Experimente você mesmo

fun main() {
    // Código de entrada/saída fornecido: mantenha-o como está
    val input = generateSequence(::readLine).toList()
    val account = if (input.size > 1) Account(input[0], input[1].toInt()) else Account(input[0])
    println(account.summary())
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Programação Orientada a Objetos

Pratique por conta própria: Playground de Kotlin