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 el es 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 que 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.
Continúa con el curso: Capítulo 10 – Listas en Kotlin
[…] el capítulo anterior hablamos sobre los arrays o arreglos y vimos todo el potencial que tenía, pero uno de los mayores inconvenientes era la limitación al […]
una pregunta como podría crear una función en una clase que reciba como parámetro un array ???
y como puedo hacer la llamada a esta función en mi método main???
Buenas @BANANNA_POTATO_NAH
La función que reciba una array sería así:
fun workingWithArray(myArray: Array) {
//trabajamos con la array que recibimos
}
Y para llamarla desde el método main simplemente llamamos a la función
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
workingWithArray(weekDays) //Le pasamos una array de días de la semana
}
Saludos
@Aris muchas gracias por el curso.
Lo estoy siguiendo y e aprendido mucho.
Hola, tengo un problema, lo que quiero hacer es declarar un arreglo vacio y mediante un bucle llenarlo de datos, ¿Como se declara un arreglo vacio?
Buenas, simplemente haz:
«val myArray = arrayOf(String)»
Cambiando String por el tipo de datos del que quieras rellenar la lista 🙂
De momento lo sigo bien porque procedo de los .bat de ms-dos, de los batch de linux, el C++, el python y otros. Esto parece de la familia salvo diferencias sintácticas; no obstante ya empiezo a ver algunas novedades con respecto a lo antiguo y ahora tendré que poner más atención. Me está ilusionando. Gracias Aris.
Si se necesita declarar un array con el numero de elementos fijo como se podría realizar?
por ejemplo en java sería algo así:
Object[] data = new Obect[10];
Cual sería su equivalente en java?
Buenas, puedes hacer así:
val array = Array(4) {«MyArray»}
String lo puedes sustituir por el tipo de variable que quieras, 4 es el número de valores que soporta la array, y «MyArray» es el texto que inicializará la array en cada valor. Si por ejemplo quieres una array de 8 valores, de tipo String y que empiece vacía, tendrías que hacer:
val array = Array(8) {«»}
Un saludo!
Hola.
Como se recorre un vector que no tiene valores cargados, osea, esta Nulo?.
Lo declare asi en mi clase: var jugadores: Array?)
Saludos!
Si es nulo no se podrá recorrer
Pues Aris ya que animas a pedir que, te pidamos ejercicios, yo te los pido. El poder contar con ejercicios redactados por ti sería un auténtico lujo. Sé también el trabajo que supone esa tarea pero como te decía una sección con ejercicios y soluciones de cada capítulo sería genial sobre todo cuando la cosa se empiece a complicar.
Yo por ejemplo al iniciar desde 0 en programación (tuve un pequeño acercamiento a Python) pero quizás no sé «ponerme» ejercicios, no sé si me entiendes.
Genial! Me lo apunto para ver si le puedo echar un rato!
Mil gracias