En Solidity como en cualquier lenguaje de programación, es fundamental entender cómo manejar el flujo de ejecución de nuestros smart contracts. Afortunadamente, if statements y for loops funcionan de manera similar a otros lenguajes. Sin embargo, hay algunas peculiaridades que vale la pena conocer. Vamos a explorar estas estructuras y sus casos de uso más comunes.
If Statements en Solidity
En Solidity, los if statements son casi idénticos a otros lenguajes como JavaScript o Python. Sin embargo, debido a que Solidity es un lenguaje estáticamente tipado, no permite evaluar condiciones dinámicamente.
Por ejemplo, el siguiente código no funcionará:
function isNotZero(uint256 x) public pure returns (bool) {
if (x) {
return true;
} else {
return false;
}
}
En Solidity, las condiciones deben ser expresiones booleanas explícitas. Para solucionar este problema, deberías escribir algo como:
function isNotZero(uint256 x) public pure returns (bool) {
if (x != 0) {
return true;
} else {
return false;
}
}
Else If
Solidity también soporta el uso de else if, lo que permite manejar múltiples condiciones:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ElseIfExample {
function max(uint256 a, uint256 b) public pure returns (uint256) {
if (a > b) {
return a;
} else if (b > a) {
return b;
} else {
return 0; // En caso de que sean iguales
}
}
}
¿Puedes ver lo que está haciendo el código de arriba?
Solidity no tiene una declaración switch como otros lenguajes.
For Loops en Solidity
Los for loops en Solidity funcionan como en cualquier lenguaje de programación. Puedes utilizarlos para iterar sobre valores numéricos o estructuras de datos (como arrays, que veremos más adelante).
Ejemplo: Suma de Números
Aquí un smart contract que suma los números del 1 al 99:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract ForLoopExample {
function addNumbers() public pure returns (uint256) {
uint256 sum = 0;
for (uint256 i = 1; i < 100; i++) {
sum += i;
}
return sum;
}
}
Ejercicio: ¿Es un Número Primo?
¿Te gustaría saber si un número es primo? Aquí tienes un ejercicio para implementarlo:
contract IsPrime {
function isNumberPrime(uint256 num) public pure returns (bool) {
if (num < 2) return false;
for (uint256 i = 2; i * i <= num; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
Curiosidades y Limitaciones
Aunque Solidity maneja los for loops naturalmente, hay algunas cosas a tener en cuenta:
Costos de Gas: Los loops largos pueden consumir demasiado gas, lo que puede hacer que las transacciones fallen. Por ejemplo, evaluar si un número grande como
7877
es primo puede tomar varios segundos debido a los cálculos.While y Do While: Estas estructuras de iteración también existen en Solidity pero como practicamente no se usan en el desarrollo real de smart contracts, no las cubriremos aquí.
Los if statements y for loops son herramientas esenciales en Solidity que ofrecen flexibilidad para manejar el flujo lógico de tus smart contracts. Sigamos aprendiendo la sintáxis con paciencia que ya viene lo más interesante.
La práctica nos hace mejores. ¿Qué esperas para probar estos ejemplos en Remix? Intenta agregar edge cases, encontrar maneras de romper el código y casos raros que no hayamos visto. ¡Sigamos explorando! 🚀