En Solidity, las variables se utilizan para almacenar datos dentro de un contrato inteligente. Existen varios tipos de variables, cada una diseñada para manejar diferentes tipos de datos y con distintas características. Estas se pueden clasificar en función de su tipo y almacenamiento.
1. Enteros (uint y int):
uint
: Enteros sin signo (positivos).
int
: Enteros con signo (positivos y negativos).
uint8
, uint16
, ..., uint256
(por defecto, uint
es equivalente a uint256
).
uint public enteroPositivo = 100;
int public enteroConSigno = -50;
2. Booleanos (bool):
true
o false
).
bool public esVerdadero = true;
3. Direcciones (address):
address public propietario = 0x1234567890123456789012345678901234567890;
4. Cadenas de texto (string):
string public saludo = "Hola, Blockchain!";
5. Bytes (bytes):
bytes
: longitud dinámica.
bytes1
, bytes2
, ..., bytes32
: longitud fija.
bytes public datosDinamicos = "Hola";
bytes32 public datosFijos = "Blockchain";
1. Arrays:
uint[] public numerosDinamicos;
uint[5] public numerosFijos = [1, 2, 3, 4, 5];
2. Structs:
struct Usuario {
uint id;
string nombre;
}
Usuario public usuario = Usuario(1, "Alice");
3. Mappings:
mapping(address => uint) public balances;
1. Variables de estado:
storage
.
uint public contador;
2. Variables locales:
memory
.
function sumar(uint a, uint b) public pure returns (uint) {
uint resultado = a + b;
return resultado;
}
3. Variables globales:
msg.sender
o block.timestamp
.
address public remitente = msg.sender;
uint public tiempo = block.timestamp;
1. storage:
uint[] public numeros;
2. memory:
storage
.
function obtenerDoble(uint[] memory numeros) public pure returns (uint[] memory) {
for (uint i = 0; i < numeros.length; i++) {
numeros[i] *= 2;
}
return numeros;
}
3. calldata:
memory
.
function concatenar(string calldata a, string calldata b) external pure returns (string memory) {
return string(abi.encodePacked(a, b));
}
4. stack:
1. Constantes (constant):
uint public constant TASA = 100;
2. Inmutables (immutable):
address public immutable propietario;
constructor(address _propietario) {
propietario = _propietario;
}
pragma solidity ^0.8.0;
contract TiposVariables {
// Variables de estado
uint public contador;
address public propietario;
uint[] public numeros;
// Constructor para inicializar variables
constructor(uint _contadorInicial) {
contador = _contadorInicial;
propietario = msg.sender;
}
// Función para manejar variables locales
function sumar(uint a, uint b) public pure returns (uint) {
uint resultado = a + b; // Variable local
return resultado;
}
// Función que utiliza `calldata` y `memory`
function procesarTexto(string calldata entrada) public pure returns (string memory) {
return string(abi.encodePacked("Hola, ", entrada));
}
}
1. Usa el tipo adecuado:
2. Documenta las variables:
3. Usa constantes e inmutables siempre que sea posible:
Para más detalles sobre los tipos de variables en Solidity, consulta la documentación oficial de Solidity.
Jorge García
Fullstack developer