Propiedades En Kotlin

ANUNCIO
Loading...

En este tutorial te mostraremos la declaración de propiedades en Kotlin, el uso de métodos get-set y visibilidad.

Declaración De Propiedades En Kotlin

Una propiedad en Kotlin que pertenece a una clase, es la agrupación de las declaraciones de: un campo, su accesor get y su mutador set.

Al igual que las variables, si usas val, declaras una propiedad de solo lectura y si usas var será mutable.

Por ejemplo, en la siguiente clase para clientes verás cuatro propiedades: ID de cliente, nombre, teléfono y número de órdenes realizadas.

class Customer { val customerId: String = "C-100" val name: String = "Guillermo Fenix" val phone: String = "388-4881" var orders: Int = 15 }
Lenguaje del código: Kotlin (kotlin)

Para obtener el valor de una propiedad no llamas un método get(), si no que usas el nombre directamente con la notación de punto.

fun main() { // Acceder a una propiedad val customer = Customer() println(customer.name) }
Lenguaje del código: Kotlin (kotlin)

Modificar el valor de una propiedad mutable es igual que con una variable. Puedes usar el operador de asignación:

customer.orders = 20
Lenguaje del código: Kotlin (kotlin)

Hasta aquí viste la sintaxis simple de declaración de las propiedades en Kotlin. A continuación verás cómo expandirla para personalizar los getters y setters.

Getters Y Setters

Cuando declaras una propiedad con val, internamente solo se crea el accesor get. Para var se generan ambos:

val = campo + get
var = campo + get + set

Pero si quisieras cambiar el comportamiento por defecto de estos métodos puedes usar las llamadas a set() y get() junto a la propiedad.

Getter Personalizado

Si deseas tener una propiedad que no guarde un valor en un campo, si no que retorne de otro tipo de expresión personalizada, entonces define un getter personalizado con get().

Por ejemplo:

Crear una propiedad con un accesor personalizado para determinar si un animal tiene más de 1 año de vida.

class Animal( val name: String, var age: Int ) { val isOlderThanOne: Boolean get() { return this.age > 1 } }
Lenguaje del código: Kotlin (kotlin)

La solución consiste en agregar a la sintaxis el método get() y definir cuál será el retorno cada vez que accedamos a dicho campo. Es decir, el resultado booleano de la desigualdad entre la edad del animal y 1.

Con ello puedes crear una instancia de Animal y llamas a isOlderThanOne regularmente:

fun main() { // Getter personalizado val animal = Animal("Chimpi", 2) print(animal.isOlderThanOne) }
Lenguaje del código: Kotlin (kotlin)

En la salida se imprimirá el valor computado de true.

Ahora, como get() tiene una sola expresión de retorno, podemos escribirlo con la sintaxis de funciones con cuerpo de expresión.

val isOlderThanOne: Boolean get() = this.age > 1
Lenguaje del código: Kotlin (kotlin)

Otra mejora podría ser la omisión del tipo de isOlderThanOne, recuerda que el compilador de Kotlin es capaz de inferir tipos si el contexto lo deja claro:

val isOlderThanOne get() = this.age > 1
Lenguaje del código: Kotlin (kotlin)

Setter Personalizado

Personaliza el método mutador de una propiedad escribiendo el contenido de set().

Si lo requieres usa el identificador field para referirte al valor del campo de la propiedad.

Por ejemplo:

Añadir a la clase Animal le una propiedad para su peso (weight) y otra para determinar si está en sobrepeso (overWeight).

Personalizar el método set() del peso con el fin de evaluar si el valor está por encima de 100 y determinar que está en sobrepeso.

class Animal( val name: String, var age: Int ) { val isOlderThanOne get() = this.age > 1 var overWeight = false var weight = 0.0 set(value) { field = value overWeight = value > 100 } }
Lenguaje del código: Kotlin (kotlin)

La solución asigna a field el valor nuevo que viene del parámetro value (puedes usar otro nombre si deseas). Y en la segunda sentencia asigna a overWeight el resultado booleano de la expresión value > 100.

Prueba la evaluación de la expresión creando un nuevo animal llamado Simone con 12 años. Luego asigna su peso e imprime si está pasada de kilos o no.

fun main() { val simone = Animal("Simone", 12) // Pesando a Simone... simone.weight = 156.32 // ¿Simone está en sobrepeso? print("¿Sobrepeso?:${if (simone.overWeight) "SI" else "NO"}") }
Lenguaje del código: Kotlin (kotlin)

El resultado en consola será:

¿Sobrepeso?:SI
Lenguaje del código: CSS (css)

Accesores Por Defecto

En esencia, declarar una propiedad genera sus accesores con el identificador field internamente.

Es decir, tener la declaración:

class Animal{ var weight = 0 }
Lenguaje del código: Kotlin (kotlin)

Equivale a definir:

class Animal{ var weight = 0 get() = field set(value) { field = value } }
Lenguaje del código: Kotlin (kotlin)

El compilador nos ahorrará tiempo a la hora de la definición de propiedades en Kotlin.

Visibilidad De Propiedades

Puedes cambiar la visibilidad de los getter y setter, ubicando modificadores de visibilidad.

Por ejemplo.

Hacer privada la asignación de la propiedad overWeight en Animal.

var overWeight = false private set
Lenguaje del código: Kotlin (kotlin)

La solución consiste en usar el modificador private junto a set. Podemos evitar el cuerpo de set, ya que no deseamos cambiar la implementación por defecto.

¿Qué Sigue?

En este tutorial aprendiste sobre el uso de propiedades miembro en Kotlin. Viste como declararlas y personalizar tanto getters como setters. Ahora puedes avanzar hacia el estudio de los modificadores de visibilidad.

¿Ha sido útil esta publicación?

ANUNCIO
Loading...