Functions
Las funciones en Nyx se definen con fn, reciben parámetros tipados y declaran su tipo de retorno después de ->. Admiten valores de parámetro por defecto, lo que hace más limpios los sitios de llamada cuando existe un valor por defecto razonable.
Código
// Funciones: parámetros, valor de retorno, default parameters
fn suma(a: int, b: int) -> int {
return a + b
}
fn saludar(nombre: String, saludo: String = "Hola") -> String {
return saludo + ", " + nombre + "!"
}
fn describir(n: int) -> String {
if n > 0 {
return "positivo"
}
if n < 0 {
return "negativo"
}
return "cero"
}
fn main() -> int {
let resultado: int = suma(3, 4)
print("3 + 4 = " + int_to_string(resultado))
print(saludar("Mundo"))
print(saludar("Nyx", "Buenos dias"))
print("42 es " + describir(42))
print("-5 es " + describir(-5))
print("0 es " + describir(0))
return 0
}
Salida
3 + 4 = 7 Hola, Mundo! Buenos dias, Nyx! 42 es positivo -5 es negativo 0 es cero
Explicación
Las funciones se declaran con la palabra clave fn seguida del nombre de la función, una lista de parámetros entre paréntesis y el tipo de retorno. Cada parámetro tiene un nombre y un tipo separados por dos puntos. El cuerpo de la función es un bloque encerrado entre { }.
Los valores de parámetro por defecto se escriben como param: Type = value. Cuando quien llama omite ese argumento, se usa el valor por defecto automáticamente. En saludar, llamar a saludar("Mundo") usa el saludo por defecto "Hola", mientras que saludar("Nyx", "Buenos dias") lo reemplaza.
La función incorporada int_to_string convierte un entero a su representación en cadena. Nyx no coacciona tipos de forma implícita, así que hay que convertir explícitamente al construir cadenas a partir de valores que no son strings.
Las funciones pueden tener múltiples sentencias return. El compilador exige que todos los caminos devuelvan un valor del tipo declarado — cualquier rama que termine sin devolver un valor produce un error de compilación.