Lição: 026: Estruturas de Controle: If-Else em Solidity
Nesta aula, vamos explorar a estrutura de controle if-else
em Solidity, que é fundamental para implementar tomadas de decisão em contratos inteligentes. Estruturas de controle permitem que o contrato execute diferentes ações com base nas condições fornecidas.
Compreendendo If-Else
A instrução if-else
permite a execução de código com base na avaliação de uma expressão booleana. Se a condição na instrução if
for avaliada como verdadeira
, o bloco de código correspondente será executado. Se for falsa, o código no bloco else
(se fornecido) será executado em seu lugar.
Sintaxe
if (condicao) {
// Código a ser executado se a condição for verdadeira
} else {
// Código a ser executado se a condição for falsa
}
Exemplo Básico
Vamos olhar para um exemplo básico onde criamos um simples contrato de votação que inclui uma estrutura de controle if-else
.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Votacao {
mapping(address => bool) public eleitores;
uint public totalVotos;
function votar() public {
// Verificar se o remetente já votou
if (eleitores[msg.sender]) {
// Se já votou, reverter a transação
revert("Você já votou!");
} else {
// Se não votou, registrar seu voto
eleitores[msg.sender] = true;
totalVotos++;
}
}
}
Neste exemplo, a função votar
verifica se o remetente já votou usando uma condição if
. Se o remetente já tiver votado (eleitores[msg.sender]
é verdadeiro
), a transação será revertida com uma mensagem de erro. Se ainda não votou, será marcado como tendo votado e o totalVotos
será incrementado.
Exemplo Ampliado
Agora, vamos aprimorar este exemplo para incluir mais funcionalidade com o uso de if-else
.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Votacao {
mapping(address => bool) public eleitores;
uint public totalVotos;
string public resultado;
function votar(bool _votoParaCandidatoA) public {
// Verificar se o remetente já votou
if (eleitores[msg.sender]) {
revert("Você já votou!");
} else {
// Registrar o voto
eleitores[msg.sender] = true;
totalVotos++;
// Se o voto for para o Candidato A
if (_votoParaCandidatoA) {
resultado = "Votou no Candidato A";
} else {
// Caso contrário, o voto é para o Candidato B
resultado = "Votou no Candidato B";
}
}
}
}
Neste exemplo ampliado, a função votar
agora aceita um parâmetro _votoParaCandidatoA
. A estrutura if-else
determina se o voto é para o Candidato A ou para o Candidato B e atualiza a variável de estado resultado
de acordo.
Conclusão
A estrutura de controle if-else
é um recurso poderoso em Solidity que permite aos desenvolvedores criar lógicas complexas de tomada de decisão em contratos inteligentes. Ao utilizar esta estrutura de controle, podemos gerenciar efetivamente diferentes cenários, como votação, lances em leilões ou qualquer outra lógica condicional necessária em um ambiente descentralizado.
À medida que você continua a aprender Solidity, praticar com estruturas de controle como if-else
será crucial para construir aplicações descentralizadas (dApps) robustas.