Resumen

Dominar los tipos de datos avanzados es fundamental para escribir smart contracts más robustos en Sway. Conocer herramientas como structs, enums, storage maps y storage vectors te permitirá organizar información compleja de forma eficiente y segura dentro de tus contratos. A continuación se desglosan estos tipos con ejemplos prácticos extraídos directamente de la explicación.

¿Qué son los structs y por qué agrupan tipos diferentes?

Un struct en Sway es una forma de agrupar varios tipos de datos bajo una misma estructura [0:36]. Si vienes de lenguajes orientados a objetos como JavaScript o Java, el concepto te resultará muy familiar: funcionan de manera similar a un objeto.

  • Se definen dentro de llaves.
  • Cada campo puede tener un tipo distinto.
  • Sirven para describir propiedades relacionadas de una misma entidad.

Por ejemplo, un struct llamado Foo puede contener un campo de tipo U64 y otro de tipo Boolean. Un caso más intuitivo sería un struct de tipo carro con campos como color, número de ruedas y año [1:07]. La ventaja es clara: mantienes juntos todos los datos que describen un mismo concepto.

¿Cómo funcionan los enums o enumeraciones?

Los enums, abreviatura de enumerations, también conocidos como sum types, permiten definir un tipo que puede ser una de varias variantes predefinidas [1:27]. En lugar de dejar valores abiertos para que el usuario los complete, tú estableces desde el código todas las opciones posibles.

  • Declaras todas las variantes al crear el enum.
  • Limitas el rango de valores válidos en tu programa.
  • Mejoras la seguridad y la legibilidad del contrato.

Un ejemplo típico es un enum llamado Color con las variantes blue, green, red, silver y gray [1:55]. Esto genera una lista cerrada de opciones que puedes usar a lo largo del programa sin ambigüedades.

¿Qué es un storage map y cómo almacena pares clave-valor?

El storage map es un tipo especial diseñado para guardar pares de clave-valor dentro del bloque de almacenamiento (storage block) de tu contrato [2:15]. Si vienes de Python, piensa en un diccionario; si vienes de otros lenguajes, en una hash table.

  • Mapea una clave a un valor.
  • Debes especificar el tipo tanto de la clave como del valor.
  • La clave podría ser un address y el valor un U64 o incluso un struct más complejo.

En el ejemplo mostrado, se define un map donde la clave es de tipo address y el valor es de tipo U64 [2:52]. Esto resulta muy útil para asociar direcciones de usuarios con saldos o identificadores.

¿Qué es un storage vec y en qué se diferencia de un array?

Un storage vector permite almacenar múltiples valores del mismo tipo en una sola estructura, donde cada valor recibe un índice [3:08]. Es similar a un array, pero con la capacidad de crecer dinámicamente usando el método push.

  • Solo admite elementos de un único tipo.
  • Puedes agregar elementos a lo largo de la ejecución del programa.
  • Ese tipo único podría ser una tupla, que a su vez contiene dos tipos diferentes [3:47].

Por ejemplo, un storage vec llamado V definido con tipo U64 solo aceptará números U64.

¿Cómo agregar y leer elementos de un storage vec?

Para agregar elementos utilizas el método push [4:10]. La sintaxis es directa:

sway storage.v.push(valor);

Dentro de los paréntesis colocas el elemento que quieres añadir. Como el vector fue definido para U64, cada valor que insertes debe ser de ese tipo.

Para leer un elemento en una posición específica, utilizas el método get pasando el índice deseado [4:44]:

sway let third = storage.v.get(2);

Con este código, la variable third almacena el valor ubicado en el índice 2 del storage vector. Recuerda que los índices comienzan en cero, por lo que el índice 2 corresponde al tercer elemento.

Estos tipos avanzados forman la base para construir estructuras de datos más complejas en tus contratos. Comparte cuál de estos tipos era completamente nuevo para ti y cómo planeas utilizarlo en tus proyectos.