¿Cuál es la diferencia entre var y val en Kotlin?

Resuelto Akshar Patel asked hace 7 años • 32 respuestas

¿ Cuál es la diferencia entre vary valen Kotlin?

He pasado por este enlace:

KotlinLang: propiedades y campos

Como se indica en este enlace:

La sintaxis completa de una declaración de propiedad de solo lectura difiere de una mutable en dos formas: comienza con val en lugar de var y no permite un definidor.

Pero justo antes hay un ejemplo que utiliza un definidor.

fun copyAddress(address: Address): Address {
    val result = Address() // there's no 'new' keyword in Kotlin
    result.name = address.name // accessors are called
    result.street = address.street
    // ...
    return result
}

¿ Cuál es la diferencia exacta entre vary val?

¿Por qué necesitamos ambos?

Esto no es un duplicado de Variables en Kotlin, diferencias con Java: ¿'var' vs. 'val'? ya que pregunto sobre la duda relacionada con el ejemplo particular en la documentación y no solo en general.

Akshar Patel avatar May 26 '17 18:05 Akshar Patel
Aceptado

En su código resultno cambia, sus varpropiedades cambian. Consulte los comentarios a continuación:

fun copyAddress(address: Address): Address {
    val result = Address() // result is read only
    result.name = address.name // but not their properties.
    result.street = address.street
    // ...
    return result
}

vales el mismo que el finalmodificador en java. Como probablemente debería saber, no podemos finalvolver a asignar una variable, pero podemos cambiar sus propiedades.

Sachin Chandil avatar May 26 '2017 11:05 Sachin Chandil

Ambos valy varse utilizan para declarar variables.

  • vares como una variable general y se conoce como variable mutable en Kotlin y se puede asignar varias veces.

  • vales como una variable final y se conoce como inmutable en Kotlin y solo se puede inicializar una vez.

Para obtener más información sobre qué es valy varconsulte el siguiente enlace:

http://blog.danlew.net/2017/05/30/mutable-vals-in-kotlin/

Patel Pinkal avatar Jun 05 '2017 04:06 Patel Pinkal