Lição: 012: Tipos Inteiros em Solidity
Solidity é uma linguagem de programação estaticamente tipada projetada para desenvolver contratos inteligentes em plataformas de blockchain, como o Ethereum. Um dos aspectos fundamentais de qualquer linguagem de programação é o manuseio dos tipos de dados. Nesta aula, focaremos nos tipos inteiros em Solidity, suas propriedades e como usá-los de forma eficaz em seus contratos inteligentes.
Visão Geral dos Tipos Inteiros
Solidity oferece vários tipos inteiros, que podem ser divididos em duas categorias: inteiros com sinal e inteiros sem sinal.
- Inteiros com Sinal: Esses tipos podem representar tanto números positivos quanto negativos.
- Inteiros sem Sinal: Esses tipos podem representar apenas números não negativos.
Inteiros Sem Sinal
Os tipos de inteiros sem sinal em Solidity são indicados por uint
. O tipo padrão é uint256
, que é o mesmo que uint
:
uint256 meuInteiroSemSinal = 10; // Representa um inteiro não negativo
Os inteiros sem sinal têm várias variações de largura de bits:
uint8
: 0 a 255uint16
: 0 a 65.535uint32
: 0 a 4.294.967.295uint64
: 0 a 18.446.744.073.709.551.615uint128
: 0 a 340.282.366.920.938.463.463.374.607.431.768.211.456uint256
: 0 a 115.292.150.460.684.697.6.163.840
Inteiros Com Sinal
Os tipos de inteiros com sinal em Solidity são indicados por int
. O tipo padrão é int256
:
int256 meuInteiroComSinal = -10; // Representa tanto inteiros positivos quanto negativos
Assim como os inteiros sem sinal, os inteiros com sinal também têm vários tipos de largura de bits:
int8
: -128 a 127int16
: -32.768 a 32.767int32
: -2.147.483.648 a 2.147.483.647int64
: -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807int128
: -170.141.183.460.737.095.516.16 a 170.141.183.460.737.095.516.15int256
: -2^255 a 2^255 - 1
Escolhendo Tipos Inteiros
Ao escolher um tipo inteiro em Solidity, considere os seguintes critérios:
- Custos de Armazenamento: Tipos menores consomem menos espaço de armazenamento; no entanto, não escolha tipos excessivamente pequenos se o valor puder ultrapassar seus limites.
- Desempenho: Em geral, as operações em tipos menores podem ser menos eficientes do que em tipos maiores, pois o processamento geralmente se alinha ao tamanho da palavra do hardware.
- Restrições Lógicas: Use
uint
quando souber que uma variável não pode ser negativa (por exemplo, contagens, saldos de tokens) eint
quando valores negativos são logicamente possíveis.
Exemplos
Exemplo 1: Aritmética Básica com Inteiros Sem Sinal
Aqui está um contrato simples que demonstra o uso de inteiros sem sinal em aritmética básica:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Aritmetica {
uint256 public total;
function adicionar(uint256 valor) public {
total += valor;
}
function subtrair(uint256 valor) public {
require(total >= valor, "Saldo insuficiente");
total -= valor;
}
}
Exemplo 2: Usando Inteiros Com Sinal
No exemplo a seguir, mostramos como usar inteiros com sinal em um sistema de votações simples. Os votos podem ser negativos para indicar uma retirada de apoio:
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
contract Votacao {
mapping(address => int256) public votos;
function registrarVoto(int256 valor) public {
votos[msg.sender] += valor;
}
function obterQuantidadeDeVoto(address eleitor) public view returns (int256) {
return votos[eleitor];
}
}
Conclusão
Nesta aula, cobrimos os tipos inteiros em Solidity, incluindo suas variações com e sem sinal, diferentes larguras de bits e melhores práticas para uso. Entender como escolher o tipo inteiro certo garante que seus contratos inteligentes sejam eficientes e eficazes. Nas próximas aulas, nos aprofundaremos em operadores, condições e funcionalidades mais avançadas de contratos inteligentes. Boa codificação!