Variables en Kotlin, diferencias con Java. var vs val (KDA 02)
Antonio Leiva

En este segundo capítulo vamos a ver cómo funcionan las variables en Kotlin, qué es eso de val y de var, y cuál es más recomendable utilizar.

He querido empezar por aquí, porque te va a ser útil para entender después cómo crear «campos» en nuestras clases (ya veremos que no se llaman así).

Si quieres aprender todo sobre Kotlin y su situación actual en el sector del desarrollo Android, te animo a que te apuntes a mi masterclass gratuita donde te daré la hoja de ruta para aprender el lenguaje y sacarle el máximo partido.

Variables en Kotlin

Las variables en Kotlin nos permiten, al igual que en Java, asignar valores que luego pueden ser modificados y utilizados en distintos puntos de nuestro programa, siempre y cuando estén dentro del ámbito en el que se ejecuta dicho código.

Pero me voy a centrar en las diferencias que encontramos con Java.

1. Las variables pueden ser mutables e inmutables

Esto también se puede hacer en Java (marcándola como final si queremos que no se pueda modificar), pero en Kotlin es mucho menos verboso y cobran una nueva importancia: en Kotlin se prefieren los valores inmutables siempre que sea posible.

El que la mayor parte de nuestro programa sea inmutable genera muchos benificios, algunos de los cuales puedes ver en este artículo que escribí en GenbetaDev al respecto.

2. Se declaran indicando valvar según sean inmutables o mutables

Algo muy interesante de Kotlin es que en muchos puntos no hay que especificar el tipo de datos con el que estamos trabajando, siempre que el compilador lo pueda inferir.

Así que sólo tenemos que indicarle varval en función del tipo de variable que queramos generar, y el tipo podrá normalmente inferirse del lado derecho. Aún así, podemos especificarle un tipo de forma explícita.

Algunos ejemplos:

var x = 7
var y: String = "my String"
var z = View(this)

Spoiler: como ves, no hace falta utilizar new para crear una nueva instancia de un objeto.

3. Se hace casting automático de tipos

Siempre que el compilador sea capaz de de detectar que no hay otra opción posible, el casting se hará automáticamente. ¡Una maravilla!

val z: View = findViewById(R.id.my_view)

if (z is TextView) {
    z.text = "I've been casted!"
}

Curiosidad: ¿has visto que no he llamado a setText() ? ¡La resolveré en los próximos artículos!

4. En Kotlin todo es un objeto

No existen los tipos básicos, y no existe void. Si algo no devuelve nada, en realidad devuelve el objeto Unit. La mayoría de las veces se puede omitir, pero está ahí, acechando.

Por tanto, todo esto son objetos:

val x: Int = 20
val y: Double = 21.5
val z: Unit = Unit

5. Los tipos numéricos más simples no se pueden asignar a otros más complejos

Por ejemplo, un entero no puede ser asignado a una variable de un long. Esto no compila:

val x: Int = 20
val y: Long = x

Necesita hacerse un casting explícito:

val x: Int = 20
val y: Long = x.toLong()

Conclusión

Estas son algunas de las diferencias más destacadas que puedes encontrar entre las variables en Java y en Kotlin. En general, las variables en Kotlin aportan mucha más flexibilidad, seguridad (debido a la convención de usar val siempre que se pueda) y un código más limpio y conciso.

Si todo esto te apasiona tanto como a mí, te animo a que te apuntes a mi training gratuito donde te contaré todo lo que necesitas para aprender a crear tus Apps Android en Kotlin desde cero.

 Training Revienta tu productividad en Android con Kotlin

Quizá también te interese…

Contracts en Kotlin: Haz más listo al compilador

Contracts en Kotlin: Haz más listo al compilador

El compilador de Kotlin es muy potente, y nos puede ayudar en muchos aspectos en los que otros compiladores como Java pasan de largo. Temas como los nulos, inferencia de tipos, genéricos, smart casting, y un largo etcétera, hacen del compilador de Kotlin una...

Kotlin 1.5.0 : Las 5 novedades que puedes empezar a usar hoy

Kotlin 1.5.0 : Las 5 novedades que puedes empezar a usar hoy

Kotlin 1.5.0 ya está aquí, y como siempre trae una serie de novedades que te van a interesar muchísimo. Cabe destacar que a partir de ahora, de acuerdo las nuevas versiones de Kotlin se lanzarán cada 6 meses, independientemente de las nuevas funcionalidades que...

¿Qué es Kotlin y para qué sirve?

¿Qué es Kotlin y para qué sirve?

