Variables en Kotlin



Una variable es una ubicación en la memoria (área de almacenamiento) para almacenar datos. Para indicar el área de almacenamiento cada variable debe recibir un nombre único (identificador). Y al igual que en otros lenguajes, las variables en Kotlin nos permiten asignar valores que luego pueden ser modificados, o no. Y esto es así porque las variables pueden ser mutables e inmutables.

En Kotlin la sintaxis para la declaración de variables y asignación de valores puede ser:
val variable1: Datatype = valor
var variable2: Datatype = valor
var variable2 = valor
Como vemos, no siempre es necesario especificar el tipo de dato de la variable, bien porque ya se especificó previamente o por la inferencia de tipo (ver Tipos básicos de datos).

Por tanto, las palabras reservadas val y var sirven para la asignación de valores a las variables, pero hay una importante diferencia entre ambas que hace referencia a que sus valores son inmutables o mutables respectivamente:
  1. val: una vez declarado no puede ser cambiado. Se utiliza para definir variables de solo lectura, a las que se les puede asignar un valor una sola vez.
  2. var: una vez declarado se puede cambiar su valor.

De manera muy básica la decisión de usar val o var depende del uso que queramos darle: si es para almacenar una constante debemos usar val y lo mismo si es un dato que queramos garantizar que no se modifique, y para el resto nos quedamos con var. Pero ten en cuenta que en Kotlin se prefieren los valores inmutables siempre que sea posible.

Algunos ejemplos:
val a: Int = 1  // asignación inmediata de valor
val b = 2       // inferencia de tipo Int
val c: Int      // aquí el tipo de dato es requerido porque la variable no está inicializada
c = 3           // asignación diferida
c = 4           // error: c no puede ser reasignada

var x = 5       // tipo de dato Int inferido
x += 1          // valor modificado
Por otra parte, también tenemos la palabra reservada const para definir variables inmutables, pero a diferencia de val, const se utiliza para las variables que se conocen en tiempo de compilación.
const val WEBSITE_NAME = "Kotlin Doc"
Las propiedades const val garantizan "mejor" la inmutabilidad del valor, pero tienen menos flexibilidad y obligan a usar solo tipos de datos primitivos, lo que no siempre sirve a nuestros propósitos.

Y es que aunque parece clara la distinción entre mutable e inmutable, otras veces no lo es tanto. Por ejemplo, si una variable val hace referencia a un objeto mutable, su contenido aún puede modificarse. Entonces, más que de variables inmutables, sería más correcto hablar de variables de sólo lectura como se comenta en Kotlin: val does not mean immutable, it just means readonly, yeah. Un ejemplo donde se llama en tres ocasiones a una variable val de un objeto y cada vez devuelve distintos valores:
object MutableVal {
    var count = 0
    val palabra: String = "Mutable"
        get() {            
            return "$field ${++count}"
        }
}

fun main(args: Array<String>) {
    println("${MutableVal.palabra}")  // Mutable 1
    println("${MutableVal.palabra}")  // Mutable 2
    println("${MutableVal.palabra}")  // Mutable 3
}

Comentarios

Entradas populares

Recursos gratis para aprender Kotlin

I/O: entrada y salida de datos en consola

Lectura y escritura de archivos