1. Antes de comenzar
En las apps que usas en tu teléfono, podrás observar que algunas partes de la app permanecen iguales, mientras que otras cambian (o son variables).
Por ejemplo, los nombres de las categorías de la app de Configuración no cambian: Internet y redes, Dispositivos conectados, Apps y mucho más.
Por otro lado, si miras una app de noticias, los artículos cambiarán con frecuencia. Cambian el nombre, la fuente, la hora de publicación y las imágenes del artículo.
¿Cómo debes escribir tu código para que el contenido cambie con el tiempo? No puedes volver a escribir el código en tu app cada vez que quieras publicar artículos nuevos, lo que sucede todos los días, cada una hora y cada minuto.
En este codelab, aprenderás a escribir código que usa variables para que ciertas partes del programa puedan cambiar sin tener que escribir un conjunto de instrucciones nuevo. Usarás Playground de Kotlin, como lo hiciste en el codelab anterior.
Qué compilarás
- Programas cortos en Kotlin que usan variables
Qué aprenderás
- Cómo definir una variable y actualizar su valor
- Cómo seleccionar un tipo de datos apropiado para una variable entre los tipos de datos básicos en Kotlin
- Cómo agregar comentarios al código
Requisitos
- Una computadora con acceso a Internet y un navegador web
2. Tipos de datos y variables
En la programación informática, existe el concepto de variable, que es un contenedor para un único dato. Puedes visualizarla como una caja que contiene un valor. Esa caja tiene una etiqueta, que es el nombre de la variable. Si te refieres a la caja por su nombre, tendrás acceso al valor que contiene.
¿Por qué almacenar el valor en una caja y hacer referencia a ella por su nombre cuando puedes usarlo directamente? El problema es que cuando tu código usa valores directamente en todas las instrucciones, el programa solo funcionará para ese caso específico.
Es una analogía que puede facilitar la comprensión de por qué son útiles las variables. A continuación, se incluye una carta para alguien que conociste recientemente.
Hola, Lauren:
Fue muy bueno verte hoy en la oficina. Espero verte el viernes.
¡Que tengas un lindo día!
Esta carta es genial, pero solo funciona para esa situación específica con Lauren. ¿Qué pasaría si tuvieras que escribir la misma carta muchas veces, pero con pequeñas variaciones para distintas personas? Sería más eficiente crear una sola plantilla de carta y dejar los espacios en blanco para las partes que pueden cambiar.
Hola, ____ :
Fue muy bueno verte hoy en _____. Espero verte el ____ .
¡Que tengas un lindo día!
También puedes especificar el tipo de información que aparece en cada espacio en blanco. De esta manera, te aseguras de que la plantilla de la carta se usará como esperabas.
Hola, { nombre } :
Fue muy bueno verte hoy en { ubicación } . Espero verte el { fecha } .
¡Que tengas un lindo día!
Conceptualmente, compilar una app es similar. Tienes marcadores de posición para algunos datos, mientras que otras partes de la app permanecen iguales.
En la ilustración anterior de una app de noticias, el texto "Te damos la bienvenida", el encabezado "Noticias más recientes para ti" y el texto del botón "Ver más artículos" siempre se mantienen iguales. En cambio, el nombre del usuario y el contenido de cada artículo cambiarán, por lo que sería una gran oportunidad para usar variables que contengan cada dato.
No es recomendable que escribas el código (o las instrucciones) en tu app de noticias solo para un usuario llamado Alex o un artículo de noticias que siempre tenga el mismo título y la misma fecha de publicación. En cambio, necesitas una app más flexible, por lo que deberías escribir tu código haciendo referencia a nombres de variables como name
, article1Name
, article1Date
, etc. Entonces, tu código será lo suficientemente general como para funcionar para muchos casos de uso diferentes en los que el nombre del usuario y los detalles del artículo pueden ser distintos.
App de ejemplo con variables
Observemos un ejemplo de una app para ver dónde podría usar variables.
En una app de mapas, es posible que veas una pantalla con detalles de cada ubicación, como un restaurante o una empresa. La captura de pantalla anterior de la app de Google Maps muestra los detalles de la sede central de Google, que se denomina Googleplex. ¿Qué datos crees que se almacenan como variables en la app?
- El nombre de la ubicación
- La calificación por estrellas de la ubicación
- La cantidad de opiniones de la ubicación
- Si el usuario guardó (o agregó a favoritos) esta ubicación
- La dirección de la ubicación
- La descripción de la ubicación
Si cambias los datos que se almacenan en estas variables, tendrás una app de mapas lo suficientemente flexible como para mostrar los detalles de otras ubicaciones.
Tipos de datos
Cuando decidas qué aspectos de tu app pueden ser variables, es importante que especifiques qué tipo de datos se pueden almacenar en esas variables. En Kotlin, existen algunos tipos de datos básicos comunes. En la siguiente tabla, se muestra un tipo de datos diferente en cada fila. Para cada tipo de datos, se incluye una descripción del tipo de datos que puede contener y valores de ejemplo.
Tipo de datos de Kotlin | Qué tipo de datos puede contener | Ejemplos de valores literales |
| Texto |
|
| Número entero |
|
| Número decimal |
|
| Número decimal (que es menos preciso que un |
|
|
|
|
Ahora que conoces algunos tipos de datos de Kotlin comunes, ¿qué tipo de datos sería el adecuado para cada una de las variables identificadas en la página de detalles de la ubicación que viste antes?
- El nombre de la ubicación es texto, por lo que se puede almacenar en una variable cuyo tipo de datos es
String.
- La calificación por estrellas de la ubicación es un número decimal (como 4.2 estrellas), por lo que se puede almacenar como
Double
. - La cantidad de opiniones de la ubicación es un número entero, por lo que debe almacenarse como
Int
. - Si el usuario guardó esta ubicación solo tiene dos valores posibles (guardada o no guardada), por lo que se almacena como
Boolean
, dondetrue
yfalse
pueden representar cada uno de esos estados. - La dirección de la ubicación es texto, por lo que debe ser
String
. - La descripción de la ubicación también es texto, por lo que debe ser
String
A continuación, puedes practicar en dos situaciones más. Identifica el uso de las variables y sus tipos de datos en las siguientes apps.
- En una app para mirar videos, como la app de YouTube, hay una pantalla de detalles del video. ¿Dónde es probable que se usen las variables? ¿Cuál es el tipo de datos de esas variables?
No hay una sola respuesta correcta, pero en una app de reproducción de video, se pueden usar variables para los siguientes datos:
- Nombre del video (
String
) - Nombre del canal (
String
) - Cantidad de vistas del video (
Int
) - Cantidad de "me gusta" en el video (
Int
) - Cantidad de comentarios publicados en el video (
Int
)
- En una app de correo electrónico como Gmail, la pantalla de Recibidos indica los mensajes de correo electrónico más recientes. ¿Dónde es probable que se usen las variables? ¿Cuál es el tipo de datos de esas variables?
Una vez más, no hay una sola respuesta correcta. En una app de correo electrónico, las variables se pueden usar para los siguientes datos:
- Nombre del remitente (
String
) - Asunto del correo electrónico (
String
) - Si el correo electrónico está destacado (
Boolean
) - Cantidad de correos electrónicos nuevos en Recibidos (
Int
)
Pruébalo
- Abre tu app favorita en el teléfono.
- Identifica dónde crees que se usan las variables en la app, en esa pantalla en particular.
- Adivina qué tipo de datos son esas variables.
- Comparte tus respuestas en las redes sociales con una captura de pantalla de la app, una explicación de dónde crees que se usan las variables y el hashtag #AndroidBasics.
Hasta ahora, hiciste un gran trabajo en este codelab. Pasa a la siguiente sección para obtener más información sobre cómo se utilizan las variables y los tipos de datos en tu código.
3. Define y usa variables
Comparación entre definir y usar una variable
Para poder usar una variable en tu código, primero debes definirla. Esto es similar a lo que aprendiste en el codelab anterior sobre cómo definir funciones antes de llamarlas.
Cuando defines una variable, le asignas un nombre para identificarla de manera única. También debes decidir qué tipo de datos puede contener mediante la especificación del tipo de datos. Por último, puedes proporcionar un valor inicial que se almacenará en la variable, pero es opcional.
Cuando definas una variable, podrás usarla en el programa. Para usar una variable, escribe el nombre de la variable en tu código, lo que le indica al compilador de Kotlin que deseas usar el valor de la variable en ese punto del código.
Por ejemplo, define una variable para la cantidad de mensajes no leídos en la carpeta Recibidos de un usuario. La variable puede tener el nombre count
. Almacena un valor, como el número 2
dentro de la variable, que represente 2
mensajes no leídos en la bandeja Recibidos del usuario. (Puedes elegir un número diferente para almacenar en la variable, pero a los efectos de este ejemplo, usa el número 2
).
Cada vez que tu código necesite acceder a la cantidad de mensajes no leídos, escribe count
. Cuando ejecutas tus instrucciones, el compilador de Kotlin ve el nombre de la variable en tu código y usa el valor de la variable en su lugar.
Técnicamente, existen palabras de vocabulario más específicas para describir este proceso:
Una expresión es una unidad de código pequeña que tiene un valor. Puede consistir en variables, llamadas a funciones y mucho más. En el siguiente caso, la expresión se compone de una variable: la variable count
. El valor de la expresión es 2
.
Evaluar significa determinar el valor de una expresión. En este caso, la expresión se evalúa como 2
. El compilador evalúa expresiones en el código y usa esos valores cuando ejecuta las instrucciones en el programa.
Para observar este comportamiento en el Playground de Kotlin, ejecuta el programa en la siguiente sección.
Ejemplo
- Abre el Playground de Kotlin en un navegador web.
- Reemplaza el código existente en el Playground de Kotlin con el siguiente programa.
Este programa crea una variable llamada count
con un valor inicial de 2
y la usa para imprimir el valor de la variable count
en el resultado. No te preocupes si aún no comprendes todos los aspectos de la sintaxis del código. Se explicarán con más detalle en las próximas secciones.
fun main() {
val count: Int = 2
println(count)
}
- Ejecuta el programa. Debería mostrar el siguiente resultado:
2
Declaración de variable
En el programa que ejecutaste, la segunda línea del código indicará lo siguiente:
val count: Int = 2
Con esta declaración, se crea una variable de número entero llamada count
que contiene el número 2
.
Es posible que tardes un poco en familiarizarte con la lectura de la sintaxis (o el formato) para declarar una variable en Kotlin. En el siguiente diagrama, se muestra dónde se debe ubicar cada detalle de la variable, así como la ubicación de los espacios y símbolos.
En el contexto de la variable count
, puedes ver que la declaración de variables comienza con la palabra val
. El nombre de la variable es count
. El tipo de datos es Int
y el valor inicial es 2
.
Cada parte de la declaración de variables se explica con más detalle a continuación.
Palabra clave para definir una variable nueva
Para definir una nueva variable, comienza con la palabra clave val
de Kotlin (que significa valor). Luego, el compilador de Kotlin sabe que en esta declaración hay una declaración de variable.
Nombre de la variable
Del mismo modo en que nombras una función, también debes asignar un nombre a una variable. En la declaración de variables, el nombre de la variable sigue a la palabra clave val
.
Puedes elegir el nombre de cualquier variable que desees, pero como práctica recomendada, evita usar palabras clave de Kotlin como nombre de variable.
Te recomendamos que elijas un nombre que describa los datos que contiene la variable para que sea más fácil de leer.
Los nombres de las variables deben seguir la convención de mayúsculas y minúsculas, como aprendiste con los nombres de las funciones. La primera palabra del nombre de variable se escribe en minúscula. Si el nombre contiene varias palabras, no se escriben espacios entre ellas y todas las demás palabras deben comenzar con mayúscula.
Ejemplos de nombres de variables:
numberOfEmails
cityName
bookPublicationDate
Para el ejemplo de código que se mostró antes, count
es el nombre de la variable.
val count: Int = 2
Tipo de datos variable
Después del nombre de la variable, agrega dos puntos, un espacio y, luego, el tipo de datos de la variable. Como se mencionó anteriormente, String
, Int
, Double
, Float,
y Boolean
son algunos de los tipos básicos de datos de Kotlin. Aprenderás más tipos de datos más adelante en este curso. Recuerda escribir los tipos de datos exactamente como se muestran y comenzar cada uno con una letra mayúscula.
En el ejemplo de la variable count
, Int
es el tipo de datos de la variable.
val count: Int = 2
Operador de asignación
En la declaración de variables, el signo igual (=
) sigue al tipo de datos. El signo igual se denomina operador de asignación. El operador de asignación asigna un valor a la variable. En otras palabras, el valor del lado derecho del signo igual se almacena en la variable del lado izquierdo del signo igual.
Valor inicial variable
El valor de la variable son los datos reales que están almacenados en la variable.
Para el ejemplo de la variable count
, el número 2
es el valor inicial de la variable.
val count: Int = 2
También puedes escuchar la frase: "la variable count
se inicializó en 2
". Esto significa que 2
es el primer valor almacenado en la variable cuando se declara la variable.
El valor inicial será diferente según el tipo de datos declarado para la variable.
Consulta la siguiente tabla. Tal vez la reconozcas de un momento anterior del codelab. La tercera columna muestra valores de ejemplo que se pueden almacenar en una variable de cada tipo correspondiente. Estos valores se denominan literales porque son valores fijos o constantes (el valor es siempre el mismo). Por ejemplo, el número entero 32 siempre tendrá el valor de 32. En cambio, una variable no es un valor literal porque su valor puede cambiar. Es posible que escuches nombrar a estos valores literales según su tipo: literal de string, literal de número entero, literal booleano, etc.
Tipo de datos de Kotlin | Qué tipo de datos puede contener | Ejemplos de valores literales |
| Texto |
|
| Número entero |
|
| Número decimal |
|
| Número decimal (que es menos preciso que un |
|
|
|
|
Es importante proporcionar un valor apropiado y válido según el tipo de datos de la variable. Por ejemplo, no puedes almacenar un literal de string como "Hello"
dentro de una variable de tipo Int
porque el compilador de Kotlin te mostrará un error.
Usa una variable
A continuación, se muestra el programa original que ejecutaste en el Playground de Kotlin. Hasta ahora, aprendiste que la segunda línea de código crea una nueva variable de número entero llamada count
con un valor de 2
.
fun main() {
val count: Int = 2
println(count)
}
Ahora, veamos la tercera línea de código. Imprime la variable count
en el resultado:
println(count)
Observa la palabra count
no está entre comillas. Es un nombre de variable, no un literal de string. (Si fuera un literal de string, la palabra aparecería entre comillas). Cuando ejecutas el programa, el compilador de Kotlin evalúa la expresión dentro de los paréntesis, que es count
, para la instrucción println()
. Dado que la expresión se evalúa como 2
, se llama al método println()
con 2
como la entrada: println(2)
.
Por lo tanto, el resultado del programa es el siguiente:
2
El número por sí solo en el resultado no es muy útil. Sería más útil tener un mensaje más detallado en el resultado para explicar lo que representa el 2
.
Plantilla de strings
Un mensaje más útil para mostrar en el resultado es el siguiente:
You have 2 unread messages.
Sigue los pasos que aparecen a continuación para que el programa muestre un mensaje más útil.
- Actualiza tu programa en el Playground de Kotlin con el siguiente código. Para la llamada
println()
, pasa un literal de string que contenga el nombre de variablecount
. Recuerda encerrar el texto entre comillas. Ten en cuenta que esto no te brindará los resultados que esperas. Solucionarás el problema en un paso posterior.
fun main() {
val count: Int = 2
println("You have count unread messages.")
}
- Ejecuta el programa. Debería mostrarse el siguiente resultado:
You have count unread messages.
Esa oración no tiene sentido. Querrás que se muestre el valor de la variable count
en el mensaje, no el nombre de la variable.
- Para corregir tu programa, agrega un signo de dólar
$
antes de la variablecount
:"You have $count unread messages."
Esta es una plantilla de strings porque contiene una expresión de plantillas, que en este caso es$count
. Una expresión de plantilla es una expresión que se evalúa como un valor y que luego se sustituye en la string. En este caso, la expresión de plantilla$count
se evalúa como2
, y el2
se sustituye en la string en la que se encontró la expresión.
fun main() {
val count: Int = 2
println("You have $count unread messages.")
}
- Cuando ejecutas el programa, el resultado coincide con el objetivo deseado:
You have 2 unread messages.
Esa oración tiene mucho más sentido para el usuario.
- Ahora, cambia el valor inicial de la variable
count
a un literal de número entero diferente. Por ejemplo, puedes elegir el número10
. Deja el resto del código del programa sin modificar.
fun main() {
val count: Int = 10
println("You have $count unread messages.")
}
- Ejecuta el programa. Observa que el resultado cambia en consecuencia y que no necesitas cambiar la declaración
println()
en tu programa.
You have 10 unread messages.
Puedes ver qué tan útil puede ser una plantilla de strings. Solo escribiste la plantilla de strings una vez en tu código ("You have $count unread messages."
). Si cambias el valor inicial de la variable count
, la sentencia println()
seguirá funcionando. Ahora, tu código es más flexible.
Para destacar este punto, compara los dos programas que aparecen a continuación. El primer programa usa un literal de string, con la cantidad exacta de mensajes no leídos directamente en la string. Este programa solo funciona cuando el usuario tiene 10 mensajes no leídos.
fun main() {
println("You have 10 unread messages.")
}
Si usas una variable y una plantilla de strings en el segundo programa, tu código podrá adaptarse a más situaciones. Este segundo programa es más flexible.
fun main() {
val count: Int = 10
println("You have $count unread messages.")
}
Inferencia de tipo
A continuación, se muestra una sugerencia que te permite escribir menos código cuando declaras variables.
La inferencia de tipo es cuando el compilador de Kotlin puede inferir (o determinar) qué tipo de datos debe ser una variable, sin que el tipo se escriba de manera explícita en el código. Eso significa que puedes omitir el tipo de datos en una declaración de variable si proporcionas un valor inicial para ella. El compilador de Kotlin examina el tipo de datos del valor inicial y supone que quieres que la variable contenga datos de ese tipo.
A continuación, se muestra la sintaxis de una declaración de variable que usa inferencia de tipo:
Volviendo al ejemplo de conteo, el programa contenía inicialmente esta línea de código:
val count: Int = 2
Sin embargo, esta línea de código también se puede escribir de la siguiente manera: Observa que se omiten el símbolo de dos puntos (:
) y el tipo de datos Int
. La sintaxis actualizada tiene menos palabras para escribir y logra el mismo resultado de la creación de una variable Int
llamada count
con un valor de 2
.
val count = 2
El compilador de Kotlin sabe que deseas almacenar 2
(un número entero) en la variable count
, de modo que pueda inferir que la variable count
es del tipo Int
. Es práctico, ¿no? Este es un ejemplo de cómo escribir código de Kotlin es más conciso.
Aunque en este ejemplo solo se analiza una variable de tipo Int
, el concepto de inferencia de tipos se aplica a todos los tipos de datos en Kotlin.
Operaciones matemáticas básicas con números enteros
¿Cuál es la diferencia entre una variable Int
con el valor 2
y una variable String
con el valor "2"
? Cuando ambos se imprimen en el resultado, se ven iguales.
La ventaja de almacenar números enteros como Int
(en lugar de String
) es que puedes realizar operaciones matemáticas con variables Int
, como la suma, la resta, la división y la multiplicación (consulta otras operaciones). Por ejemplo, se pueden sumar dos variables de número entero para obtener el resultado. Hay casos en los que es razonable tener números enteros almacenados como strings, pero el propósito de esta sección es mostrarte qué puedes hacer con las variables Int
.
- Regresa al Playground de Kotlin y quita todo el código del editor de código.
- Crea un programa nuevo en el que se defina una variable de número entero para la cantidad de correos electrónicos no leídos de la carpeta de Recibidos y, luego, inicialízalo en un valor como
5
. Puedes elegir otro número si lo deseas. Define una segunda variable de número entero para la cantidad de correos electrónicos leídos en una carpeta de Recibidos. Inicialízalo a un valor como100
. Puedes elegir otro número si lo deseas. Luego, imprime la cantidad total de mensajes en Recibidos, suma los dos números enteros.
fun main() {
val unreadCount = 5
val readCount = 100
println("You have ${unreadCount + readCount} total messages in your inbox.")
}
- Ejecuta el programa. Debería mostrar la cantidad total de mensajes en Recibidos:
You have 105 total messages in your inbox.
Para una plantilla de strings, aprendiste que puedes colocar el símbolo $
antes de un solo nombre de variable. Sin embargo, si tienes una expresión más compleja, debes encerrar la expresión entre llaves con el símbolo $
antes de las llaves: ${unreadCount + readCount}
. La expresión dentro de las llaves, unreadCount + readCount
, se evalúa como 105
. Luego, se sustituye el valor 105
dentro del literal de string.
- Para profundizar más este tema, crea variables con diferentes nombres y valores iniciales, y usa expresiones de plantillas para imprimir mensajes en el resultado.
Por ejemplo, modifica tu programa para imprimir lo siguiente:
100 photos 10 photos deleted 90 photos left
Esta es una forma de escribir el programa, aunque también hay otras formas correctas de escribirlo.
fun main() {
val numberOfPhotos = 100
val photosDeleted = 10
println("$numberOfPhotos photos")
println("$photosDeleted photos deleted")
println("${numberOfPhotos - photosDeleted} photos left")
}
4. Actualiza variables
Cuando una app se ejecuta, es posible que sea necesario actualizar el valor de una variable. Por ejemplo, en una app de compras, a medida que el usuario agrega artículos al carrito, el total del carrito aumenta.
Simplificamos el caso de uso de esa compra en un programa simple. La lógica está escrita a continuación con lenguaje humano, no en Kotlin. Esta función se denomina pseudocódigo porque describe los puntos clave en los que se escribirá el código, pero no contiene todos los detalles del código.
En la función principal de un programa, haz lo siguiente:
- Crea una variable de número entero
cartTotal
que comience en el valor0
. - El usuario agrega un suéter que cuesta USD 20 a su carrito de compras.
- Actualiza la variable
cartTotal
a20
, que es el costo actual de los artículos de su carrito de compras. - Imprime el costo total de los artículos de su carrito, que es la variable
cartTotal
, en el resultado.
Para simplificar aún más el código, no es necesario que escribas el código cuando el usuario agrega artículos al carrito de compras. (Todavía no aprendiste cómo un programa puede responder a las entradas del usuario. Eso se abordará en una unidad posterior). Por lo tanto, enfócate en las partes en las que creas, actualizas y también imprimes la variable cartTotal
.
- Reemplaza el código existente en el Playground de Kotlin con el programa que aparece a continuación. En la línea 2 del programa, inicializa la variable
cartTotal
en el valor0
. Ya que proporcionas un valor inicial, no es necesario especificar el tipo de datosInt
debido a la inferencia de tipo. En la línea 3 del programa, intenta actualizar la variablecartTotal
a20
con el operador de asignación (=
). En la línea 4 del programa, imprime la variablecartTotal
con una plantilla de strings.
fun main() {
val cartTotal = 0
cartTotal = 20
println("Total: $cartTotal")
}
- Ejecuta el programa. Se mostrará un error de compilación.
- Observa que el error indica que no se puede reasignar el
val
. El error se encuentra en la tercera línea del programa, la que intenta cambiar el valor decartTotal
variable a20.
.val
cartTotal
no se puede reasignar a otro valor (20
) después de que se le asigne un valor inicial (0
).
Val cannot be reassigned
Si necesitas actualizar el valor de una variable, declara la variable con la palabra clave de Kotlin var
, en lugar de val
.
- Palabra clave
val
: Úsala cuando esperes que el valor de la variable no cambie. - Palabra clave
var
: Úsala cuando esperes que el valor de la variable pueda cambiar.
Con val
, la variable es de solo lectura, lo que significa que solo puedes leer el valor de la variable o acceder a él. Una vez que se establece el valor, no puedes editarlo ni modificarlo. Con var
, la variable es mutable, lo que significa que el valor se puede cambiar o modificar. El valor se puede mutar.
Para recordar la diferencia, piensa en val
como un valor fijo y en var
como una variable. En Kotlin, se recomienda usar la palabra clave val
en lugar de la palabra clave var
cuando sea posible.
- Actualiza la declaración de variable de
cartTotal
en la línea 2 del programa a fin de usarvar
en lugar deval
. El código debería verse así:
fun main() {
var cartTotal = 0
cartTotal = 20
println("Total: $cartTotal")
}
- Observa la sintaxis del código en la línea 3 del programa que actualiza la variable.
cartTotal = 20
Usa el operador de asignación (=
) para asignar un valor nuevo (20
) a la variable existente (cartTotal
). No necesitas utilizar la palabra clave var
nuevamente porque la variable ya está definida.
Con la analogía de la caja, imagina que el valor 20
se almacena en la caja etiquetada cartTotal
.
Aquí se muestra un diagrama de la sintaxis general para actualizar una variable, que ya se declaró en una línea de código anterior. Inicia la sentencia con el nombre de la variable que deseas actualizar. Agrega un espacio y el signo igual, seguido de otro espacio. Luego, escribe el valor actualizado de la variable.
- Ejecuta el programa. El código debería compilarse correctamente. Se debería imprimir este resultado:
Total: 20
- Para ver cómo cambia el valor de la variable mientras se ejecuta el programa, imprime la variable
cartTotal
en el resultado después de declarar la variable inicialmente. Consulta los cambios en el código a continuación. La línea 3 tiene una declaraciónprintln()
nueva. También se agrega una línea en blanco en la línea 4 del código. Las líneas en blanco no afectan la manera en que el compilador comprende el código. Agrega una línea en blanco donde sea más fácil leer tu código porque separa los bloques de código relacionados.
fun main() {
var cartTotal = 0
println("Total: $cartTotal")
cartTotal = 20
println("Total: $cartTotal")
}
- Vuelve a ejecutar el programa. El resultado debería ser el siguiente:
Total: 0
Total: 20
Podrás ver que, en un principio, el total del carrito de compras es de 0
. Luego, se actualiza a 20
. Actualizaste correctamente una variable. Esto fue posible porque cambiaste cartTotal
de una variable de solo lectura (con val
) a una variable mutable (con var
).
Recuerda que solo debes usar var
para declarar una variable si esperas que cambie el valor. De lo contrario, deberías usar val
de forma predeterminada para declarar una variable. Esta práctica hace que tu código sea más seguro. El uso de val
garantiza que las variables no se actualicen en tu programa si no esperas que lo hagan. Una vez que se asigna un valor a val
, siempre se mantiene ese valor.
Operadores de incremento y disminución
Ahora, sabes que se debe declarar una variable como var
para actualizar su valor. Aplica este conocimiento al ejemplo de mensaje de correo electrónico que debería aparecer a continuación.
- Reemplaza el código en el Playground de Kotlin con este código:
fun main() {
val count: Int = 10
println("You have $count unread messages.")
}
- Ejecuta el programa. Se debería imprimir lo siguiente:
You have 10 unread messages.
- Reemplaza la palabra clave
val
por la palabra clavevar
a fin de hacer que la variablecount
sea una variable mutable. No debería haber cambios en el resultado cuando ejecutes el programa.
fun main() {
var count: Int = 10
println("You have $count unread messages.")
}
- Sin embargo, ahora puedes actualizar
count
a un valor diferente. Por ejemplo, cuando llega un correo electrónico nuevo a la carpeta Recibidos del usuario, puedes aumentarcount
una vez. (No es necesario que escribas el código cuando llegue un correo electrónico. Obtener datos de Internet es un tema más avanzado que se detallará en una unidad posterior). Por ahora, enfócate en la variablecount
que aumenta a1
con esta línea de código:
count = count + 1
La expresión a la derecha del signo igual es count + 1
y se evalúa como 11
. Esto se debe a que el valor actual de count
es 10
(que se encuentra en la línea 2 del programa) y 10 + 1
es igual a 11
. Luego, con el operador de asignaciones, se asigna o se almacena el valor 11
en la variable count
.
Agrega esta línea de código a tu programa en la parte inferior de la función main()
. El código debería verse como este fragmento:
fun main() {
var count = 10
println("You have $count unread messages.")
count = count + 1
}
Si ejecutas el programa ahora, el resultado será el mismo que antes porque no agregaste ningún código para usar la variable count
después de actualizarla.
- Agrega otra sentencia de impresión que imprima la cantidad de mensajes no leídos después de que se haya actualizado la variable.
fun main() {
var count = 10
println("You have $count unread messages.")
count = count + 1
println("You have $count unread messages.")
}
- Ejecuta el programa. El segundo mensaje debería mostrar el valor
count
actualizado de11
mensajes.
You have 10 unread messages. You have 11 unread messages.
- En resumen, si deseas aumentar una variable en
1
, puedes usar el operador de incremento (++
), que se compone de dos símbolos de suma. Si usas estos símbolos inmediatamente después de un nombre de variable, le indicas al compilador que deseas agregar 1 al valor actual de la variable y, luego, almacenar el valor nuevo en la variable. Las dos líneas de código siguientes son equivalentes, pero el uso del operador de incremento++
implica menos escritura.
count = count + 1
count++
Realiza esta modificación en tu código y, luego, ejecuta el programa. No debe haber espacios entre el nombre de la variable y el operador de incremento.
fun main() {
var count = 10
println("You have $count unread messages.")
count++
println("You have $count unread messages.")
}
- Ejecuta el programa. El resultado es el mismo, pero ahora aprendiste sobre un nuevo operador.
You have 10 unread messages. You have 11 unread messages.
- Ahora, modifica la línea 4 de tu programa para usar el operador de disminución (
--
) después del nombre de la variablecount
. El operador de disminución está compuesto por dos símbolos menos. Cuando colocas el operador de disminución después del nombre de la variable, le indicas al compilador que deseas disminuir el valor de la variable en1
y almacenar el valor nuevo en ella.
fun main() {
var count = 10
println("You have $count unread messages.")
count--
println("You have $count unread messages.")
}
- Ejecuta el programa. Se debería imprimir este resultado:
You have 10 unread messages. You have 9 unread messages.
En esta sección, aprendiste a actualizar una variable mutable mediante el operador de incremento (++
) y el operador de disminución (--
). Más específicamente, count++
es igual a count = count + 1
y count--
es igual a count = count - 1
.
5. Explora otros tipos de datos
Anteriormente en el codelab, aprendiste algunos tipos de datos básicos comunes: String
, Int
, Double
y Boolean
. Acabas de usar el tipo de datos Int
, ahora explorarás otros tipos de datos.
Tipo de datos de Kotlin | Qué tipo de datos puede contener |
| Texto |
| Número entero |
| Número decimal |
|
|
Prueba estos programas en el Playground de Kotlin para ver cuál es el resultado.
Double
Cuando necesites una variable con un valor decimal, usa una variable Double
. Para obtener información sobre su rango válido, consulta esta tabla y observa las cifras decimales que puede almacenar, por ejemplo.
Imagina que estás navegando a un destino y tu viaje se divide en tres partes distintas porque debes hacer paradas durante el trayecto. Este programa muestra la distancia total que queda para llegar a tu destino.
- Ingresa este código en el Playground de Kotlin. ¿Puedes entender lo que sucede en cada línea de código?
fun main() {
val trip1: Double = 3.20
val trip2: Double = 4.10
val trip3: Double = 1.72
val totalTripLength: Double = 0.0
println("$totalTripLength miles left to destination")
}
Se declaran tres variables, llamadas trip1
, trip2
y trip3
, para representar la distancia de cada parte del viaje. Todas son variables Double
porque almacenan valores decimales. Usa val
para declarar cada variable porque sus valores no cambian en el transcurso del programa. El programa también crea una cuarta variable llamada totalTripLength
, que actualmente se inicializa en 0.0
. En la última línea del programa, se imprime un mensaje con el valor de totalTripLength
.
- Corrige el código para que la variable
totalTripLength
sea la suma de las tres duraciones de viaje.
val totalTripLength: Double = trip1 + trip2 + trip3
La expresión de la derecha del signo igual se evalúa como 9.02
porque 3.20 + 4.10 + 1.72
es igual a 9.02
. El valor de 9.02
se almacena en la variable totalTripLength
.
Todo tu programa debería verse como el siguiente código:
fun main() {
val trip1: Double = 3.20
val trip2: Double = 4.10
val trip3: Double = 1.72
val totalTripLength: Double = trip1 + trip2 + trip3
println("$totalTripLength miles left to destination")
}
- Ejecuta el programa. Se debería imprimir lo siguiente:
9.02 miles left to destination
- Corrige tu código para quitar el tipo de datos
Double
innecesario de las declaraciones de variables debido a la inferencia de tipo. El compilador de Kotlin puede inferir que estas variables son tipos de datosDouble
según los números decimales proporcionados como valores iniciales.
fun main() {
val trip1 = 3.20
val trip2 = 4.10
val trip3 = 1.72
val totalTripLength = trip1 + trip2 + trip3
println("$totalTripLength miles left to destination")
}
- Vuelve a ejecutar el código para asegurarte de que siga compilando. El resultado debería ser el mismo, pero ahora tu código es más simple.
String
Cuando necesites una variable que pueda almacenar texto, usa una variable String
. Recuerda usar comillas alrededor de los valores literales de string, como "Hello Kotlin"
, mientras que los valores literales Int
y Double
no tienen comillas.
- Copia y pega este programa en el Playground de Kotlin.
fun main() {
val nextMeeting = "Next meeting is:"
val date = "January 1"
val reminder = nextMeeting + date
println(reminder)
}
Observa que hay dos variables String
declaradas, una variable nextMeeting
y una variable date
. Luego, se declara una tercera variable String
llamada reminder
, que se establece igual a la variable nextMeeting
más la variable date
.
Con el símbolo +, puedes agregar dos strings juntas, que se llama concatenación. Las dos strings se combinan, una tras otra. El resultado de la expresión, nextMeeting + date
, es "Next meeting is:January 1"
, como se muestra en el siguiente diagrama.
Luego, el valor "Next meeting is:January 1"
se almacena en la variable reminder
con el operador de asignación en la línea 4 del programa.
- Ejecuta el programa. Se debería imprimir lo siguiente:
Next meeting is:January 1
Cuando concatenas dos strings, no se agregan espacios entre ellas. Si quieres un espacio después de los dos puntos en la string resultante, debes agregar el espacio en una string o en la otra.
- Actualiza la variable
nextMeeting
para que tenga un espacio adicional al final de la string antes de las comillas. (De manera alternativa, podrías haber agregado un espacio adicional al principio de la variabledate
). Tu programa debería verse de la siguiente manera:
fun main() {
val nextMeeting = "Next meeting is: "
val date = "January 1"
val reminder = nextMeeting + date
println(reminder)
}
- Vuelve a ejecutar el programa. Ahora, debería haber un espacio después de los dos puntos en el mensaje de salida.
Next meeting is: January 1
- Modifica el código para concatenar (o agregar) otro fragmento de texto a la expresión que se almacena en la variable
reminder
.
Usa el símbolo +
para agregar el literal de string "at work"
al final de la string reminder
.
- Ejecuta el programa.
Se debería imprimir este resultado:
Next meeting is: January 1 at work
En el siguiente código, te mostramos una forma de implementar el comportamiento.
fun main() {
val nextMeeting = "Next meeting is: "
val date = "January 1"
val reminder = nextMeeting + date + " at work"
println(reminder)
}
Observa que no hay comillas entre nextMeeting
y date
porque son nombres de variables de string existentes (donde sus respectivos valores son texto entre comillas). Por el contrario, el literal "at work"
no se definió anteriormente en ninguna variable, por lo que debes poner ese texto entre comillas para que el compilador sepa que esta es una string que se debe concatenar en las otras strings.
En términos técnicos, puedes lograr el mismo resultado declarando una sola variable String
con el texto completo en lugar de usar variables separadas. Sin embargo, el propósito de este ejercicio es demostrar cómo puedes declarar y manipular las variables String
, especialmente cómo concatenar strings separadas.
- Cuando leas código que contenga strings, es posible que encuentres secuencias de escape. Las secuencias de escape son caracteres que van precedidos de un símbolo de barra invertida (
\
), que también se denomina barra invertida de escape.
Un ejemplo es ver \"
dentro de un literal de string, como en el siguiente ejemplo. Copia y pega este código en el Playground de Kotlin.
fun main() {
println("Say \"hello\"")
}
Ya aprendiste a usar comillas dobles alrededor de un literal de string. Pero, ¿qué sucede si deseas usar el signo "
en tu string? Debes agregar el símbolo de barra inversa antes de las comillas dobles como \"
dentro de tu string. Recuerda que debe haber comillas dobles alrededor de toda la string.
- Ejecuta el programa para ver el resultado. Debería mostrar lo siguiente:
Say "hello"
En el resultado, se muestran comillas alrededor de hello
porque agregamos \"
antes y después de hello
en la sentencia println()
.
Para conocer otras secuencias de escape compatibles con Kotlin, consulta la página de documentación sobre secuencias de escape. Por ejemplo, si quieres agregar una nueva línea en tu string, usa el símbolo \
antes del carácter n, como en \n
.
Ahora, aprendiste a concatenar strings y a escapar secuencias dentro de strings. Continúa con el último tipo de datos que abarca este codelab.
Booleano
El tipo de datos Boolean
es útil cuando tu variable solo tiene dos valores posibles representados por true
o false
.
Un ejemplo es una variable que representa si el modo de avión de un dispositivo está activado o desactivado, o si las notificaciones de una app están habilitadas o inhabilitadas.
- Ingresa este código en el Playground de Kotlin. En la línea 2 de este programa, declara una variable
Boolean
llamadanotificationsEnabled
y, luego, inicialízala entrue
. En términos técnicos, puedes omitir: Boolean
en la declaración, por lo que puedes quitarlo si lo deseas. En la línea 3 del programa, imprime el valor de la variablenotificationsEnabled
.
fun main() {
val notificationsEnabled: Boolean = true
println(notificationsEnabled)
}
Ejecuta el programa. Se debería imprimir lo siguiente:
true
- Cambia el valor inicial de
Boolean
a falso en la línea 2 del programa.
fun main() {
val notificationsEnabled: Boolean = false
println(notificationsEnabled)
}
Ejecuta el programa. Se debería imprimir lo siguiente:
false
- Se pueden concatenar otros tipos de datos a
Strings
. Por ejemplo, puedes concatenarBooleans
enStrings
. Usa el símbolo+
para concatenar (o agregar) el valor de la variable booleananotificationsEnabled
en el final de la string"Are notifications enabled? "
.
fun main() {
val notificationsEnabled: Boolean = false
println("Are notifications enabled? " + notificationsEnabled)
}
Ejecuta el programa para ver el resultado de la concatenación. El programa debería imprimir el siguiente resultado:
Are notifications enabled? false
Puedes ver que es posible establecer la variable Boolean
en un valor true
o false
. Las variables de Boolean
te permiten codificar situaciones más interesantes en las que ejecutas algún conjunto de instrucciones cuando una variable de Boolean
tiene un valor de true
. Si Boolean
tiene un valor falso, omite esas instrucciones. Obtendrás más información sobre Booleans
en un codelab futuro.
6. Convenciones de codificación
En el codelab anterior, se presentó la guía de estilo de Kotlin para escribir código de Android de manera coherente según lo recomendado por Google y seguido por otros desarrolladores profesionales.
Estas son otras convenciones de formato y codificación que puedes seguir en función de los nuevos temas que aprendiste:
- Los nombres de las variables deben seguir la convención de mayúsculas y minúsculas, y comenzar con una letra minúscula.
- En una declaración de variable, debes especificar un espacio después de los dos puntos cuando se especifica el tipo de datos.
- Debe haber un espacio antes y después de un operador como la asignación (
=
), la suma (+
), la resta (-
), la multiplicación (*
) la división (/
) y muchos más.
- A medida que escribes programas más complejos, se recomienda usar un límite de 100 caracteres por línea. De esta manera, te aseguras de poder leer todo el código de un programa fácilmente en la pantalla de la computadora, sin necesidad de desplazarse horizontalmente cuando leas código.
7. Comenta en tu código
Durante la codificación, otra práctica recomendada es agregar comentarios que describan para qué sirve el código. Los comentarios pueden ayudar a las personas que leen tu código a seguirlo con más facilidad. Dos símbolos de barra diagonal, o //
, indican que el texto que sigue en el resto de la línea se considera un comentario, por lo que no se interpreta como código. Es común agregar un espacio después de los dos símbolos de barra diagonal.
// This is a comment.
Un comentario también puede comenzar en el medio de una línea de código. En este ejemplo, height = 1
es una instrucción de codificación normal. Todo lo que aparece después de //
o Assume the height is 1 to start with
, se interpreta como un comentario y no se considera parte del código.
height = 1 // Assume the height is 1 to start with.
Si quieres describir el código con más detalle junto con un comentario largo que supere los 100 caracteres en una línea, usa un comentario de varias líneas. Inicia el comentario de varias líneas con una barra diagonal (/
) y un asterisco (*
) como /*
. Agrega un asterisco al principio de cada nueva línea del comentario. Por último, termina el comentario con un asterisco y un símbolo de barra diagonal */
.
/*
* This is a very long comment that can
* take up multiple lines.
*/
Este programa contiene comentarios de una o varias líneas que describen lo que sucede:
/**
* This program displays the number of messages
* in the user's inbox.
*/
fun main() {
// Create a variable for the number of unread messages.
var count = 10
println("You have $count unread messages.")
// Decrease the number of messages by 1.
count--
println("You have $count unread messages.")
}
Como se mencionó anteriormente, puedes agregar líneas vacías en blanco a tu código para agrupar declaraciones relacionadas y facilitar la lectura del código.
- Agrega algunos comentarios a un fragmento de código anterior que hayas usado.
- Ejecuta el programa para asegurarte de que no haya cambiado el comportamiento porque los comentarios no deberían afectar el resultado.
8. Conclusión
¡Buen trabajo! Aprendiste sobre variables en Kotlin, por qué son útiles en programación y cómo crearlas, actualizarlas y usarlas. Experimentaste con diferentes tipos de datos básicos en Kotlin, incluidos los tipos de datos Int
, Double
, String
y Boolean
. También aprendiste sobre la diferencia entre las palabras clave val
y var
.
Todos estos conceptos son componentes fundamentales de tu recorrido para convertirte en desarrollador.
Nos vemos en el siguiente codelab.
Resumen
- Una variable es un contenedor de un único dato.
- Debes declarar una variable antes de usarla.
- Usa la palabra clave
val
para definir una variable que sea de solo lectura, en la que el valor no puede cambiar una vez que se asigne. - Usa la palabra clave
var
a fin de definir una variable que sea mutable o modificable. - En Kotlin, se prefiere usar
val
en lugar devar
cuando sea posible. - Para declarar una variable, comienza con la palabra clave
val
ovar
. Luego, especifica el nombre de la variable, el tipo de datos y el valor inicial. Por ejemplo:val count: Int = 2
. - Con la inferencia de tipo, omite el tipo de datos en la declaración de variable si se proporciona un valor inicial.
- Algunos tipos comunes de datos de Kotlin incluyen:
Int
,String
,Boolean
,Float
yDouble
. - Usa el operador de asignación (
=
) para asignar un valor a una variable durante la declaración de la variable o cuando se actualiza la variable. - Solo puedes actualizar una variable que se haya declarado como variable mutable (con
var
). - Usa el operador de incremento (
++
) o el operador de disminución (--
) para aumentar o disminuir el valor de una variable de número entero en 1, respectivamente. - Usa el símbolo
+
para concatenar strings. También puedes concatenar variables de otros tipos de datos, comoInt
yBoolean
, aStrings
.