Localized V2 rewrite for this language is in progress. Showing English-first content for now.

Funções

Definição de funções, valores de retorno e anotações de efeitos.

Funções

Em Sounio, funções são expressões: a última expressão de um bloco é o valor de retorno.

Funções Básicas

fn add(a: i32, b: i32) -> i32 {
    a + b
}

fn greet(name: string) {
    print("Hello, ")
    println(name)
}

Chamadas de Função

let sum = add(3, 5)  // 8
greet("World")       // Hello, World!

Declaração de Efeitos

A especificação exige que efeitos colaterais sejam declarados com with ... na assinatura da função.

fn log(msg: string) with IO {
    println(msg)
}

Vários efeitos podem ser combinados:

fn safe_div(a: i32, b: i32) -> i32 with Panic {
    if b == 0 {
        panic("division by zero")
    }
    a / b
}

Métodos (impl)

Funções podem ser definidas em tipos:

struct Point {
    x: f64,
    y: f64,
}

impl Point {
    fn new(x: f64, y: f64) -> Point {
        Point { x: x, y: y }
    }

    fn distance(&self, other: &Point) -> f64 {
        let dx = self.x - other.x
        let dy = self.y - other.y
        sqrt(dx * dx + dy * dy)
    }
}

Nota da spec: genéricos, closures e funções de ordem superior fazem parte do design, mas algumas combinações podem ainda estar evoluindo no compilador.

O que vem a seguir?