WEB3DEV

Cover image for Assinatura de Função — O que é isso?
Paulo Gio
Paulo Gio

Posted on

Assinatura de Função — O que é isso?

https://miro.medium.com/v2/resize:fit:840/1*_9O4Tb11M5V7SnCgoHvQiw.jpeg

Gerado pelo Bing Image Creator

Simplificando, uma Assinatura de Função é um identificador único para uma função em um programa. É o hash dos componentes de uma função, que são:

  1. Visibilidade da Função: Refere-se a se a função é pública, privada ou protegida. Define o escopo de onde a função pode ser acessada dentro do código.
  2. Nome da Função: Este é o nome único dado a uma função. É usado para chamar ou referenciar a função no programa.
  3. Argumentos da Função: São as entradas que uma função recebe. Podem ser um ou muitos. Podem variar em número e tipo.
  4. Tipos de Retorno da Função: Refere-se ao tipo de valor que a função retorna. Pode ser um único valor, um array de valores, um objeto ou qualquer tipo de dado.
  5. Modificadores da Função: Modificadores são palavras-chave que são adicionadas às definições de funções para alterar seu comportamento. Podem ser usados para controlar o acesso à função, modificar o tipo de retorno da função ou impor outras restrições ou permissões à função.

Vamos analisar cada um desses componentes.

Visibilidade da Função

A visibilidade da função define de onde uma função pode ser acessada. Existem 4 tipos principais de visibilidade em linguagens de programação:

  1. Visibilidade Pública: Se uma função é pública, ela pode ser acessada de qualquer lugar no código, até mesmo fora da classe ou estrutura em que reside.
  2. Visibilidade Privada: Funções privadas são acessíveis apenas dentro da classe em que são definidas. (Ênfase em apenas)
  3. Visibilidade Protegida: Funções protegidas podem ser acessadas dentro da classe em que são definidas e pelas subclasses dessa classe.

Existem outros tipos de visibilidade: temos a Estática, Interna, Externa e elas diferem em linguagens de programação. Solidity, Java, C++ etc., têm esses tipos de visibilidade.

Nome da Função

O nome da função é o nome dado à função. É um identificador único para nossas funções ao escrever código. Uma função precisa ser única dentro do escopo em que é definida.

  • Apenas para acrescentar, uma boa prática ao nomear funções é nomeá-las com base no que elas fazem.

Argumentos da Função

Argumentos de função são os valores passados para a função. Argumentos de função podem ser de qualquer tipo de dado, e uma função pode receber múltiplos argumentos. Argumentos para uma função contribuem para a unicidade de uma função, pois diferentes funções podem ter diferentes números de argumentos com diferentes tipos de argumento.

Tipos de Retorno da Função

O tipo de retorno de uma função também contribui para a unicidade de uma função. O tipo de retorno de uma função é o tipo de valor que uma função retorna uma vez que essa função tenha completado a execução e pode ser de qualquer tipo de dado, incluindo void se a função não retornar nada. O tipo de retorno da função é parte da assinatura da função porque ajuda a distinguir funções com o mesmo nome e mesmos argumentos, mas com um tipo de retorno diferente.

Modificadores de Função

Modificadores de Função podem mudar o comportamento de uma função. Eles podem controlar o acesso, modificar o tipo de retorno ou impor restrições a uma função. Modificadores são uma ferramenta poderosa para tornar o código mais conciso, legível e seguro. Para entender como os modificadores de função funcionam, demonstrarei usando um trecho de código em Solidity. Isso porque os modificadores são prática comum em contratos Solidity.

pragma solidity ^0.8.18;

contract Example {
   address public owner;
   constructor() public {
       owner = msg.sender;
   }
   modifier onlyOwner {
       require(msg.sender == owner, "Only the contract owner can call this function");
       _;
   }
   // Esta função só pode ser chamada pelo proprietário do contrato por causa do modificador onlyOwner.
   function doSomething() public onlyOwner {
       // lógica para o doSomething
   }
}
Enter fullscreen mode Exit fullscreen mode

Agora, de acordo com o código, existe um modificador de função chamado onlyOwner que verifica se o remetente da transação é o proprietário do contrato. Se o proprietário for diferente, a função doSomething gera um erro e interrompe a execução. Se o proprietário do contrato é quem está chamando o contrato, a função executa com sucesso. O onlyOwner é um modificador de função que controla o acesso à função doSomething.

As Assinaturas de Função são úteis?

Você pode estar se perguntando, qual é a utilidade das assinaturas de função? A resposta é muito útil. As assinaturas de função são usadas em compiladores, o que significa que são usadas em todas as linguagens de programação. Por exemplo:

  1. Assinaturas de função são usadas ao executar chamadas de baixo nível entre contratos Solidity.
  2. Assinaturas de função são usadas para instruções de chamada ao fazer chamadas de função em C++ e outras linguagens de baixo nível.
  3. Identificação de funções em linguagens que suportam sobrecarga de funções.

Então, as assinaturas de função são muito úteis na programação. Pense nisso… como as linguagens de programação que suportam sobrecarga de funções, como a linguagem Java, seriam capazes de gerenciar funções sobrecarregadas?

Resumo

As assinaturas de função fornecem uma visão abrangente do que uma função faz, como ela faz e de onde ela pode ser acessada. São essenciais para compilar nosso código em várias linguagens de programação.

Para entender o trabalho das assinaturas de função durante a compilação. Você pode ler meu artigo sobre o compilador C++ — Confira o link abaixo.

Outros Recursos

Você pode conferir esses recursos para mais compreensão dos termos e conceitos escritos neste artigo.

Acredito que você tenha aprendido algo com este artigo.

Obrigado por ler. 🙂

Artigo original publicado por Mayowa Obisesan. Traduzido por Paulinho Giovannini.

Top comments (0)