0Pricing
Web3 & DApp Development Fundamentals · Lección

Tipos de referencia

arrays, structs y mappings

Tipos de referencia es una lección gratuita de Web3 & DApp Development Fundamentals en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Web3 & DApp Development Fundamentals, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Web3 & DApp Development Fundamentals incluye 4 lecciones en total.

Partes de esta lección aún no han sido traducidas y se muestran en inglés.

What Are Reference Types?

Reference types describe data that is too large to fit in one slot, so variables refer to a location rather than holding the data directly.

The three reference types are arrays, structs, and mappings. When you use them you must think about their data location: storage, memory, or calldata.

Fixed-Size Arrays

A fixed-size array has a length set at compile time and cannot grow. The type uint[3] always holds exactly three values.

Use .length to read the size. Out-of-bounds access reverts.

<code>uint[3] public scores = [10, 20, 30];

function first() public view returns (uint) {
    return scores[0];
}</code>

Dynamic Arrays

A dynamic array can grow and shrink. Declare it as uint[]. In storage you can push to append and pop to remove the last element.

<code>uint[] public nums;

function add(uint n) public {
    nums.push(n);
}

function removeLast() public {
    nums.pop();
}</code>

Bytes and String

bytes is a dynamically-sized byte array and string is its UTF-8 text cousin. Both are reference types.

Note: string has no .length or indexing; convert to bytes first to inspect raw bytes.

<code>string public name = 'Alice';

function nameLength() public view returns (uint) {
    return bytes(name).length;
}</code>

Defining Structs

A struct groups related variables into one custom type. It is ideal for modeling entities like users, orders, or tokens.

<code>struct User {
    string name;
    uint256 balance;
    bool active;
}</code>

Using Structs

You can create a struct with positional or named arguments and store it. Reading a struct from storage gives you a reference you can modify.

<code>User public owner;

function setup(string memory n) public {
    owner = User({ name: n, balance: 0, active: true });
}</code>

Mappings

A mapping is a key-value store, like a hash table. It is one of the most used structures in smart contracts, for example tracking balances per address.

Keys are not stored, so you cannot iterate a mapping or get its length.

<code>mapping(address => uint256) public balances;

function deposit() public payable {
    balances[msg.sender] += msg.value;
}</code>

Nested Mappings

Mappings can be nested to model relationships, such as allowances where one owner permits multiple spenders.

This pattern is the heart of the ERC-20 allowance system.

<code>mapping(address => mapping(address => uint256)) public allowance;

function approve(address spender, uint256 amount) public {
    allowance[msg.sender][spender] = amount;
}</code>

Combining Structs and Mappings

A powerful pattern is mapping keys to structs. This lets you store rich records keyed by an id or address.

<code>struct Order {
    uint256 amount;
    bool paid;
}

mapping(uint256 => Order) public orders;

function createOrder(uint256 id, uint256 amt) public {
    orders[id] = Order({ amount: amt, paid: false });
}</code>

Arrays of Structs

You can keep a dynamic array of structs when you need ordered, iterable records. Combine it with a mapping for fast lookup.

<code>struct Item { string name; uint256 price; }
Item[] public items;

function addItem(string memory n, uint256 p) public {
    items.push(Item(n, p));
}</code>

Reference Semantics

When you assign a storage reference type to a local storage variable, both point to the same data. Changes through one are visible through the other.

A memory copy, in contrast, is independent.

<code>uint[] public data;

function tweak() public {
    uint[] storage ref = data; // alias
    ref.push(42);              // also changes data
}</code>

Quick Check

Test your understanding of reference types.

Recap

You explored Solidity reference types:

  • Arrays (fixed and dynamic), plus bytes and string
  • Structs to group related fields
  • Mappings and nested mappings for key-value storage
  • Powerful combinations like mapping-to-struct and arrays-of-structs

Reference types share locations, so always be deliberate about storage versus memory.

Preguntas frecuentes

¿La lección «Tipos de referencia» es gratis?

Sí — el texto completo de «Tipos de referencia» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Web3 & DApp Development Fundamentals, actualiza a CoddyKit PRO. El curso de Web3 & DApp Development Fundamentals incluye 4 lecciones en total.

¿Qué aprenderé en «Tipos de referencia»?

arrays, structs y mappings Practicas Web3 & DApp Development Fundamentals con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Web3 & DApp Development Fundamentals?

No se requiere experiencia previa. Web3 & DApp Development Fundamentals en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Tipos de referencia»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Web3 & DApp Development Fundamentals?

Sí. Cada lección de Web3 & DApp Development Fundamentals incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Tipos de valor
  2. Tipos de referencia
  3. Storage frente a memory
  4. Constantes e inmutables
← Volver a Web3 & DApp Development Fundamentals