SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
15.11.2024

Lição: 036: Deletando de Mapeamentos em Solidity

Mapeamentos são uma das estruturas de dados mais importantes em Solidity, servindo a um propósito semelhante a tabelas hash ou dicionários em outras linguagens de programação. Eles permitem que você associe chaves a valores de forma eficiente. No entanto, entender como gerenciar adequadamente mapeamentos, incluindo como deletar dados deles, é crucial para escrever contratos inteligentes eficientes.

Em Solidity, quando você deleta um par chave-valor de um mapeamento, o valor para aquela chave não é removido completamente; em vez disso, ele é redefinido para seu valor padrão. Por exemplo, se o tipo de valor for um inteiro, deletar uma chave irá redefinir seu valor para 0. Se o tipo de valor for um tipo de referência, como um struct, a variável será redefinida para uma instância do struct inicializada com zero.

Código de Exemplo

Aqui está um exemplo prático para demonstrar como trabalhar com mapeamentos e deletar entradas deles.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract RegistroEstudantes {
    struct Estudante {
        string nome;
        uint idade;
    }

    // Mapeamento de um ID para um Estudante
    mapping(uint => Estudante) private estudantes;

    // Função para adicionar um novo estudante
    function adicionarEstudante(uint _id, string memory _nome, uint _idade) public {
        estudantes[_id] = Estudante(_nome, _idade);
    }

    // Função para obter os detalhes de um estudante
    function obterEstudante(uint _id) public view returns (string memory nome, uint idade) {
        Estudante memory estudante = estudantes[_id];
        return (estudante.nome, estudante.idade);
    }

    // Função para deletar um estudante pelo ID
    function deletarEstudante(uint _id) public {
        delete estudantes[_id];
    }

    // Função para verificar se um estudante existe
    function estudanteExiste(uint _id) public view returns (bool) {
        return bytes(estudantes[_id].nome).length != 0; // Verifica se o nome não está vazio
    }
}

Explicação

  1. Definição de Struct:

    • Definimos um struct Estudante com os atributos nome e idade.
  2. Declaração do Mapeamento:

    • O mapeamento estudantes relaciona um ID exclusivo uint a um struct Estudante.
  3. Adicionando um Estudante:

    • A função adicionarEstudante permite a adição de um novo estudante ao mapeamento, associando seu ID aos seus detalhes.
  4. Recuperando Detalhes do Estudante:

    • A função obterEstudante busca os detalhes de um estudante dado seu ID.
  5. Deletando um Estudante:

    • A função deletarEstudante remove um estudante do mapeamento usando a palavra-chave delete. Isso redefine os valores para seu estado padrão (uma string vazia para nome e 0 para idade).
  6. Verificando Existência:

    • A função estudanteExiste verifica se o nome de um estudante está definido, que é uma maneira simples de verificar se um estudante existe nos registros.

Testando o Contrato

Você pode implantar o contrato usando qualquer ambiente de desenvolvimento Ethereum, como Remix ou Hardhat, e testar as funções da seguinte maneira:

  1. Use adicionarEstudante(1, "Alice", 20) para adicionar um estudante.
  2. Chame obterEstudante(1) para recuperar os detalhes de Alice.
  3. Chame deletarEstudante(1) para deletar o registro de Alice.
  4. Finalmente, estudanteExiste(1) deve retornar falso, indicando que o registro dela não está mais presente.

Pontos Chave para Lembrar

  • Deletar de um mapeamento não remove a entrada; ele redefinirá o valor para seu estado padrão.
  • Sempre certifique-se de ter verificações como a função estudanteExiste em vigor para gerenciar o estado de forma eficaz.
  • Mapeamentos não possuem um comprimento ou um método para enumerar suas chaves; você precisará gerenciar informações de estado fora do mapeamento se precisar dessa funcionalidade.

Entender mapeamentos e seu mecanismo de deleção é fundamental em Solidity, levando a um melhor design e gerenciamento de contratos. Boa codificação!

Video

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

Thank you for voting!