asignar variable solo si es nulo

en Ruby uno tiene algo como esto:

@var ||= 'value' 

básicamente, significa que a @var se le asignará 'value' solo si @var todavía no está asignado (por ejemplo, si @var es nil )

Estoy buscando lo mismo en Kotlin, pero hasta ahora, lo más parecido sería el operador elvis. ¿Hay algo así y me perdí la documentation?

La forma más corta en que puedo pensar es usar el operador elvis:

 value = value ?: newValue 

Si hace esto a menudo, una alternativa es usar una propiedad delegada , que solo almacena el valor si es null :

 class Once<T> { private var value: T? = null operator fun getValue(thisRef: Any?, property: KProperty<*>): T? { return value } operator fun setValue(thisRef: Any?, property: KProperty<*>, value: T?) { this.value = this.value ?: value } } 

Ahora puede crear una propiedad que lo use así:

 var value by Once<String>() fun main(args: Array<String>) { println(value) // 'null' value = "1" println(value) // '1' value = "2" println(value) // '1' } 

Tenga en count que esto no es seguro para subprocesss y no permite volver a establecer null . Además, esto sí evalúa la new expresión, mientras que la versión simple del operador de elvis podría no hacerlo.

  • ¿Es una buena práctica usar la function de ejecución en lugar de devolver en Kotlin?
  • Unidad de testing Room y LiveData
  • Nueva architecture con Dagger y Kotlin
  • Comportamiento con Kotlin Higher-Order Functions e interfaces de método único?
  • Regex no coincide en Kotlin
  • ¿Cómo manejar un param vacío en Kotlin?
  • Kotlin - Configuración del proyecto IntelliJ
  • Sintaxis de la function de Kotlin
  • La class de testing de Child Kotlin ejecuta todas las testings de los padres
  • ¿Cómo hacer multibinding usando el contenedor de recuperación de dependencia Kodein?
  • Cómo devolver una interfaz como javawith Kotlin