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…

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...

2 formas de recolectar Flows en la UI que S√ć funcionan

2 formas de recolectar Flows en la UI que S√ć funcionan

En la serie de artículos sobre Programación Reactiva con Flow hemos visto muchos conceptos, y hemos aprendido cómo aplicarlos al desarrollo Android. Pero hay algo que no hemos hecho del todo bien. Esto es la recolección de Flows desde la Activity (o el Fragment, en...

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. Los campos obligatorios están marcados con *

Acepto la política de privacidad *