Cómo crear un delegado de propiedad personalizado en Kotlin
Antonio Leiva

En Kotlin, es posible crear un delegado de propiedad personalizado para reutilizar lógica y simplificar la sintaxis de nuestro código. Un delegado de propiedad es una clase que se encarga de almacenar y administrar el valor de una propiedad. Al utilizar un delegado, podemos definir el comportamiento de nuestras propiedades de forma más concreta y específica.

Para crear un delegado de propiedad personalizado en Kotlin, es necesario implementar la interfaz ReadWriteProperty. Esta interfaz cuenta con tres métodos que debemos implementar: getValue, setValue y getDelegate. A continuación, se muestra un ejemplo de un delegado de propiedad personalizado que permite establecer un límite máximo y mínimo a una propiedad numérica:

class LimitedIntDelegate(private val min: Int, private val max: Int) : ReadWriteProperty<Any, Int> {

    private var value: Int? = null

    override fun getValue(thisRef: Any, property: KProperty<*>): Int {
        return value ?: min
    }

    override fun setValue(thisRef: Any, property: KProperty<*>, value: Int) {
        this.value = if (value in min..max) value else if (value < min) min else max
    }

}

Luego, podemos utilizar nuestro delegado de propiedad personalizado en nuestra clase de la siguiente manera:

class MyClass {
    var limitedProperty: Int by LimitedIntDelegate(0, 100)
}

En este caso, la propiedad limitedProperty sólo podrá tener valores comprendidos entre 0 y 100. Si intentamos establecer un valor fuera de este rango, el delegado se encargará de ajustarlo al límite máximo o mínimo según corresponda.

Otra forma de crear un delegado de propiedad personalizado es mediante la sobrecarga de operadores.

En lugar de implementar la interfaz ReadWriteProperty, podemos definir dos funciones de sobrecarga de operadores: una para la lectura y otra para la escritura.

A continuación, se muestra un ejemplo de cómo podríamos crear nuestro delegado utilizando sobrecarga de operadores:

class LimitedIntDelegate(private val min: Int, private val max: Int) {

    private var value: Int? = null

    operator fun getValue(thisRef: Any, property: KProperty<*>): Int {
        return value ?: min
    }

    operator fun setValue(thisRef: Any, property: KProperty<*>, value: Int) {
        this.value = if (value in min..max) value else if (value < min) min else max

Con esto, nuestra propiedad limitedProperty se comportará de la misma forma que en el ejemplo anterior, permitiendo sólo valores comprendidos entre 0 y 100.

Es importante tener en cuenta que, al utilizar un delegado de propiedad personalizado, la propiedad en sí no almacena directamente el valor. En su lugar, el delegado se encarga de almacenar y administrar el valor de la propiedad. Esto nos permite tener un mayor control sobre el comportamiento de nuestras propiedades y reutilizar lógica en diferentes clases y propiedades.

En resumen, crear un delegado de propiedad personalizado en Kotlin nos permite definir de manera más específica el comportamiento de nuestras propiedades y reutilizar lógica de manera eficiente.

Podemos hacerlo implementando la interfaz ReadWriteProperty o utilizando sobrecarga de operadores.

Con un poco de práctica, podremos aprovechar al máximo los beneficios que nos ofrecen los delegados de propiedad en nuestro código en Kotlin.

Quizá también te interese…

¿Qué es Kotlin Multiplataforma?

¿Qué es Kotlin Multiplataforma?

En el mundo actual, donde los dispositivos móviles están presentes en nuestra vida diaria, es fundamental para los desarrolladores crear aplicaciones que se adapten a diferentes sistemas operativos. Kotlin Multiplataforma es una herramienta que facilita la creación de...

5 trucos de Kotlin para escribir código más eficiente en Android

5 trucos de Kotlin para escribir código más eficiente en Android

El lenguaje de programación Kotlin se ha convertido en el más popular para el desarrollo de aplicaciones de Android en los últimos años. Su sintaxis concisa y moderna, junto con su capacidad para mejorar la eficiencia de código, lo convierten en una opción atractiva...

Cómo crear un backend en Kotlin usando Ktor

Cómo crear un backend en Kotlin usando Ktor

Ktor es un framework de servidor web ligero y rápido para Kotlin, desarrollado por JetBrains. Es ideal para crear aplicaciones web y servicios RESTful, y es muy fácil de usar y configurar. En este artículo, vamos a ver cómo crear un backend para una aplicación de...

0 comentarios

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de DevExpert, S.L.U., con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Acepto la política de privacidad *