Loops y condicionales en Solidity

Resumen

Aprender a controlar el flujo de un contrato inteligente empieza por dominar condicionales y loops en Solidity, dos estructuras presentes en cualquier lenguaje de programación pero con matices propios cuando trabajas sobre blockchain. Aquí verás cómo se escriben, cómo se prueban en Remix IDE y por qué un for mal dimensionado puede romper tu contrato.

¿Cómo funciona un condicional if en Solidity?

Un condicional evalúa una expresión y ejecuta un bloque de código según el resultado. En Solidity la sintaxis del if es prácticamente idéntica a la de otros lenguajes, así que si vienes de JavaScript o C, te vas a sentir en casa.

En el ejemplo de Remix se trabaja con un contrato llamado Condicionales que tiene una única variable de estado: contador. El constructor la inicializa en cero y una función recibe un parámetro de tipo bool. Si el valor entra como true, el contador se incrementa en uno. Si entra como false, el contador se decrementa en uno [00:55].

¿Qué es una variable booleana en Solidity? Es un tipo de dato que solo puede tener dos valores: true o false. Se usa como entrada para condicionales que deciden qué rama de código ejecutar.

¿Cómo se prueba un contrato con condicionales en Remix?

El flujo en Remix IDE es directo y te permite ver el efecto de cada llamada sobre la variable de estado.

  • Compila el contrato con el botón Compile.
  • Despliega con Deploy en el entorno de prueba.
  • Llama la función pasando true y revisa cómo el contador sube de uno en uno.
  • Vuelve a llamarla con false y observa que el contador baja en cada ejecución.

Cada transacción exitosa aparece marcada con un ticket verde, lo que confirma que el condicional respondió como esperabas [02:30].

¿Cuándo usar un loop for en un contrato inteligente?

Los loops permiten repetir una instrucción o un bloque varias veces, ya sea por un número fijo de iteraciones o mientras se cumpla una condición. En Solidity el loop más usado es el for.

La experiencia con contratos inteligentes muestra que el loop while, condicionado a una expresión, casi no se utiliza. En el 99,9% de los casos vas a escribir un for [04:10]. La razón es práctica: necesitas saber de antemano cuántas iteraciones vas a ejecutar para controlar el costo y evitar comportamientos impredecibles.

¿Cómo se escribe la sintaxis de un for en Solidity?

El ejemplo en Remix usa una variable i de tipo entero que arranca en cero y avanza hasta un número que pasas como parámetro al llamar la función. En cada iteración, i se incrementa en uno y su valor se asigna a una variable de estado llamada dato.

  • Variable de control: i, tipo entero.
  • Inicio: cero.
  • Límite: parámetro recibido por la función.
  • Acción: incrementar i y actualizar dato.

Al probar la función con un valor de cinco, la ejecución es inmediata. El contrato hace su trabajo, paga el gas correspondiente y devuelve el control [05:20].

¿Por qué falla un loop con muchas iteraciones en Solidity?

Y aquí viene lo interesante. Si en lugar de cinco le pasas a la misma función un valor como un millón, la transacción no se completa. Remix devuelve una cruz roja y un mensaje muy específico: Out of Gas Exception.

Esto significa que el programa intentó ejecutar más instrucciones de las que la red blockchain permite en una sola transacción. Por diseño, cada operación tiene un límite de complejidad. Esa restricción protege a la red: evita que alguien lance un contrato infinito y bloquee a todos los demás usuarios [06:45].

¿Qué es Out of Gas en Solidity? Es el error que ocurre cuando una transacción consume más gas del permitido. El gas mide la cantidad de cómputo que la red está dispuesta a ejecutar por transacción, y si lo superas, la operación se revierte.

¿Cuánto puede iterar un for en un contrato inteligente? Depende del límite de gas del bloque y de qué tan costosa sea cada iteración. La regla práctica es mantener los loops cortos y acotados, nunca dependientes de entradas que un usuario pueda inflar.

La lección es clara: los loops en Solidity siempre deben tener un largo acotado. Si dejas que el número de iteraciones crezca sin control, tu contrato puede volverse inutilizable porque ninguna transacción que lo invoque va a caber dentro del presupuesto de gas.

Cómo aplicar condicionales y loops sin romper tu contrato

Dominar estas dos estructuras te da el control básico sobre el flujo de cualquier contrato. Los condicionales te permiten reaccionar a entradas y estados; los loops te permiten procesar colecciones o repetir lógica. La diferencia frente a un lenguaje tradicional es que cada instrucción cuesta gas.

  • Usa if para bifurcar lógica según variables booleanas o comparaciones simples.
  • Prefiere for sobre while cuando necesites repetir instrucciones.
  • Define siempre un límite superior conocido para tus iteraciones.
  • Prueba primero con valores pequeños en Remix antes de subir la escala.
  • Recuerda que el constructor inicializa el estado una sola vez al desplegar el contrato.

Con esto ya tienes la base para escribir lógica condicional y repetitiva en Solidity. Cuéntame en los comentarios qué tipo de validaciones estás pensando incluir en tu próximo contrato.