Lição: 057: Usando a Declaração For em Solidity
Nesta aula, vamos explorar a declaração de laço for
em Solidity, que nos permite executar um bloco de código várias vezes. O laço for
é particularmente útil quando você precisa manipular coleções de dados, como arrays, ou realizar cálculos repetidos.
O que é um Laço For?
Um laço for
consiste em três partes principais:
- Inicialização: Isso define uma variável contador com um valor inicial.
- Condição: Antes de cada iteração, essa condição é verificada. Se ela for verdadeira, o bloco de código dentro do laço é executado.
- Incremento/Decremento: Isso é executado ao final de cada iteração, geralmente modificando a variável contador.
A estrutura de um laço for
em Solidity é assim:
for (inicialização; condição; incremento) {
// Código a ser executado
}
Exemplo 1: Laço For Básico
Vamos ver um exemplo simples onde utilizamos um laço for
para iterar sobre um array de inteiros e somá-los.
pragma solidity ^0.8.0;
contract SomarArray {
uint[] public numeros;
constructor(uint[] memory _numeros) {
numeros = _numeros;
}
function somar() public view returns (uint) {
uint total = 0;
for (uint i = 0; i < numeros.length; i++) {
total += numeros[i];
}
return total;
}
}
Explicação
- O construtor inicializa o array
numeros
. - A função
somar
calcula o total iterando pelo arraynumeros
usando um laçofor
. numeros.length
fornece a contagem total de elementos no array, que serve como nossa condição de laço.
Exemplo 2: Laço For com Lógica Condicional
Neste exemplo, vamos criar um contrato que filtra números pares de um array e os armazena em um array separado.
pragma solidity ^0.8.0;
contract NumerosPares {
uint[] public numeros;
uint[] public numerosPares;
constructor(uint[] memory _numeros) {
numeros = _numeros;
}
function filtrarNumerosPares() public {
delete numerosPares; // Limpa o array antes de adicionar novos valores
for (uint i = 0; i < numeros.length; i++) {
if (numeros[i] % 2 == 0) {
numerosPares.push(numeros[i]);
}
}
}
}
Explicação
- Temos dois arrays:
numeros
(entrada inicial) enumerosPares
(para armazenar os resultados filtrados). - A função
filtrarNumerosPares
itera sobre o arraynumeros
e verifica se cada número é par. - Se um número for par (
numeros[i] % 2 == 0
), ele é adicionado ao arraynumerosPares
.
Exemplo 3: Laços For Aninhados
Para operações mais complexas, pode ser necessário usar laços for
aninhados. Aqui está um exemplo onde criamos uma tabela de multiplicação.
pragma solidity ^0.8.0;
contract TabelaMultiplicacao {
uint[][] public tabela;
constructor(uint tamanho) {
criarTabela(tamanho);
}
function criarTabela(uint tamanho) private {
for (uint i = 1; i <= tamanho; i++) {
uint[] memory linha = new uint[](tamanho);
for (uint j = 1; j <= tamanho; j++) {
linha[j - 1] = i * j;
}
tabela.push(linha);
}
}
}
Explicação
- O contrato
TabelaMultiplicacao
constrói uma tabela de multiplicação de um tamanho específico. - O laço
for
externo itera sobre cada linha, enquanto o laçofor
interno calcula o valor de cada coluna. - Os resultados são armazenados como linhas da tabela de multiplicação.
Conclusão
Nesta aula, aprendemos como usar o laço for
em Solidity. Exploramos alguns exemplos: somando um array, filtrando números pares e criando uma tabela de multiplicação. O laço for
é uma ferramenta poderosa para iterar sobre estruturas de dados em contratos inteligentes.
À medida que você escreve contratos inteligentes mais complexos, familiarizar-se com os laços for
aprimorará sua capacidade de manipular dados de forma eficiente. Boa codificação!