Kotlin es un lenguaje de programación de código abierto creado por JetBrains que se ha popularizado gracias a que se puede utilizar para programar aplicaciones Android. Pero si has llegado hasta aquí pensando que Kotlin solo se puede usar en Android, lo que te voy a...

13 Comentarios

  1. Aldair

    Muy buena explicación, sobre las variables y la inmutabilidad.

    Responder
  2. Pablo Reinoso

    Genial, muy buena explicación Kotlin esta super interesante ademas de las ventajas que tiene

    Responder
    • Antonio Leiva

      Muchas gracias! Me alegro de que te haya resultado interesante.

      Responder
  3. Ana

    Muy buen articulo. Tengo muchos deseos de comenzar ya con Kotlin.
    Me gustaria saber otras ventajas de Kotlin, digase por ejemplo la parte visual, si es que Kotlin puede influir? ya que cuando programo en java(Android) me resulta muy tedioso esta parte, ademas que a veces hasta es mas lento de lo normal.
    Muchas gracias de antemanos.

    Responder
  4. Raul Villares

    Hola Antonio,

    que Kotlin use el concepto “inmutable” en las variables locales me chirría un poco. Me explico con un ejemplo:

    class Cosa(var valor : Int)

    fun main(args: Array) {
    val cosa = Cosa(1)
    cosa.valor = 2
    }

    Estamos modificando los valores de un objeto supuestamente inmutable. Lo que no podemos hacer es reasignar el valor de “cosa”. Creo que es un poco confuso.

    Me parece mucho más preciso, por ejemplo, el uso que se le da al término en listOf y mutableListOf.

    ¿qué opinas?

    Responder
    • Antonio Leiva

      Bueno, hablar de inmutabilidad en un lenguaje que acepta mutabilidad siempre es complejo, porque hay excepciones raras. Una variable puede ser inmutable pero almacenar un objeto mutable como en el caso que indicas. Por ejemplo las properties que usan val no siempre son inmutables, puedes sobrescribir el getter y que devuelva un random, o el valor de una property mutable… Pero bueno, en un código donde nos ajustamos a ciertos reglas de inmutabilidad todo cobra más sentido.

      Responder
  5. Andrés

    Buen articulo para comenzar, ya quiero saber mas! de la guía de 15 min me pareció genial, lo fácil de acceder a los componentes del activity sin tener que declarar y castearlos , promete mucho Kotlin, seguiré adelante!!! Gracias.

    Responder
  6. Jorge Landazábal

    Buenas Antonio, hasta ahora estoy empezando a ver este lenguaje, por favor me puedes explicar la diferencia entre var y val.

    En los ejemplos usas estos dos tipos de valores pero no sé la razón.

    var x = 7
    var y: String = «my String»

    ————–
    val x: Int = 20
    val y: Double = 21.5

    Gracias

    Responder
    • Antonio Leiva

      Hola Jorge! Cuando usas Val el valor de esa variable no se puede modificar una vez asignado. Sin embargo, con var sí que se puede modificar.

      Si vienes de Java, es el equivalente a usar final o no en una variable.

      Responder
  7. Luis Angel

    Hola, me gustaría contestar a mis siguientes dudas:

    ¿Cómo le haces para evitar variables no finales? Porque Google pone los POJOS con tipo val, pero probablemente vamos a querer cambiarlas.

    ¿Cómo saber cuándo no se podrá inferir el tipo para hacerlo explícito?

    ¿Qué pasa si más de una clase tiene el mismo campo? Cómo sabe el compilador que casteo debe hacer?

    Responder
    • Antonio Leiva

      – En el mundo inmutable, para modificar algo lo que necesitas es crear una copia y cambiar el valor correspondiente
      – Si el IDE no lo puede inferir, te mostrará un error
      – La última no la entiendo muy bien. El casting lo hace al objeto, no al campo en sí. Aunque dos clases tengan el mismo campo, el casting del objeto ya estará hecho en ese punto.

      Responder

Enviar un comentario

Los datos personales que proporciones a través de este formulario quedarán registrados en un fichero de Antonio Leiva Gordillo, con el fin de gestionar los comentarios que realizas en este blog. La legitimación se realiza a través del consentimiento de la parte interesada. Si no se acepta, no podrás comentar en este blog. Los datos que proporciona solo se utilizan para evitar el correo no deseado y no se usarán para nada más. Puede ejercer los derechos de acceso, rectificación, cancelación y oposición en contacto@devexperto.com.

Tu dirección de correo electrónico no será publicada.

Acepto la política de privacidad *