Kotlin es un lenguaje de programación moderno que compila a bytecode Java. Es gratuito y de código abierto, y promete hacer que la codificación para Android sea aún más divertida.
En el artículo anterior, aprendió sobre variables, tipos simples, matrices, comentarios e inferencia de tipos en Kotlin. En este tutorial, continuaremos aprendiendo el idioma al observar la nulabilidad, los bucles y las condiciones en Kotlin.
Si eres un programador de Android, debes haber encontrado el infame Excepción de puntero nulo
Errores en tu aplicación. Esto sucede cuando intenta llamar a un método o leer una propiedad de una referencia de objeto que es nulo
.
La buena noticia es que Kotlin puede ayudarnos a evitar este tipo de error porque es un lenguaje seguro nulo. Eso significa que las variables no pueden tener el valor nulo a menos que usted declare explícitamente que su tipo es anulable. En otras palabras, por defecto, los tipos no pueden ser nulos. Veamos cómo esta característica de Kotlin puede ayudarnos a evitar errores en nuestro código..
nombre val: String = null // no compilará
Como se puede ver arriba, si asignamos nulo
al nombre
Variable, el compilador se quejará. Para que el compilador permita la asignación, declare el nombre como un nullable agregando ?
despues del tipo.
nombre de val: String? = null // compilará name = "Chike" // el nuevo valor es "Chike"
Tenga en cuenta que si ?
se inserta después de cualquier nombre de tipo, hemos indicado explícitamente al compilador que el valor del tipo puede almacenar una referencia de objeto o puede ser nulo
-es anulable Aquí, lo hicimos con la Cuerda
tipo, pero funciona igual con En t?
, Byte?
, Largo?
, Mi clase?
, y así.
?.
Aprendamos más sobre cómo funciona la seguridad nula en Kotlin con un operador llamado operador de llamada segura ?.
.
var nombre: String? = null print (name.length) // no compilará
El código anterior no se compilará porque Kotlin es un lenguaje seguro para nulos. La variable nombre
se le asigna el valor nulo
. Ahora, invocando la propiedad. longitud
en esa variable dispararía una Excepción de puntero nulo
error en Java. Pero el compilador de Kotlin no permitirá la invocación de esta propiedad porque la variable podría ser nulo
. El compilador no nos permitirá hacer algo que pueda generar un Excepción de puntero nulo
!
val v: String? = null print (v? .length) // compilará e imprimirá "null"
Ahora, agregando el operador de llamada segura ?.
a la variable antes de invocar la propiedad, hemos indicado explícitamente al compilador que invoque la propiedad solo si el valor no es nulo
. Si el valor es nulo
, el compilador utilizará la cadena "nulo"
como el valor para nosotros. Esto funciona también para métodos y no solo para propiedades..
Cuando se llama a un método de un nullable, el tipo de retorno también será nullable. Así, por ejemplo, el tipo de retorno de la v? .length
expresión cuando v
es nullable será En t?
.
val v: String? = null val len: Int? = v? .length print (len) // compilará e imprimirá "null"
Para omitir la comprobación de nulabilidad por el compilador Kotlin, podemos reemplazar el ?.
operador con !!.
. Esto no se recomienda, sin embargo, debido a la alta probabilidad de obtener Excepción de puntero nulo
errores si se usa.
val v: String? = null val len: Int? = v !!. length print (len) // activa un error NullPointerException
?:
Este operador ?:
se llama el operador Elvis (porque su forma se parece a la cabeza de Elvis). Se utiliza para proporcionar un valor alternativo para la variable si es nulo
.
val username = nulo val name: String = username?: "No name" print (name) // compilará e imprimirá "No name"
Aquí, el compilador asigna la cadena. "Sin nombre"
a la variable nombre
, porque el primer nombre de usuario de valor es nulo
. Si el primer valor no fuera nulo
, entonces ese valor sería asignado a la variable en su lugar.
Kotlin tiene tiempo, do-while y para bucles..
mientras
LazoUna declaración de repetición nos permite especificar que el código debe repetir una acción mientras que alguna condición sigue siendo verdadera.
Así que en Kotlin, usando el mientras
Loop es igual que en otros lenguajes como Java..
while (condición) // ejecuta el código aquí while (combustible> 5) driveMeAroundLagos ()
Mientras la condición sea verdadera, se ejecutará el código dentro de las llaves o el cuerpo del bucle. Si la condición es falsa, entonces el código no se ejecutará. En nuestro ejemplo anterior, una vez que la variable de combustible se convierte en menos de 5 litros, la condición se vuelve falsa y luego el ciclo termina. En otras palabras, driveMeAroundLagos ()
método de ejecución se detiene.
hacer ... mientras
LazoKotlin también tiene la hacer ... mientras
construcción de bucle.
do // ejecuta el código aquí while (condición)
Esto es similar a la mientras
declaración. En el bucle while, el programa prueba la condición del bucle al comienzo del bucle antes de ejecutar el cuerpo del bucle. Si la condición es falsa, el cuerpo no se ejecuta. Pero el hacer mientras
bucle prueba la condición después de ejecutar el cuerpo del bucle. Esto significa que el cuerpo es ejecutado al menos una vez..
para
LazoUNA para
bucle es una declaración de repetición que nos permite recorrer objetos mientras una condición dada es verdadera.
para (valor en rango) // Ejecutar código
En Kotlin, el para
la construcción en bucle funciona con iteraciones sobre rangos, colecciones u otros iterables (explicaré más sobre esto en la próxima publicación). Para los bucles trabajar junto con el en
operador, que se utiliza para determinar si un valor está presente en un rango determinado.
para (a en 1… 5) print ("$ a") // imprimirá 1 2 3 4 5
En el código anterior, estamos iterando en un rango cerrado del 1 al 5 e imprimiendo cada valor en el rango.
Podemos usar el conIndex ()
función o la índices
propiedad en una matriz para iterar sobre una matriz donde necesitamos el índice para cada elemento.
conIndex ()
FunciónPodemos iterar sobre una matriz para acceder al índice de cada elemento llamando al conIndex ()
función en la matriz, porque la conIndex ()
función devuelve un iterable de IndexedValue
Tipo para cada elemento. Esto nos permite acceder tanto al índice como al valor de cada elemento..
val numbersArray = intArrayOf (1,2,3,4,5) para ((índice, valor) en numbersArray.withIndex ()) print ("$ valor de índice de índice es $ valor \ n")
El código de arriba imprimirá el resultado a continuación:
0 el valor del índice es 1 1 el valor del índice es 2 2 el valor del índice es 3 3 el valor del índice es 4 4 el valor del índice es 5
índices
PropiedadAdemás, podemos usar el índices
propiedad en la matriz. Esto devolverá solo el rango de índices válidos para la matriz.
val numbers1 = intArrayOf (1,2,3,4,5) para (index in numbers1.indices) print ("$ el valor del índice del índice es $ numbers1 [index] \ n")
El código anterior producirá el mismo resultado que el ejemplo anterior. Aquí también puede ver que podemos usar el índice para acceder a un elemento de matriz, de manera similar a otros lenguajes de programación como Java.
Kotlin tiene tres tipos de estados de condición: el Si
, si ... otra cosa
, y cuando
declaraciones.
Si
DeclaraciónUn Si
La sentencia ejecuta algún código si una condición es verdadera, o simplemente la omite si la condición es falsa. Nada especial aquí: Si
Las declaraciones funcionan de manera similar a como lo hacen en la mayoría de los otros lenguajes de programación, incluido Java.
número val = 20 si (número% 2 == 0) print ("$ number es divisible por 2") // 20 es divisible por 2
También podemos verificar si una variable es de un tipo particular usando el es
palabra clave.
if (número es Int) imprimir ("$ número es un número entero")
si ... otra cosa
Declaraciónlos si ... otra cosa
realiza una acción si la condición es verdadera y realiza una acción diferente si la condición es falsa.
número val = 13 si (número% 2 == 0) imprimir ("$ número es divisible por 2") else imprimir ("número $ no es divisible por 2") // 13 no es divisible por 2
Una característica importante que distingue a la si ... otra cosa
Una declaración en Kotlin de otros lenguajes de programación como Java es la capacidad de asignar una variable del valor devuelto del si ... otra cosa
declaración. Esto es posible porque un si ... otra cosa
La declaración se puede usar no solo como una declaración, sino también como una expresión en Kotlin.
número val = 13 resultado val = si (número% 2 == 0) "$ número es divisible por 2" de lo contrario "$ número no es divisible por 2" imprimir (resultado) // 13 no es divisible por 2
En el código anterior, asignamos la resultado
variable con un Cuerda
objeto basado en la condición de la si ... otra cosa
declaración. Tenga en cuenta que esto solo devolverá la última instrucción en un bloque de condición particular y también que no puede usar un Si
sin un más
como una expresión.
resultado val = if (número% 2 == 0) "Divisible por 2" "El número es $ número" // solo se devuelve esta cadena si se ejecuta else "No divisible por 2" "El número es $ número"
cuando
ExpresiónKotlin introdujo el cuando
construir como un reemplazo para lo familiar cambiar
declaración que tenemos en diferentes lenguajes de programación como C ++, Java, etc.. cuando
Es más conciso y tiene características más poderosas que las cambiar
declaración con la que podría estar familiarizado.
los cuando
La declaración realiza diferentes acciones basadas en los valores posibles de una constante de tipo En t
, Cuerda
, Byte
, Corto
, o cualquier otro objeto.
fun guessTheNumber (number: Int) when (number) 1 -> println ("number is 1") 2 -> println ("number is 2") 3 -> println ("number is 3") else -> println ("el número no es ni 1, 2 ni 3")
En el código anterior, pasamos la función. guessTheNumber ()
un parámetro numérico (veremos las funciones de Kotlin en una publicación posterior). los cuando
expresión luego comprueba si alguna de las ramas coincide con el valor de número
y luego ejecuta la acción en esa rama. Si ninguna de las ramas era una coincidencia, la más
se ejecuta rama.
Otra variante de la cuando
expresión no requiere ningún argumento, como en el siguiente ejemplo.
divertido guessTheNumber (número: Int) cuando número == 1 -> println ("número es 1") número == 2 -> println ("número es 2") número == 3 -> println ("número es 3 ") else -> println (" el número no es 1, 2 o 3 ")
Si queremos ejecutar más de una acción en una rama, necesitamos envolver las acciones entre llaves .
número val = 2 cuando (número) 1 -> println ("número es 1") 2 -> // bloque de código ejecutado println ("número es 2") println ("es un número par") 3 -> println ("el número es 3")
Además, podemos combinar valores de prueba en una sola rama..
número val = 2 cuando (número) 1, 2 -> println ("número es 1 o 2") // número es 1 o 2 3 -> println ("número es 3")
Aquí, la primera rama se ejecuta porque estamos probando un valor de 1 o 2.
En este tutorial, aprendió sobre la nulabilidad, los bucles y las condiciones en el lenguaje de programación Kotlin. En el siguiente tutorial de la serie Kotlin From Scratch, aprenderá sobre los rangos y las API de colecciones en Kotlin. Te veo pronto!
Para obtener más información sobre el idioma Kotlin, recomiendo visitar la documentación de Kotlin. O echa un vistazo a algunos de nuestros otros tutoriales de Kotlin aquí en Envato Tuts+!