sábado, 19 de noviembre de 2022

Kotlin Basico 08. Arrays

8. Arrays

Las arrays (o arreglos) son secuencias de datos, del mismo tipo e identificados por un nombre común. Para hacerlo más fácil de entender imaginemos que tenemos que almacenar los 7 días de la semana, podríamos crear 7 variables Strings o almacenarlas todas en una sola array.

fun main(args: Array<String>) {
val weekDays = arrayOf("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")
}

Ahora la variable weekDays contiene todos los días de la semana. Ahora para acceder a cada uno de los valores, lo haremos a través de la posición. Por ejemplo, imaginemos un edificio, cada valor se almacena en una planta, por lo que el primer valor estará en la posición 0, el segundo en la 1 y así con cada uno de ellos. Recordar que se empieza en la posición 0.

Entonces podremos acceder a cada uno de los valores gracias a la función get() que nos devolverá el valor de dicha posición.

fun main(args: Array<String>) {
val weekDays = arrayOf("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo)
println(weekDays.get(0))
println(weekDays.get(1))
println(weekDays.get(2))
println(weekDays.get(3))
println(weekDays.get(4))
println(weekDays.get(5))
println(weekDays.get(6))
}

Esto nos pintará los días de la semana (posiciones de la 0 a la 6). Si pusiéramos en el get una posición que no tiene, por ejemplo, la 7 nos daría una excepción al ejecutarse la aplicación ArrayIndexOutOfBoundsException, y es por ello por lo que al trabajar con arrays debemos tener bien claro el tamaño de la array.

Para evitar ese tipo de problemas podemos usar la función size, que nos devolverá el tamaño de dicha array.

fun main(args: Array<String>) {
val weekDays = arrayOf("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")
println(weekDays.get(0))
println(weekDays.get(1))
println(weekDays.get(2))
println(weekDays.get(3))
println(weekDays.get(4))
println(weekDays.get(5))
println(weekDays.get(6))
if(weekDays.size >= 8){
println(weekDays.get(7))
}else{
println("no tiene más parámetros la array")
   }
}

Si ejecutamos dicho código no entrará en el if porque el tamaño de la array es de 7 (No es lo mismo tamaño que posición), por lo que nos pintará «no tiene más parámetros en la array».

Como había dicho al principio del post, las array tienen una serie de limitaciones, entre ellas que tienen que tener un tamaño fijo y será el número de valores que le asignemos al instanciarla, eso significa que siempre va a tener un tamaño de 7, y no podremos añadir más datos, pero si cambiarlos a través de la función set().

weekDays.set(0, "Horrible lunes") //Contenía Lunes
weekDays.set(4, "Por fin viernes") //Contenía Viernes

La función set() recibe dos parámetros, el primero es la posición a la que queremos acceder y el segundo es el nuevo valor a reemplazar. Hay que tener en cuenta que el valor que le mandemos debe ser del mismo tipo, por ejemplo, esta array son de Strings, por lo que no podemos pasar un Int.

Recorriendo Arrays

Ahora que ya conocemos un poco más que es una array y como trabajar con ellas, vamos a ver como recorrerlas.

Aunque podríamos hacerlo como hicimos arriba, hay modos más rápidos y óptimos, el bucle for(). Este bucle nos permite entre otras, recorrer la array entera, posición por posición y acceder a cada uno de los parámetros que contiene. Vamos a volver a pintar los 7 días de la semana con este método.

fun main(args: Array<String>) {
val weekDays = arrayOf("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")
for (posicion in weekDays.indices){
println(weekDays.get(posicion))
   }
}

Mucho menos código ¿verdad? Vamos a ver qué es lo que hemos hecho.

El for necesitará una variable, en este caso «posición» que irá teniendo el valor de cada una de las posiciones de la array. Su funcionamiento es muy sencillo, cuando pasa por el for por primera vez, tendrá valor 0, entonces comprueba el tamaño de weekDays y si es mayor, entra a la función, hace lo que le pidamos (en este caso pintar en la posición de la variable) y vuelve al inicio, así hasta llegar a 6 que será la última posición de la array.

También el for nos permite sacar tanto el índice como el valor directamente, para ello haríamos lo siguiente.

fun main(args: Array<String>) {
val weekDays = arrayOf("Lunes", "Martes", "Miércoles", "Jueves", "Viernes", "Sábado", "Domingo")
for ((posicion, valor) in weekDays.withIndex()) {
println("La posición $posicion contiene el valor $valor")
   }
}

Y dicho for nos devolvería lo siguiente

 

Si por el contrario solo os interesa el contenido podríamos hacer directamente un for in sin acceder a la posición, solo al contenido.

for (weekDay in weekDays) {
println(weekDay)
}

Devolviéndonos la lista de días de la semana.

No hay comentarios:

Publicar un comentario

Gracias por vuestros aportes.