Kotlin From Scratch Nulabilidad, Bucles y Condiciones

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.

1. Nulabilidad

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

El operador de llamada segura: ?.

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

El operador de Elvis: ?:

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.

2. Loops

Kotlin tiene tiempo, do-while y para bucles.. 

los mientras Lazo

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

los hacer ... mientras Lazo

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

los para Lazo

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

Iterando sobre una matriz de índice

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.

Utilizando la conIndex () Función

Podemos 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

Utilizando la índices Propiedad

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

3. Condiciones

Kotlin tiene tres tipos de estados de condición: el Si, si ... otra cosa, y cuando declaraciones. 

los Si Declaración

Un 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") 

los si ... otra cosa Declaración

los 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"

los cuando Expresión

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

Conclusión

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+!