Un struct es una colección de variables de diferentes tipos agrupadas bajo un único nombre. Es útil para modelar entidades complejas como usuarios, productos, registros, entre otros, proporcionando claridad y reutilización del código.
struct NombreEstructura {
tipo nombreCampo1;
tipo nombreCampo2;
...
}
pragma solidity ^0.8.0;
contract EjemploStruct {
// Definición de un struct
struct Usuario {
uint id;
string nombre;
uint edad;
}
// Variable de tipo Usuario
Usuario public usuario;
// Asignación de valores al struct
function setUsuario(uint _id, string memory _nombre, uint _edad) public {
usuario = Usuario(_id, _nombre, _edad);
}
}
contract GestionUsuarios {
struct Usuario {
uint id;
string nombre;
address wallet;
}
mapping(uint => Usuario) public usuarios;
uint public totalUsuarios;
// Crear un nuevo usuario
function agregarUsuario(string memory _nombre) public {
totalUsuarios++;
usuarios[totalUsuarios] = Usuario(totalUsuarios, _nombre, msg.sender);
}
// Consultar un usuario
function consultarUsuario(uint _id) public view returns (Usuario memory) {
return usuarios[_id];
}
}
contract Marketplace {
struct Producto {
uint id;
string nombre;
uint precio;
address propietario;
}
mapping(uint => Producto) public productos;
uint public totalProductos;
// Registrar un producto
function registrarProducto(string memory _nombre, uint _precio) public {
totalProductos++;
productos[totalProductos] = Producto(totalProductos, _nombre, _precio, msg.sender);
}
// Consultar un producto
function consultarProducto(uint _id) public view returns (Producto memory) {
return productos[_id];
}
}
contract SistemaVotacion {
struct Voto {
address votante;
bool opcion;
uint tiempo;
}
Voto[] public votos;
// Registrar un voto
function votar(bool _opcion) public {
votos.push(Voto(msg.sender, _opcion, block.timestamp));
}
// Consultar el total de votos
function totalVotos() public view returns (uint) {
return votos.length;
}
}
Los structs se pueden almacenar en arrays para mantener una colección ordenada.
Usuario[] public listaUsuarios;
function agregarUsuario(uint _id, string memory _nombre, uint _edad) public {
listaUsuarios.push(Usuario(_id, _nombre, _edad));
}
Los structs se utilizan comúnmente en mappings para asignar entidades a claves específicas.
mapping(address => Usuario) public usuarios;
function registrarUsuario(string memory _nombre, uint _edad) public {
usuarios[msg.sender] = Usuario(block.timestamp, _nombre, _edad);
}
1. Organización: Facilitan la agrupación de datos relacionados.
2. Legibilidad: Hacen que el código sea más claro y fácil de entender.
3. Reutilización: Se pueden usar en múltiples partes del contrato y en funciones.
Para más información sobre structs en Solidity, consulta la documentación oficial de Solidity.
Jorge García
Fullstack developer