Skip to content

Latest commit

 

History

History
54 lines (33 loc) · 2.9 KB

File metadata and controls

54 lines (33 loc) · 2.9 KB

16. Sobrecarga de Funções

Recentemente, tenho revisitado o Solidity para revisar os detalhes e escrever um "Guia Simples de Solidity" para iniciantes (programadores mais experientes podem procurar outros tutoriais), com atualizações semanais de 1 a 3 lições.

Twitter: @0xAA_Science

Comunidade: Discord | Grupo do WeChat | Site oficial wtf.academy

Todo código e tutoriais estão disponíveis no Github: github.com/AmazingAng/WTF-Solidity


Sobrecarga

No Solidity, funções podem ser sobrecarregadas (overloaded), o que significa que funções com o mesmo nome, mas tipos de parâmetros diferentes, podem coexistir, sendo tratadas como funções distintas. É importante notar que o Solidity não permite a sobrecarga de modificadores (modifiers).

Sobrecarga de Funções

Por exemplo, podemos definir duas funções chamadas saySomething(), uma sem parâmetros que retorna "Nada" e outra que recebe um parâmetro do tipo string e retorna essa string.

function saySomething() public pure returns (string memory){
    return "Nada";
}

function saySomething(string memory algo) public pure returns (string memory){
    return algo;
}

Após a compilação pelo compilador, as funções sobrecarregadas são transformadas em seletores de função diferentes devido aos tipos de parâmetros distintos. Para mais informações sobre seletores de função, consulte Guia Simples de Solidity: 29. Seletor de Função.

Tomando como exemplo o contrato Overloading.sol, após compilação e implantação no Remix, ao chamar as funções sobrecarregadas saySomething() e saySomething(string memory something), é possível observar que elas retornam resultados diferentes, sendo tratadas como funções distintas.

Correspondência de Argumentos

Ao chamar uma função sobrecarregada, os argumentos reais passados são correspondidos aos tipos de variáveis dos parâmetros da função. Se houver múltiplas funções sobrecarregadas que correspondam aos argumentos passados, um erro será gerado. No exemplo a seguir, temos duas funções chamadas f(), uma com um parâmetro uint8 e outra com um parâmetro uint256:

function f(uint8 _in) public pure returns (uint8 out) {
    out = _in;
}

function f(uint256 _in) public pure returns (uint256 out) {
    out = _in;
}

Se chamarmos f(50), como 50 pode ser convertido tanto para uint8 quanto para uint256, um erro será gerado.

Conclusão

Nesta lição, exploramos o uso básico da sobrecarga de funções no Solidity: funções com o mesmo nome, mas com tipos de parâmetros diferentes, podem coexistir e ser tratadas como funções distintas.