martes, 30 de octubre de 2018

Arrays en Go: fundamentos

Los programas son capaces de manejar mucha información, y necesitaremos guardar y gestionar conjuntos de datos. Será muy habitual leer de un fichero o de una base de datos una colección de registros (por ejemplo de contactos) y mostrar en pantalla todos ellos, seleccionar alguno, consultarlo o modificarlo, y que se conserve en dicha colección.


Si una variable era como un cajón en la memoria en donde guardábamos un dato simple, un array es un archivador lleno de cajones del mismo tipo.

Un array se define como una variable, pero le damos una dimensión o tamaño mediante el uso de los corchetes ([tamaño]). Cuando se crea el array, por defecto contendrá el valor cero acorde al tipo de dato. Después, se puede consultar o modificar uno de los datos refiriéndonos a la variable y al índice utilizando los corchetes ([índice]). Un índice es un identificador del cajón dentro del archivador, comenzando siempre desde cero, secuencialmente, hasta el último (tamaño menos uno (n - 1)).

package main

import "fmt"

func main() {

   // Creacion del array, reservando primero
   // y asignando despues
   var nombre [3]string   // Reserva 3 elementos

   nombre[0] = "Rafael"   // Primer elemento del array
   nombre[1] = "Eduardo"  // Segundo elemento del array
   nombre[2] = "Nerea"    // Tercer elemento del array

   fmt.Printf("Primer nombre: %v\n", nombre[0])
   fmt.Printf("Segundo nombre: %v\n", nombre[1])
   fmt.Printf("Tercer nombre: %v\n", nombre[2])
}

En este ejemplo, primero creamos el array, reservando 3 elementos, con valores cero (en el caso de un string, el valor cero es una cadena vacía). Después, vamos asignando, uno a uno, los valores en cada elemento del array, referenciándolos mediante el índice, el cual va desde la posición cero (primer elemento) hasta la posición dos (tercer y último elemento). Por último, visualizamos en pantalla cada uno de los valores, referenciándolos mediante el índice correspondiente.

También es posible crear el array y asignar todos los valores en un mismo paso.

package main

import "fmt"

func main() {

   // Creacion y asignacion del array
   edad := [3]int{47, 48, 17}

   fmt.Printf("Primera edad: %v\n", edad[0])
   fmt.Printf("Segunda edad: %v\n", edad[1])
   fmt.Printf("Tercera edad: %v\n", edad[2])
}

En la primera línea declaramos, por inferencia, la variable edad, definimos el tamaño del array ([3]), su tipo (int) y la asignación de un array con los valores correspondientes.

La representación de un array con valores se realiza mediante llaves, encerrando los valores separados por comas ({valor1, valor2, ...}).

Características particulares de un array

La principal característica de un array es que permite almacenar una colección de datos del mismo tipo, y acceder a cada uno de estos datos para su consulta o modificación.

Sin embargo, la principal limitación de un array es que, una vez declarado, su tamaño no puede variar (tamaño fijo). Esto nos obliga a saber de antemano el tamaño del array o trabajar con un tamaño fijo para siempre.

Existen dos características particulares de una colección en Go: la longitud y la capacidad.

La longitud se refiere al número de elementos utilizados de la colección, mientras que la capacidad se refiere al número total de elementos de la colección. En el caso de un array, ambos conceptos son equivalentes, y coincide con el tamaño del array.

Nota: Más adelante, en este tutorial, aprenderemos otro tipo de colección llamado slices, en donde estas características tienen un sentido más profundo y concreto.

El lenguaje Go proporciona dos funciones para conocer la longitud y la capacidad de una colección: len() y cap(). En ambas funciones se especifica el nombre de la colección entre paréntesis.

package main

import "fmt"

func main() {

   // Creacion y asignacion del array
   edad := [3]int{47, 48, 17}

   fmt.Printf("Primera edad: %v\n", edad[0])
   fmt.Printf("Segunda edad: %v\n", edad[1])
   fmt.Printf("Tercera edad: %v\n", edad[2])
   fmt.Printf("Contenido del array: %v\n", edad)
   fmt.Printf("Tamaño del array: %v\n", len(edad))
   fmt.Printf("Capacidad del array: %v\n", cap(edad))
}

El resultado será el siguiente:

$ go run arrays.go
Primera edad: 47
Segunda edad: 48
Tercera edad: 17
Contenido del array: [47 48 17]
Tamaño del array: 3
Capacidad del array: 3

Enlaces de interés

No hay comentarios:

Publicar un comentario