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
420Um 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.0Os 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 180Dentro 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:
AdaDesafio
FácilDeclare 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())
}
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
1Classes e Objetos
Trabalhando com ArquivosDefinindo ClassesConstrutores PrimáriosBlocos init e ValidaçãoConstrutores SecundáriosRecapitulação - Cartão da Biblioteca4Herança
Classes Abertas e SubclassesSobrescrevendo Membrossuper e ConstrutoresClasses AbstratasRevisão - Diretório de Funcionários2Propriedades e Encapsulamento
Acessores PersonalizadosModificadores de VisibilidadeSetters Privadoslazy e lateinitRevisão - Conta Bancária5Interfaces
Declarando InterfacesMétodos PadrãoMúltiplas InterfacesInterfaces como TiposRecapitulação - Métodos de Pagamento8Genéricos
Funções genéricasClasses genéricasRestrições de tipoVariância com in e outRecapitulação - Fila de prioridade11Projeto: Gerenciamento de Biblioteca
Livros e MembrosEmpréstimo de LivrosPratique por conta própria: Playground de Kotlin