SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
13.11.2024

Lição: 010: Visão Geral dos Tipos de Dados em Solidity

Nesta aula, vamos explorar os diferentes tipos de dados disponíveis em Solidity, a linguagem de programação usada para escrever contratos inteligentes na blockchain Ethereum. Compreender esses tipos de dados é essencial para a construção de contratos inteligentes eficientes e seguros.

1. Tipos de Valor

Os tipos de valor mantêm seus valores diretamente em seus próprios locais de memória. Quando você atribui um tipo de valor a outro, uma cópia do valor é feita.

1.1. Booleano

O tipo bool representa um valor verdadeiro ou falso.

pragma solidity ^0.8.0;

contract ExemploBooleano {
    bool public ativo;

    function definirAtivo(bool _ativo) public {
        ativo = _ativo;
    }
}

1.2. Tipos Inteiros

Solidity oferece vários tipos inteiros, que podem ser assinados ou não assinados.

  • Inteiros assinados: int8, int16, int32, int64, int128, int256
  • Inteiros não assinados: uint8, uint16, uint32, uint64, uint128, uint256

Exemplo de uso de inteiros não assinados:

pragma solidity ^0.8.0;

contract ExemploInteiro {
    uint public contagem;

    function incrementar() public {
        contagem++;
    }
}

1.3. Endereço

O tipo address representa um endereço Ethereum. Ele é usado para armazenar o endereço de um contrato ou de uma conta de propriedade externa (EOA).

pragma solidity ^0.8.0;

contract ExemploEndereco {
    address public dono;

    constructor() {
        dono = msg.sender; // O endereço que implanta o contrato
    }
}

1.4. Arrays de Bytes de Tamanho Fixo

Estes são usados para armazenar dados brutos em bytes. O comprimento do array de bytes deve ser especificado.

  • bytes1 a bytes32

Exemplo:

pragma solidity ^0.8.0;

contract ExemploBytes {
    bytes32 public dados;

    function definirDados(bytes32 _dados) public {
        dados = _dados;
    }
}

2. Tipos de Referência

Os tipos de referência armazenam referências aos dados reais em vez dos dados em si. Alterações feitas nos dados afetarão todas as referências que apontam para eles.

2.1. Strings

Strings em Solidity são arrays de bytes de comprimento variável. Elas podem armazenar texto.

pragma solidity ^0.8.0;

contract ExemploString {
    string public saudacao;

    function definirSaudacao(string memory _saudacao) public {
        saudacao = _saudacao;
    }
}

2.2. Arrays

Solidity suporta arrays de tamanho fixo e dinâmicos.

Array de Tamanho Fixo

pragma solidity ^0.8.0;

contract ExemploArrayFixo {
    uint[5] public numeros; // Array de 5 inteiros não assinados

    function definirNumero(uint indice, uint valor) public {
        require(indice < 5, "Índice fora dos limites");
        numeros[indice] = valor;
    }
}

Array Dinâmico

pragma solidity ^0.8.0;

contract ExemploArrayDinamico {
    uint[] public numeros; // Array dinâmico de inteiros não assinados

    function adicionarNumero(uint valor) public {
        numeros.push(valor);
    }
}

2.3. Estruturas

Estruturas são tipos de dados definidos pelo usuário usados para agrupar dados relacionados.

pragma solidity ^0.8.0;

contract ExemploEstrutura {
    struct Pessoa {
        string nome;
        uint idade;
    }

    Pessoa public pessoa;

    function definirPessoa(string memory _nome, uint _idade) public {
        pessoa = Pessoa(_nome, _idade);
    }
}

2.4. Mapeamentos

Mapeamentos são armazenamentos de chave-valor onde as chaves são únicas e se mapeiam para valores. Eles são comumente usados para associar endereços a saldos ou outros dados.

pragma solidity ^0.8.0;

contract ExemploMapping {
    mapping(address => uint) public saldos;

    function depositar() public payable {
        saldos[msg.sender] += msg.value; // Adiciona ao saldo do remetente
    }
}

Conclusão

Nesta aula, abordamos os vários tipos de dados disponíveis em Solidity, incluindo tipos de valor (booleanos, inteiros, endereços, etc.) e tipos de referência (strings, arrays, estruturas, mapeamentos). Entender esses tipos de dados é crucial para um design e implementação eficientes de contratos inteligentes. Nas futuras aulas, exploraremos como utilizar esses tipos de dados de forma eficaz na construção de contratos inteligentes mais complexos.

Video

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

Thank you for voting!