Fundamentos

Arrays – Tipos de datos secuenciales

Básicos Definiciones Fundamentos

En primer lugar y antes de continuar con otras nuevas estructuras de control iterativas necesitamos introducir el concepto de qué son los arrays. Definimos un array, también conocido como vector o arreglo, a un tipo de datos utilizado para guardar una serie de elementos. Básicamente, es una lista de elementos que están agrupados, para que podamos entenderlo de forma sencilla.

Dependiendo del lenguaje de programación que estemos utilizando, los arrays básicos podrán tener elementos del mismo tipo o diferenciados. Así pues, empezaremos a definirlos mejor con un pequeño ejemplo gráfico.

Definición gráfica

0123456789
ElemElemElemElemElemElemElemElemElemElem

Hemos montado una pequeña tabla de ejemplo. En ella tenemos una primera fila que está representando a los índices del array, y una segunda fila que está representando a los elementos contenidos en el array.

Los índices del array nos servirán para acceder al elemento que queramos en cada momento. En cuanto a los elementos del array, contendrán la información que queremos almacenar y que también puede ser un nuevo array (con lo que tendríamos arrays multidimensionales o matrices, que veremos más abajo).

Cuidado con la definición

Debemos tener claro que, dependiendo del lenguaje de programación en el que estemos, la definición de un array cambiará, los métodos con los que podemos operar y acceder a ellos cambiarán y, en definitiva, habrá que saber muy bien cómo utilizarlos para no llevarnos sustos.

Especialmente en algunos lenguajes, su uso es más complejo. Nos tocaría definir inicialmente nuestro array, decirle exactamente el tamaño que va a tener, gestionar luego cómo aumentar o eliminar elementos del array, decirle el tipo de datos que va a tener, etc. Sin embargo, otros lenguajes de programación ya tienen interiorizadas las funciones básicas para operar con arrays y son mucho más sencillos.

Estudia bien el lenguaje escogido

Avanzado
¿Por qué tanta disparidad para definir una lista de elementos tan sencilla? Tenemos que analizar, bajo el punto de vista de la memoria finita de la que disponemos, lo que implica un array.

Utilicemos un ejemplo sencillo para la explicación, aunque muy simplificado. Para empezar, pensemos en un array de 10 números enteros. Estos números enteros ocupan un determinado espacio de memoria y, dentro del array, tendremos una serie de espacios de memoria ocupados para este array de 10 números.

Habrá lenguajes de programación que gestionen internamente la memoria en la que se guarda el array. Por desgracia, hay otros que no lo hacen tan fácilmente, así que, si añadimos un elemento al array, éste habrá crecido y quizá no haya memoria suficiente para ampliar el array porque está ocupada por alguna otra cosa. Igualmente, si ahora cambiamos los elementos de enteros a decimales, la memoria que ocupan es mayor y eso también se debe gestionar.

Por ello, hay que leer cuidadosamente cómo utiliza cada lenguaje de programación la definición de arrays, pues en ocasiones el programador debe estar más atento, o no, a lo que significa utilizarlos.

Así pues, quedémonos por ahora en que un array es una lista de elementos simplificando mucho y pensando un poco en que estamos aprendiendo tomando como base PHP. Pero si estuviéramos en otro tipo de lenguajes, como por ejemplo en C, tendríamos que tener muchas más cosas en cuenta.

A contar se empieza desde 0

Un detalle que puede que no se te haya pasado por alto en la tabla anterior es que el primer elemento tiene índice 0. Hay que ir acostumbrándose. En el mundo de la informática empezamos siempre a contar desde 0 y los arrays son el claro ejemplo de ello.

Entonces, ¿por qué se hace así? No he conseguido encontrar una explicación definitiva. Hay sitios donde se dice que es porque los ordenadores empiezan a contar desde el primer número, que es el cero. Otros que explican que a nivel matemático es más fácil, poniendo como ejemplo los años, pues el año 100 aún pertenece al siglo I porque no existe el año 0, por tanto se empezó con el año 1 y hasta no llegar al año 101 no se cambia al siglo II. Y en otros lugares, y apuesto más por ella, porque en binario empezamos contando por el 0, luego el 1 luego el 10, luego el 11, luego el 001, etc., siendo equivalente el primer número al 0.

Sea como sea, hay que empezar a acostumbrarse para evitar errores. Un joven programador podría ver el array de arriba, decir que tiene 10 elementos (verdad) y querer obtener el elemento de índice 10… pero este elemento no existe y el programa daría un error al intentar acceder a un elemento del array que no existe. Por tanto, mucho cuidado con estos detalles.

