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

Funciones

Definir funciones, valores de retorno y anotaciones de efectos.

Funciones

En Sounio, las funciones son expresiones: la última expresión en un bloque es el valor de retorno.

Funciones Básicas

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

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

Llamadas a Funciones

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

Declaración de Efectos

La spec requiere que los efectos colaterales se declaren con with ... en la firma de la función.

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

Se pueden combinar múltiples efectos:

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

Métodos (impl)

Las funciones se pueden definir sobre 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 de la spec: genéricos, closures y funciones de orden superior forman parte del diseño, pero algunas combinaciones pueden seguir evolucionando en el compilador.

¿Qué sigue?