Representante estándar de Kotlin – Lazy, Observable and Vetoable | Por Durbanshu Datta | Backyard Programmer | Febrero de 2022
Delegate es un patrón de diseño orientado a objetos y Kotlin lo admite de forma nativa. Si no está familiarizado con el soporte nativo de Kotlin para delegados, lea este artículo.
La biblioteca estándar de Kotlin tiene algunos conjuntos predefinidos de delegados que se pueden usar.
representante perezoso
Supongamos que tiene una propiedad cuya creación de instancias es costosa desde el punto de vista computacional y es posible que nunca la necesite, o que solo necesite una instancia. En este caso, la delegación perezosa es beneficiosa. Esta perezoso Los delegados permiten que el valor de una propiedad se calcule solo en el primer acceso y luego se almacene en caché.
Por defecto, la evaluación de las propiedades perezosas es Sincrónico: El valor solo se calcula en un subproceso, pero todos los subprocesos verán el mismo valor.
representación observable
Suponga que desea observar cada cambio en el valor del parámetro, antiguo y nuevo. El controlador se llama cada vez que se asigna a la propiedad (espalda tarea terminada). Esta observable Los delegados permiten que se disparen lambdas cuando cambian los valores de propiedad.
representante con derecho a veto
Supongamos un escenario en el que desea interceptar la asignación de un valor variable. Al igual que tiene una condición, el valor del campo no cambia a menos que se cumpla.
otros representantes
A partir de Kotlin 1.4, también es posible delegar directamente a otra propiedad. Por ejemplo, si tuviéramos que cambiar el nombre de una propiedad en una clase de API, podríamos mantener la propiedad anterior y simplemente delegarla a la nueva propiedad.Para delegar una propiedad a otra propiedad, use ::
calificador en el nombre del delegado, por ejemplo, this::delegate
o MyClass::delegate
.
algunas referencias
Si tiene alguna pregunta y sugerencia, puede ponerse en contacto con mi Instagram, LinkedInSígueme para contenido de Kotlin y más. ¡Feliz codificación!
Agradecería uno de estos 👏