Pero también podemos tener índices no numéricos

También podemos utilizar índices no numéricos en nuestros arrays. Cuando nos pongamos a ver cómo utilizarlos en los lenguajes de programación, veremos que, si no definimos nada, cada uno de los elementos tiene un índice que empieza desde cero, como hemos visto. Sin embargo, también podemos definir en muchos lenguajes de programación nuestro propio índice, normalmente un string. Por consiguiente, veamos este ejemplo:

cerounodostrescuatrocincoseissieteochonueve
ElemElemElemElemElemElemElemElemElemElem

Igualmente, el array es el mismo, los elementos son iguales, pero los índices no son numéricos. Debido a ésto, al programador se le facilita el acceder a distintos elementos de un array en el que sabemos que hay un dato que se corresponde al elemento guardado. Por lo tanto, es algo así como una etiqueta que nombra a nuestro elemento (por ejemplo, un índice precio para un elemento de tipo decimal que es 29.95).

Los strings son arrays

Sí, lo son. ¿Un string es un array? ¿Cómo es eso? Parémonos un poco a pensarlo bien. Un string no deja de ser una lista de elementos (caracteres) agrupados. De ahí que cuando definimos los tipos básicos comentáramos que el tipo elemental era el carácter, pues el string es un caso especial de array. Fijémonos en el ejemplo de arriba con estos datos:

0123456789
PSICOLOGÍA

Por consiguiente, tenemos el string “PSICOLOGÍA” expresado de manera que parezca un array. Ciertamente, encaja a la perfección, pues como decimos, un string es una secuencia de caracteres agrupados y ordenados.

De hecho, en el futuro veremos que, gracias a ésto, podremos acceder directamente al, por ejemplo, elemento de índice 3 del string de ejemplo y obtendríamos una “C” como resultado.

Avanzado
Realmente en un string se almacenan más cosas en memoria, como por ejemplo un indicador para el final del propio string. Sin embargo, no es un uso práctico en los ejemplos básicos que queremos trabajar.

Arrays multidimensionales

También conocidos como matrices, tenemos la posibilidad de construir arrays multidimensionales. Es decir, un elemento de un array será un nuevo array, e incluso ese array puede tener otros elementos que sean arrays.

Como consecuencia de ésto, nos será muy útil para almacenar información de forma organizada. Por ejemplo, tenemos una lista de libros, cada libro tiene unas características y éstas, a su vez, pueden tener más. En primer lugar, veámoslo en pseudocódigo.

MI_LIBRO [
  --> Nombre
  --> AUTOR [
      --> Nombre
      --> País de nacimiento
      --> Año de nacimiento
  ]
  --> EDITORIAL [
      --> Nombre
      --> ISBN
  ]
  --> DATOS_ADICIONALES [
      --> LIBRERÍA [
          --> Nombre
          --> Localidad
      ]
      --> Fecha de adquisición
      --> Precio
  ]
  --> Leído
]

Aquí tenemos un array de nombre MI_LIBRO cuyo primer elemento (índice [0]) es el nombre del libro. Seguidamente, el segundo elemento (índice [1]) sería el autor, el cual es otro array que contiene el nombre (índice [0][0]), el país de nacimiento (índice [0][1]) y el año de nacimiento (índice [0][2]). A continuación del autor tenemos el editorial (índice [2]), otro array con nombre (índice [2][0]) e ISBN (índice [2][1]). Seguimos con los datos adicionales (índice [3]), otro array que tiene la librería (índice [3][0]) que a su vez es un array con el nombre (índice [3][0][0]) y localidad (índice [3][0][1]). Aún dentro de los datos adicionales encontramos la fecha de adquisición (índice [3][1]) y el precio (índice [3][2]). Finalmente, encontramos un elemento para saber si o hemos leído o no (índice [4]).

Puesto que visto gráficamente se ve mejor que explicado, especialmente gracias a la indentación, esperemos que no os haya sido muy complejo el ejemplo. Ten en cuenta que hemos utilizado el símbolo [ para abrir el array y el símbolo ] para cerrarlo por razones expresas, porque será una de las formas más comunes de representación que vamos a ver.

Resumen

Resumiendo, por pura definición, los arrays no tienen mucho más que decir. Mientras que será en su implementación y uso en nuestros programas donde, por una parte, veremos la cantidad de veces que vamos a utilizarlos. Y, por otra parte, veremos que siempre hay que tener cuidado con ellos para evitar errores.

Finalmente, en posteriores artículos veremos cómo trabajar con ellos en PHP y su utilización en las estructuras de control iterativas para recorrer todos sus elementos.

Deja una respuesta