html
7.2 Declaración y uso de structs en Solidity
En Solidity, los structs son estructuras de datos que permiten agrupar múltiples variables bajo un mismo nombre, facilitando la organización y manipulación de conjuntos complejos de datos. Los structs son particularmente útiles cuando queremos agrupar diferentes tipos de datos que están relacionados entre sí en una sola entidad.
Declaración de Structs
Para declarar un struct en Solidity, utilizamos la palabra clave struct, seguida del nombre del struct y un conjunto de variables que lo componen entre llaves {}
. A continuación, se muestra un ejemplo básico de declaración de un struct:
struct Persona { string nombre uint edad string direccion }
En este ejemplo, hemos definido un struct llamado Persona
que contiene tres campos: nombre
(de tipo string
), edad
(de tipo uint
) y direccion
(también de tipo string
).
Uso de Structs
Una vez que hemos declarado un struct, podemos utilizarlo en nuestro contrato para definir variables de tipo struct, crear instancias del struct, y acceder o modificar sus campos. Veamos cómo se hacen estas operaciones con un ejemplo práctico.
Definiendo e Inicializando Structs
En un contrato Solidity, podemos definir variables de tipo struct y crear instancias de structs de varias maneras. Aquí mostramos cómo se hace:
pragma solidity ^0.8.0 contract MiContrato { // Declaración del struct Persona struct Persona { string nombre uint edad string direccion } // Definiendo una variable de tipo struct Persona public persona1 // Creando y asignando un struct en una función function crearPersona() public { // Inicializando el struct directamente persona1 = Persona({ nombre: Juan Perez, edad: 30, direccion: Calle Falsa 123 }) } // Otra manera de inicializar el struct function crearOtraPersona() public { Persona memory persona2 persona2.nombre = Maria Lopez persona2.edad = 25 persona2.direccion = Avenida Siempre Viva 456 // Hacemos algo con persona2 en la función } }
En este ejemplo, hemos declarado el struct Persona
y creamos una variable pública persona1
de tipo Persona
. Dentro de la función crearPersona
, inicializamos persona1
con valores específicos. También mostramos otra forma de crear e inicializar una instancia del struct dentro de una función utilizando memoria (memory).
Accediendo y Modificando Structs
Podemos acceder y modificar los campos de un struct utilizando el operador punto (dot operator). Aquí se muestra cómo se hace esto:
pragma solidity ^0.8.0 contract MiContrato { struct Persona { string nombre uint edad string direccion } Persona public persona1 function crearPersona() public { persona1 = Persona({ nombre: Juan Perez, edad: 30, direccion: Calle Falsa 123 }) } // Accediendo a los campos del struct function obtenerNombre() public view returns (string memory) { return persona1.nombre } // Modificando los campos del struct function actualizarEdad(uint nuevaEdad) public { persona1.edad = nuevaEdad } }
En este ejemplo, hemos añadido dos funciones adicionales: obtenerNombre
y actualizarEdad
. La función obtenerNombre
nos permite acceder al campo nombre
del struct persona1
, y la función actualizarEdad
nos permite modificar el campo edad
de persona1
.
Structs Anidados
Solidity también permite anidar structs dentro de otros structs. Esto es útil cuando queremos modelar relaciones más complejas entre datos. Veamos un ejemplo de structs anidados:
pragma solidity ^0.8.0 contract MiContrato { // Struct Direccion struct Direccion { string calle string ciudad string pais } // Struct Persona con Direccion anidada struct Persona { string nombre uint edad Direccion direccion } Persona public persona1 function crearPersona() public { persona1 = Persona({ nombre: Carlos Ramirez, edad: 40, direccion: Direccion({ calle: Boulevard de los Sueños, ciudad: Ciudad Ejemplo, pais: Pais Ejemplo }) }) } // Accediendo a campos de un struct anidado function obtenerCiudad() public view returns (string memory) { return persona1.direccion.ciudad } }
En este ejemplo, hemos definido un struct Direccion
y un struct Persona
que tiene un campo de tipo Direccion
. La función crearPersona
inicializa una instancia de Persona
con una dirección anidada. La función obtenerCiudad
muestra cómo acceder a un campo del struct anidado.
Conclusión
En resumen, los structs en Solidity son una herramienta poderosa para modelar y manejar datos complejos. Nos permiten organizar mejor nuestro código y mantenerlo limpio y estructurado. Al comprender su declaración, inicialización, acceso y modificación, así como la capacidad de anidar structs, podemos crear contratos inteligentes más robustos y eficientes.
Deja una respuesta