AnyCompiler

Funções

Os parâmetros e o tipo de retorno de uma função sempre são anotados explicitamente. A última expressão no corpo de uma função — escrita sem ponto e vírgula no final — se torna seu valor de retorno; você raramente precisa de uma palavra-chave return explícita.

fn add(a: i32, b: i32) -> i32 {
    a + b // no semicolon - this is the return value
}

fn main() {
    let sum = add(3, 4);
    println!("sum = {}", sum);
}
Output
sum = 7

Expressões vs. instruções

Essa distinção percorre toda a linguagem, não só os corpos de funções: um bloco { ... } é em si uma expressão, e seu valor é o que quer que sua última linha avalie, desde que essa linha não tenha ponto e vírgula. Adicione um ponto e vírgula, e ele se torna uma instrução, sem valor.

fn main() {
    let y = {
        let x = 3;
        x + 1 // expression, no semicolon - becomes the block's value
    };
    println!("y = {}", y);
}
Output
y = 4

Próximo: controle de fluxo — if como expressão, e as três formas de loop do Rust.

Practice Exercise

Escreva uma função multiply(a: i32, b: i32) -> i32 que retorne a * b, depois imprima multiply(6, 7).