Pular para o conteúdo
Nesta página

Funções

Funções Básicas

fn greet(name: str) -> str {
    "Hello, {name}!"
}

fn add(a: int, b: int) -> int {
    a + b   // implicit return — last expression is the return value
}

Retorno Explícito

fn absolute(x: int) -> int {
    if x < 0 {
        return -x
    }
    x
}

Sem Tipo de Retorno

Funções que não retornam um valor omitem o -> Type:

fn say_hello(name: str) {
    print("Hello, {name}!")
}

Parâmetros

Anotações de Tipo

fn process(x: int, y: f64, name: str) -> str {
    "{name}: {x}, {y}"
}

Argumentos Nomeados

fn create_user(name: str, age: int, email: str) -> User {
    User { name, age, email }
}

// Call with named arguments
create_user(name: "Alice", age: 30, email: "alice@example.com")

Valores Padrão

Parâmetros podem ter valores padrão em campos de struct e padrões de builder.

Lambdas / Closures

Lambdas usam a sintaxe |params| expr:

// Single expression
let double = |x| x * 2
let add = |a, b| a + b

// With type annotations
let square = |x: int| -> int { x * x }

// Multi-line body
let process = |x: int| -> int {
    let y = x * 2
    y + 1
}

Closures Capturam Variáveis

let multiplier = 3
let multiply = |x| x * multiplier  // captures `multiplier`
print(multiply(5))  // 15

Funções de Ordem Superior

Funções podem receber funções como parâmetros e retornar funções:

fn apply(f: fn(int) -> int, x: int) -> int {
    f(x)
}

fn make_adder(n: int) -> fn(int) -> int {
    |x| x + n
}

let add5 = make_adder(5)
print(add5(10))  // 15

Métodos

Métodos são definidos dentro de blocos impl. Veja Estruturas de Dados para detalhes.

struct Circle {
    radius: f64,
}

impl Circle {
    fn area(self) -> f64 {
        3.14159 * self.radius * self.radius
    }

    fn new(radius: f64) -> Circle {
        Circle { radius }
    }
}

let c = Circle { radius: 5.0 }
print(c.area())

Decoradores

Funções podem ser anotadas com decoradores:

@test
fn test_addition() {
    assert_eq(2 + 2, 4, "basic addition")
}

@memoize
fn fibonacci(n: int) -> int {
    if n <= 1 { n } else { fibonacci(n - 1) + fibonacci(n - 2) }
}

@deprecated("use new_function() instead")
fn old_function() {
    // ...
}

Veja Decoradores para a lista completa.

Buscar no Zolo

9 resultados

enespt-br