que-es-una-struct

Qué son y cómo usar los Structs

Los STRUCT son estructuras de datos que permiten agrupar variables de diferentes tipos en una sola entidad.

Si habíamos dicho que las variables son como cajas, las STRUCTS son como una fiambrera un plato combinado. Son contenedores, que tiene dentro otras cajas (para que no se mezclen los guisantes con el arroz).

  • Tiene otros departamentos dentro
  • Cada departamento tiene el tamaño necesario
  • Juntos forman un único contenedor

curso-programacion-que-es-struct

Esta fiambrera, es tu Struct

Por ejemplo, imagina que tienes que almacenar datos de personas. Para el ejemplo, una persona tendrá nombre, fecha de nacimiento y email. Es lógico que tenga una agrupación de variables que me permita trabajar con ellas de forma conjunta.

Persona
  • stringdni
  • datefechaNacimiento
  • stringemail

Eso es precisamente una STRUCT, una agrupación de variables que creamos para trabajar con ellas a la vez. De esta forma es mucho más cómodo que tener las variables sueltas.

Los STRUCT son útiles cuando necesitas agrupar variables relacionadas, pero no requieres la complejidad y flexibilidad de los objetos.

A diferencia de los objetos, los STRUCT generalmente se utilizan para agrupar datos simples. Además, carecen de funcionalidades o métodos asociados, únicamente contienen datos.

Ejemplos de structs en distintos lenguajes

Casi todos los lenguajes disponen de algún tipo de agrupación de variables, que puede llamarse Struct o de otras formas pero, básicamente es lo mismo).

Lógicamente la sintaxis va a depender del lenguaje de programación que estemos utilizando. Vamos a ver ejemplos en algunos lenguajes populares,

struct Persona
{
    public string Nombre;
    public int Edad;
    public double Altura;
}

// Acceso a elementos de una estructura
Persona persona;
persona.Nombre = "Luis";
persona.Edad = 25;
var altura = persona.Altura;
struct Persona
{
    std::string Nombre;
    int Edad;
    double Altura;
};

// Acceso a elementos de una estructura
Persona persona;
persona.Nombre = "Luis";
persona.Edad = 25;
double altura = persona.Altura;
const persona = {
    nombre: "Luis",
    edad: 25,
    altura: 1.75
};

// Acceso a elementos de una estructura
persona.nombre = "Luis";
persona.edad = 25;
let altura = persona.altura;
class Persona:
    def __init__(self, nombre, edad, altura):
        self.nombre = nombre
        self.edad = edad
        self.altura = altura

# Acceso a elementos de una estructura
persona = Persona("Luis", 25, 1.75)

En los ejemplos anteriores, creamos estructuras que representan información sobre una persona, incluyendo su nombre, edad y altura.

La sintaxis varía ligeramente entre los lenguajes, pero el concepto es el mismo: definir una entidad que agrupe datos relacionados.

Funcionamiento interno Avanzado

Internamente en la mayoría de los lenguajes de programación un STRUCT se almacena en la memoria de una manera contigua. Cuando se crea una instancia de un STRUCT, el sistema asigna un bloque de memoria que puede contener todos sus miembros.

Por ejemplo, si tienes un STRUCT llamado Persona con miembros para el nombre, fecha de nacimiento y email, se reservará memoria para almacenar estos datos consecutivamente, en el orden en que se declararon.

Cuando accedes a un miembro de un STRUCT, el sistema puede calcular directamente su posición en la memoria sumando un desplazamiento (offset) desde la dirección base del STRUCT.

Debido a que los miembros de un STRUCT están almacenados de manera contigua el acceso a estos datos es muy eficiente. Es simplemente una operación de acceso a memoria con un offset-

Por otro lado, en muchos lenguajes las STRUCT son de tipo valor (no referencias). Esto significa que se crea una copia del STRUCT y se pasa esa copia a la función. Dependiendo del tamaño del STRUCT, esto puede tener implicaciones en el rendimiento y en la cantidad de memoria utilizada.

Por lo que conviene que sepáis los detalles de implementación en vuestro lenguaje particular. Pero tampoco os rayéis demasiados, en la mayoría de lenguajes el compilador toma decisiones y puede tratar referencias como valores, o al revés, si entiende que es más eficiente.