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.

  • El receptor de difusión onReceive () no se llama
  • Kotlin con Android DataBinding en Android Studio 3.0 canary 2
  • Más diversión con los delegates de Kotlin
  • Genéricos de Kotlin e inferencias de types incorrectos
  • Kotlin: Obligatorio: kotlin.Boolean. Encontrado: kotlin.Boolean?
  • Rect-Kotlin wrapper setState método
  • ¿Cuándo se instancian los singleton de Kotlin (declarados con el modificador de object)?
  • kotlin, ¿Cómo se puede cambiar el valor de la variable real en otra class a la que pasó mediante el parámetro?
  • Kotlin: ¿Cómo se accede a los methods get y setValue de un delegado?
  • Cómo pasar los arguments del comstackdor a Kotlin Compiler con Gradle
  • Vista de actualización de Android después del éxito de JSONRequest