SwiftHTML & CSSSolidityDesenvolvimento de JogosSolana/Rust
13.11.2024

Lição: 019: Funções em Solidity

Solidity, a linguagem de programação amplamente utilizada para escrever contratos inteligentes na blockchain Ethereum, utiliza funções como blocos de construção fundamentais. As funções nos permitem encapsular lógica e realizar operações, tornando-as essenciais no desenvolvimento de contratos inteligentes. Nesta aula, vamos explorar os fundamentos das funções em Solidity, incluindo declaração de funções, visibilidade, modificadores e boas práticas.

Declaração de Função

Uma função em Solidity é definida usando a palavra-chave function, seguida pelo nome da função e parênteses contendo quaisquer parâmetros. Aqui está um exemplo simples de uma função que soma dois inteiros:

pragma solidity ^0.8.0;

contract Math {
    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;
    }
}

No exemplo acima:

  • Definimos um contrato chamado Math.
  • A função add aceita dois parâmetros uint256 e retorna sua soma.
  • A visibilidade public significa que pode ser chamada externamente.
  • O modificador pure indica que a função não lê nem modifica o estado do contrato.

Visibilidade da Função

Solidity nos permite especificar a visibilidade das funções, o que controla de onde a função pode ser acessada. Existem quatro modificadores de visibilidade:

  1. public: Pode ser chamada de qualquer lugar.
  2. external: Só pode ser chamada de fora do contrato.
  3. internal: Pode ser chamada apenas dentro do contrato e seus contratos derivados.
  4. private: Pode ser chamada somente dentro do próprio contrato.

Aqui está um exemplo que demonstra diferentes modificadores de visibilidade:

pragma solidity ^0.8.0;

contract Visibility {
    uint256 private secretNumber;

    function setSecretNumber(uint256 _number) public {
        secretNumber = _number;
    }

    function getSecretNumber() public view returns (uint256) {
        return secretNumber;
    }

    function externalFunction() external pure returns (string memory) {
        return "Esta função só pode ser chamada de fora.";
    }

    function internalFunction() internal pure returns (string memory) {
        return "Esta função pode ser chamada internamente ou em contratos derivados.";
    }

    function privateFunction() private pure returns (string memory) {
        return "Esta função só pode ser chamada dentro deste contrato.";
    }
}

Modificadores de Função

Modificadores em Solidity são uma maneira de alterar o comportamento das funções. Eles permitem adicionar pré-condições, tratar erros e gerenciar controle de acesso. Aqui está um exemplo de um modificador que verifica se o remetente é o proprietário do contrato:

pragma solidity ^0.8.0;

contract Owned {
    address public owner;

    constructor() {
        owner = msg.sender; // Define o criador do contrato como o proprietário
    }

    modifier onlyOwner() {
        require(msg.sender == owner, "Você não é o proprietário.");
        _;
    }

    function restrictedFunction() public onlyOwner {
        // Lógica da função
    }
}

No contrato Owned:

  • Definimos um modificador onlyOwner, que verifica se o msg.sender é o proprietário do contrato.
  • O _; em um modificador indica onde inserir o corpo da função.

Retornando Valores de Funções

As funções também podem retornar múltiplos valores. Para retornar vários valores, separe-os com uma vírgula na declaração de retorno. Aqui está como retornar vários valores:

pragma solidity ^0.8.0;

contract MultiReturn {
    function getValues() public pure returns (uint256, string memory) {
        return (42, "Olá, Solidity");
    }
}

Boas Práticas para Funções

  1. Use visibilidade apropriada: Sempre defina funções com o mínimo de privilégios necessário.
  2. Limite mudanças de estado: Funções que alteram o estado devem ser minimizadas, especialmente em contratos expostos ao público, para economizar gás.
  3. Documente seu código: Use comentários NatSpec para descrever o propósito e o comportamento de suas funções.
  4. Use modificadores com sabedoria: Mantenha o código conciso e organizado utilizando modificadores para verificações comuns.

Conclusão

Nesta aula, cobrimos os conceitos fundamentais das funções em Solidity, incluindo como declará-las, gerenciar a visibilidade, utilizar modificadores e retornar valores. Entender esses conceitos é crucial para escrever contratos inteligentes eficientes e seguros. À medida que você continua sua jornada de aprendizado em Solidity, pratique a escrita de suas próprias funções e explore tópicos mais avançados, como sobrecarga de funções e funções de fallback.

Video

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

Thank you for voting!