Tipos de Datos Estructurados
🧱 Tipos de Datos Estructurados
Los tipos de datos estructurados son construcciones que te permiten organizar y agrupar datos relacionados bajo una misma entidad. Son fundamentales para modelar conceptos complejos en tus contratos inteligentes.
Structs: Estructuras que agrupan campos con nombre y tipos diferentes.
Enums: Tipos que pueden contener uno de varios valores posibles predefinidos.
Tuplas: Colecciones ordenadas y de tamaño fijo que pueden contener elementos de diferentes tipos.
Arrays: Colecciones de elementos del mismo tipo con longitud fija.
1. Structs 🏗️
Las structs en Rust te permiten agrupar campos con nombres y tipos diferentes. Es como crear tu propio "molde" para agrupar datos relacionados.
rustCopiarEditarstruct Persona {
nombre: String,
edad: u32,
}
fn main() {
let persona = Persona {
nombre: String::from("Juan"),
edad: 30,
};
println!("{} tiene {} años 👤", persona.nombre, persona.edad);
}2. Enums 🎨
Los enums definen un tipo que puede ser uno de varios valores predefinidos. Son muy útiles para representar estados o variantes.
3. Tuplas 🔗
Las tuplas son colecciones ordenadas de tamaño fijo que pueden contener elementos de diferentes tipos. ¡Son perfectas para agrupar datos relacionados sin necesidad de nombres!
4. Arrays 📚
Los arrays son colecciones de elementos del mismo tipo con una longitud fija. Se usan cuando conoces la cantidad exacta de elementos y estos son del mismo tipo.
Contratos inteligentes ejemplo:
En esta ocasión vamos a crear un contrato independiente por cada tipo de dato de la siguiente manera.
Abrimos la consola en la ruta donde deseamos crear el proyecto y ejecutamos.
Borramos todo el código y ponemos lo siguiente:
Explicación del contrato
📌 Estructuras y Tipos del Contrato
1. Atributo #![no_std]
#![no_std]Indica que el contrato no utiliza la biblioteca estándar de Rust, lo que es común en entornos embebidos o en contratos inteligentes para reducir dependencias y adaptarse a restricciones de recursos.
2. Macros de Contrato
#[contract],#[contractimpl]y#[contracttype]Estas macros son proporcionadas por el soroban_sdk y se usan para marcar:#[contract]: Define la estructura principal del contrato.#[contractimpl]: Implementa la lógica de negocio del contrato.#[contracttype]: Declara tipos (enums o structs) que se utilizarán en la interfaz del contrato. Para más detalles, consulta la documentación de contratos Soroban.
3. Enum TaskStatus
TaskStatusDefine los posibles estados de una tarea:
Open(valor 0)InProgress(valor 1)Completed(valor 2)
Se deriva de
Clone,Debug,EqyPartialEqpara facilitar la clonación, la depuración y la comparación de valores.
4. Struct Task
TaskRepresenta una tarea y contiene:
id: u32: Identificador único de la tarea.description: String: Descripción de la tarea.status: TaskStatus: Estado actual de la tarea.assignee: Address: Dirección del usuario asignado a la tarea.
Addresses un tipo que representa direcciones de cuentas o contratos en Soroban. Más información en la documentación de Address.
5. Tipos del SDK
Env: Proporciona el entorno de ejecución del contrato, permitiendo el acceso a almacenamiento, logging y otras funciones. Consulta Env en la documentación de Soroban.String: Tipo de cadena adaptado a entornos no_std que se utiliza para manejar textos en el contrato. Más información en String en Soroban.
🛠 Funciones del Contrato
1. find_fruit
Descripción: Busca en un arreglo de 5 frutas (como cadenas) la que coincida con la cadena de entrada
fruity devuelve su posición (índice).Mecanismo:
Se crea un arreglo estático de frutas.
Se recorre el arreglo utilizando
enumerate(), que proporciona el índice y el elemento.Si se encuentra una coincidencia (usando
if), se retorna el índice.Si no hay coincidencia, se retorna
-1.
2. create_task
Descripción: Crea una nueva tarea con un identificador, descripción y usuario asignado. El estado inicial de la tarea se establece en
TaskStatus::Open.Mecanismo:
Se construye una instancia de la estructura
Taskcon los valores proporcionados.Se asigna el estado inicial de la tarea como abierta.
3. get_info
Descripción: Devuelve una tupla que contiene un mensaje y un número entero.
Mecanismo:
Se crea una cadena
"Ejemplo Simple".Se retorna junto a un entero fijo
123.
4. get_status_description
Descripción: Devuelve una cadena descriptiva según el estado de una tarea.
Mecanismo:
Se utiliza la estructura de control
matchpara evaluar el valor delTaskStatus.Según el caso (Open, InProgress, Completed), se retorna la cadena correspondiente:
"Abierta","En Progreso"o"Completada".
Contexto Teórico del
match: En Rust,matches similar a la instrucciónswitchde otros lenguajes, pero es más poderoso, permitiendo comparar contra patrones y asegurando que todos los casos sean tratados o manejados mediante un caso por defecto. Esto proporciona una forma segura y expresiva de controlar el flujo del programa.
📌 Resumen General
Este contrato inteligente demuestra:
Definición de Tipos Personalizados: Con el enum
TaskStatusy la estructuraTask, se modelan estados y tareas para un posible sistema de gestión.Búsqueda en Arreglos: La función
find_fruitmuestra cómo recorrer un arreglo de cadenas y buscar un elemento.Creación y Manejo de Estructuras: La función
create_taskcrea una tarea inicializada con un estado predeterminado.Uso de Tuplas y
match: La funciónget_infodevuelve información empaquetada en una tupla yget_status_descriptionutilizamatchpara retornar descripciones basadas en el estado.
Compilación del contrato
Ejecutamos lo siguiente:
Despliegue del contrato
Para Mac y Linux el salto de línea es con el carácter " \" y en Windows con el carácter " ´ "
Reemplaze el simbolo * por el respectivo carácter de salto de linea a su sistema operativo.

Pruebas del contrato
Para Linux y Mac el salto de línea de la instrucción es con el carácter " \ " para Windows con el carácter " ` "
función find_fruit

Función create_task

Función get_info

Función get_status_description

Last updated
Was this helpful?

