# 🎯 Definição
> [!Abstract] Definição
> Funções são blocos de código reutilizáveis que executam tarefas específicas. Em [[Linguagem Rust|Rust]], elas são declaradas com a palavra-chave `fn` e seguem a convenção de nomenclatura _snake_case_. A função `main` é o ponto de entrada obrigatório para programas executáveis.
# 📝 Notas
## 1. Parâmetros e Tipagem
Diferente de variáveis locais onde o [[Linguagem Rust|Rust]] pode inferir o tipo, em assinaturas de função a **anotação de tipo é obrigatória** para todos os parâmetros.
```rust
fn main() {
exibir_soma(5, 10);
}
// x e y devem ter tipos explicitamente declarados
fn exibir_soma(x: i32, y: i32) {
println!("A soma é: {}", x + y);
}
```
## 2. Retorno de Valores
Para retornar um valor, utiliza-se a seta `->` seguida do tipo de retorno. O [[Linguagem Rust|Rust]] permite retornos implícitos (a última expressão do bloco) ou explícitos (usando a palavra-chave `return`).
```rust
fn cinco() -> i32 {
5 // Sem ponto e vírgula = Expressão de retorno implícito
}
fn soma(a: i32, b: i32) -> i32 {
return a + b; // Retorno explícito (opcional aqui)
}
```
## 3. Declarações vs. Expressões
[[Linguagem Rust|Rust]] é uma linguagem baseada em expressões, e entender a diferença é vital para funções:
- **Declarações (Statements):** Instruções que realizam uma ação e não retornam valor. Terminam com `;`.
- **Expressões (Expressions):** Avaliam para um valor resultante. **Não terminam com `;`** quando usadas como retorno.
> [!Warning] Cuidado com o Ponto e Vírgula
> Se você adicionar um `;` ao final da última linha de uma função que deveria retornar um valor, ela passará a retornar o tipo unitário `()`, causando um erro de compilação.
## 4. Convenção de Nomenclatura
O padrão oficial é o `snake_case` (letras minúsculas com sublinhados).
- Correto: `calcular_area_total()`
- Incorreto: `calcularAreaTotal()` ou `CalcularArea`
# 🔗 Conceitos relacionados
- [[Variáveis em Rust]]
- [[Regras de propriedade no Rust]]
# 📚 Referências
- [Funções - A Linguagem de Programação Rust (The Book)](https://doc.rust-lang.org/book/ch03-03-how-functions-work.html)
- [Rust by Example: Functions](https://doc.rust-lang.org/rust-by-example/fn.html)
- [27: Ownership is cool in Rust - YouTube](https://www.youtube.com/watch?v=FHNESx9S7ZM)