Declarações de Objetos
Parte da seção Programação Orientada a Objetos do Journey de Kotlin da Coddy. Lição 12 de 57.
object Name { ... } declara uma classe e sua única instância em uma única etapa. Você usa o objeto pelo nome; não há construtor a ser chamado:
object AppConfig {
var theme = "light"
val version = "1.4"
fun describe() = "v$version, $theme theme"
}Dentro de main:
println(AppConfig.describe())
AppConfig.theme = "dark"
println(AppConfig.describe())Saída:
v1.4, light theme
v1.4, dark themeHá exatamente uma instância, portanto cada parte do programa que usa o objeto lê e altera o mesmo estado. O objeto é criado na primeira vez que é usado, como mostra o bloco init abaixo:
object Visits {
var count = 0
private set
init { println("Visits created") }
fun record() { count++ }
}
fun home() = Visits.record()
fun about() { Visits.record(); Visits.record() }Dentro de main:
println("start")
home()
about()
println(Visits.count)Saída:
start
Visits created
3Um objeto não tem construtor, porque ninguém o cria. Suas propriedades obtêm seus valores em suas declarações ou em init. Fora isso, ele é um corpo de classe normal: estado privado, auxiliares privados e métodos públicos:
object IdGenerator {
private var next = 1
fun newId(prefix: String) = "$prefix-${pad(next++)}"
private fun pad(n: Int) = n.toString().padStart(3, '0')
}Dentro de main:
println(IdGenerator.newId("user"))
println(IdGenerator.newId("order"))Saída:
user-001
order-002Use um objeto para algo do qual há exatamente uma única instância em um programa: um registro, a configuração ou um grupo de funções auxiliares. Um objeto é um estado global que qualquer arquivo pode alterar; portanto, mantenha seus setters privados e deixe que seus métodos verifiquem cada alteração.
object Units {
fun kmToMiles(km: Double) = km * 0.621371
}
Units.kmToMiles(10.0) // chamado através do nome
// val u = Units() // erro: um objeto não tem construtorDesafio
FácilComplete o objeto Leaderboard. Ele mantém os pontos de cada jogador em um mapa privado. add(player, points) adiciona pontos, top() retorna o líder como ada 6 (em caso de empate nos pontos, o nome que vem primeiro em ordem alfabética) ou empty quando ninguém tem pontos, reset() remove todos, e a propriedade players é o número de jogadores.
As funções auxiliares recordWin e recordDraw em Functions.kt são fornecidas: elas usam Leaderboard de outro arquivo. O código fornecido lê os comandos win ada, draw ada bo, top ou reset, imprime top() para cada top e, por fim, players: com a contagem.
Seu código deve ficar em Leaderboard.kt e Functions.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()
for (cmd in input) {
val p = cmd.split(" ")
when (p[0]) {
"win" -> recordWin(p[1])
"draw" -> recordDraw(p[1], p[2])
"reset" -> Leaderboard.reset()
else -> println(Leaderboard.top())
}
}
println("players: ${Leaderboard.players}")
}
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 Livros3Objetos e Companheiros
Declarações de ObjetosObjetos CompanionConstantes com constExpressões de ObjetosRevisão - BilheteriaPratique por conta própria: Playground de Kotlin