---
title: "O que são funções Solidity?"
description: "Tipos de Função em Solidity: View, Pure, Special, Fallback e Visibilidade de Função"
---

# O que são funções Solidity?

Existem vários tipos de funções em [Solidity](https://www.alchemy.com/overviews/solidity), incluindo view functions, pure functions, funções especiais e fallback functions. As funções também podem ser modificadas com um atributo de visibilidade de função: public, external, internal e private. Este artigo apresentará os tipos de funções em Solidity, sua sintaxe, como ler funções e a visibilidade.

## **O que são funções em Solidity?**

**Funções em Solidity são módulos de código autocontidos que realizam uma tarefa específica.** Assim como outras [linguagens de programação web3](https://www.alchemy.com/overviews/web3-programming-languages), Solidity permite que o desenvolvedor escreva código modular usando funções para eliminar a redundância de reescrever o mesmo trecho de código. Em vez disso, os devs podem chamar uma função no programa quando necessário.

## **Como escrever e ler uma função em Solidity**

Para escrever uma função em Solidity, os desenvolvedores precisam estruturá-la de acordo com sua sintaxe adequada, garantindo que os componentes básicos estejam presentes para que a função possa executar corretamente.

### **Sintaxe de função em Solidity**

Use a sintaxe a seguir para criar sua função em Solidity, como mostrado no exemplo abaixo:

1. Defina a função com a palavra-chave function
1. Crie um nome para a função, que seja único e não coincida com nenhuma das palavras-chave reservadas
1. Liste quaisquer parâmetros contendo o nome e o tipo de dado do parâmetro, ou não inclua parâmetros extras
1. Crie um bloco de instruções cercado por chaves

Nota: [eventos em Solidity](https://www.alchemy.com/overviews/solidity-events) são declarados como funções. Eventos e funções são ambos essenciais para o trabalho de alto nível em dApps.

A imagem abaixo mostra os três componentes principais de uma função em Solidity:

1. Nome da função
1. Tipo da função
1. Tipos de retorno

<ImageBlock
  src="https://media.alchemy.com/1703927821-example-of-a-function-in-solidity.png"
  alt="Um exemplo de função em Solidity"
  width={960}
  height={540}
  caption="Um exemplo de função em Solidity"
/>

## **Quais são os diferentes tipos de funções em Solidity?**

**Existem vários tipos de funções em Solidity que abordaremos nesta seção, incluindo** view functions, pure functions, funções especiais e fallback functions.

### **1. View functions**

Em Solidity, view functions são somente leitura e não podem alterar as variáveis de estado definidas em um smart contract. A sintaxe de uma view function é a seguinte:

### **2. Pure functions**

Uma pure function declara que nenhuma variável de estado será alterada ou lida. Normalmente, pure functions servem para algum utilitário ou cálculo comum. A sintaxe de uma pure function é a seguinte:

### **3. Funções especiais**

Solidity tem algumas funções especiais que você pode usar ao desenvolver um smart contract. Getter e receive functions são [funções payable](https://www.alchemy.com/docs/solidity-payable-functions) importantes para smart contracts em Solidity.

#### **Getter function**

Variáveis de estado definidas como public têm uma getter function que é criada automaticamente pelo compilador. A função tem o mesmo nome da variável e possui visibilidade external.

#### **Receive ether function**

Um contrato pode ter no máximo uma receive function. Uma receive function não pode ter argumentos, não é capaz de retornar valores e deve ter visibilidade external e mutabilidade de estado payable.

Uma receive function é executada quando uma chamada ao contrato envia Ether e não especifica nenhuma função. Essa função é declarada da seguinte forma:

### **4. Fallback function**

Em Solidity, uma fallback function é uma função external sem nome, argumentos ou valores de retorno. Fallback functions são executadas quando um identificador de função não corresponde a nenhuma das funções disponíveis em um smart contract, ou se nenhum dado foi fornecido junto com a chamada da função.

### **O que é sobrecarga de função (function overloading)?**

A sobrecarga de função ocorre quando você tem múltiplas definições para o mesmo nome de função dentro do mesmo escopo. A definição da função deve diferir uma da outra pelos tipos e/ou pelo número de argumentos na lista de argumentos. Você não pode sobrecarregar declarações de função que diferem apenas pelo tipo de retorno.

#### **Como o Vyper lida com a sobrecarga de função de forma diferente do Solidity?**

Diferente do Solidity, o Vyper, uma [linguagem pythonic baseada em Solidity](https://www.alchemy.com/overviews/solidity-vs-vyper), não permite sobrecarga de função. Tentar fazer sobrecarga de função no Vyper resultará em um erro de "Duplicate function or event name".

## **O que significa visibilidade de função?**

Especificar a visibilidade de função nos permite [**controlar quais entidades podem chamar funções**](https://www.alchemy.com/university/courses/ethereum?a=703dc50260) dentro do smart contract. Existem três tipos de chamadores:

1. O contrato principal
1. Um contrato derivado (ou seja, que herda) do contrato principal
1. Um terceiro

A visibilidade de função ajuda você a controlar qual dos chamadores acima pode executar a função. Existem quatro tipos de visibilidade de função:

1. Public
1. External
1. Internal
1. Private

A acessibilidade das funções diminui de External para Private: funções public são as mais acessíveis e funções private são as menos acessíveis.

### External vs. public

External e public são as duas visibilidades de função que podem ser chamadas de fora do contrato em que são definidas. External significa que a função pode ser chamada exclusivamente por outros contratos ou por Externally Owned Accounts (EOA). Public significa que a função pode ser chamada externamente ou de dentro do próprio contrato.

### **Internal vs. private**

Ao contrário de external e public, internal e private impedem que partes externas acessem a função. Para uma função private, apenas funções dentro do mesmo contrato podem chamá-la. Para uma função internal, funções dentro do mesmo contrato ou funções dentro de contratos derivados podem chamá-la.

## **Continue aprendendo sobre funções em Solidity**

Este artigo apresentou a você as funções em Solidity. Para continuar aprendendo, inscreva-se no [**Ethereum Developer Bootcamp da Alchemy University**](https://www.alchemy.com/university/courses/ethereum?a=703dc50260) para ter acesso a um curso intensivo gratuito e assíncrono de Solidity com duração de 7 semanas. Se os desenvolvedores forem novos no desenvolvimento em geral, o [**curso intensivo de JavaScript de 3 semanas**](https://www.alchemy.com/university/courses/js) da Alchemy University é um ótimo pré-requisito antes de iniciar um bootcamp de Ethereum.
