SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
13.11.2024

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 255
  • uint16: 0 a 65.535
  • uint32: 0 a 4.294.967.295
  • uint64: 0 a 18.446.744.073.709.551.615
  • uint128: 0 a 340.282.366.920.938.463.463.374.607.431.768.211.456
  • uint256: 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 127
  • int16: -32.768 a 32.767
  • int32: -2.147.483.648 a 2.147.483.647
  • int64: -9.223.372.036.854.775.808 a 9.223.372.036.854.775.807
  • int128: -170.141.183.460.737.095.516.16 a 170.141.183.460.737.095.516.15
  • int256: -2^255 a 2^255 - 1

Escolhendo Tipos Inteiros

Ao escolher um tipo inteiro em Solidity, considere os seguintes critérios:

  1. 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.
  2. 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.
  3. Restrições Lógicas: Use uint quando souber que uma variável não pode ser negativa (por exemplo, contagens, saldos de tokens) e int 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!

Video

Did you like this article? Rate it from 1 to 5:

Thank you for voting!