¿Qué significa la palabra key 'by' en Kotlin?

¿Qué significa la palabra key 'by' en Kotlin? A veces me parece que algo se ve así mientras desarrollo para Android:

var someModel: someViewModel by notNullAndObservable { vm -> ... } 

No entiendo cuál es el significado de la palabra key 'by'.

En la reference de Kotlin encontrará dos usos by , el primero siendo Propiedades delegadas, que es el uso que tiene arriba:

Hay ciertos types comunes de properties, que, aunque podemos implementarlas manualmente cada vez que las necesitamos, sería muy bueno implementarlas de una vez por todas y ponerlas en una biblioteca. Los ejemplos incluyen properties diferidas: el valor se calcula solo en el primer acceso, properties observables: los oyentes reciben notifications sobre los cambios en esta propiedad, almacenando properties en un map, no en campos separados cada uno.

Aquí delega el getter / setter a otra class que hace el trabajo y puede contener código común. Como otro ejemplo, algunos de los inyectores de dependencia de Kotlin respaldan este model al delegar el getter en recibir un valor de un logging de instancias administradas por el motor de dependency injections.

Y la delegación de Interfaz / Clase es el otro uso:

El patrón de delegación ha demostrado ser una buena alternativa a la inheritance de implementación, y Kotlin lo admite de forma nativa, requiriendo cero código repetitivo. Una class Derived puede henetworkingar de una interfaz Base y delegar todos sus methods públicos a un object especificado

Aquí puede delegar una interfaz en otra implementación, por lo que la class implementadora solo necesita replace lo que quiere cambiar, mientras que el rest de los methods delegan en una implementación más completa.

Un ejemplo en vivo serían las collections Klutter Readonly / Immutable donde simplemente delegan la interfaz de colección específica a otra class y luego anulan cualquier cosa que necesita ser diferente en la implementación de solo lectura. Ahorrando mucho trabajo sin tener que delegar manualmente todos los otros methods.

Ambos están cubiertos por la reference de lenguaje de Kotlin , comienzan allí para los temas básicos del idioma.

  • Conversión de numbers grandes a Byte en Kotlin
  • ¿Cómo pasar un parámetro de tipo a una reference genérica de constructor de class?
  • Parámetro de la function Kotlin: Val no se puede reasignar
  • ¿Cómo puedo declarar una list con valores en una sola línea en kotlin?
  • Spring Boot no inicia el registrador automáticamente cuando usa @Cacheable
  • Creando file WAV con Okio
  • Ahora estoy desarrollando una aplicación para Android con Kotlin, pero ocurrió un error: ComstacktionException: no se pudo llamar al método en línea 'readText' en
  • ¿Podemos usar infix methods generics en Kotlin?
  • ¿Puede un parámetro de tipo covariante estar en una position de input en el constructor?
  • Cómo suprimir la corrección ortográfica en una constante de cadena en Android Kotlin?
  • getChildFragmentManager () no encontrado en kotlin