7.2 Declaración y uso de structs

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.

AnteriorSiguiente

[mwai_chat]

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *