Menu
Coddy logo textTech

Constructores primarios

Parte de la sección Programación orientada a objetos del Journey de Kotlin de Coddy. Lección 3 de 57.

La mayoría de las clases de Kotlin reciben sus valores iniciales en un constructor primario, escrito entre paréntesis después del nombre de la clase. val o var delante de un parámetro lo convierte también en una propiedad:

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)

Salida:

Dune
420

Un parámetro sin val ni var solo está disponible mientras se crea la instancia, por ejemplo, para calcular una propiedad. Las propiedades val no se pueden reasignar después de la creación; las propiedades var sí:

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

Dentro de main:

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

Salida:

212.0

Los parámetros del constructor pueden tener valores predeterminados y se pueden pasar por nombre, por lo que un constructor abarca muchas formas de crear una instancia:

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}")

Salida:

egg 300
timer 30
tea 180

Dentro del cuerpo de la clase, this se refiere a la instancia actual. Se necesita cuando un parámetro de método tiene el mismo nombre que una propiedad:

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)

Salida:

Ada
challenge icon

Desafío

Fácil

Declara la clase Account con un constructor principal: un owner de solo lectura y un balance modificable cuyo valor predeterminado es 0. Añade summary(), que devuelve Ada has 150.

El código proporcionado lee un propietario y, cuando hay una segunda línea, un saldo inicial. Crea la cuenta con o sin el saldo y muestra summary().

Tu código va en Account.kt. Main.kt contiene el código proporcionado de entrada y salida y no se puede editar.

Pruébalo tú mismo

fun main() {
    // Código de entrada/salida suministrado: mantenlo tal 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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Programación orientada a objetos

Practica por tu cuenta: Playground de Kotlin