Funciones

Existe una función en D que ya ha sido presentada: main(). Esta función es el punto de entrada de todo programa escrito en D. Una función puede devolver un valor (o puede ser declaraca como void y no devolver nada) y aceptar un número arbitrario de argumentos:

int add(int lhs, int rhs) {
    return lhs + rhs;
}

Tipos de retorno auto

Si el tipo de dato devuelto por una función se define como auto, el compilador de D infiere el tipo de dato automáticamente. Es por esto que si una función tiene múltiples declaraciones return, estas tienen que devolver tipos de datos compatibles.

auto add(int lhs, int rhs) { // devuelve `int`
    return lhs + rhs;
}

auto lessOrEqual(int lhs, int rhs) { // devuelve `double`
    if (lhs <= rhs)
        return 0;
    else
        return 1.0;
}

Argumentos predeterminados

Las funciones pueden definir de forma opcional argumentos con valores predeterminados. Esto evita la tediosa tarea de declarar funciones sobrecargadas redundantes.

void plot(string msg, string color = "rojo") {
    ...
}
plot("D mola");
plot("D mola", "azul");

Una vez que un argumento predeterminado ha sido especificado, el resto de argumentos de la función también tienen que tener valores predeterminados.

Funciones locales

Las funciones también puede ser declaradas dentro de otras funciones. Estas funciones se pueden usar de forma local y no son visibles fuera del ámbito de la función donde han sido declaradas. Además, estas funciones pueden acceder a objetos que son locales al ámbito de la función padre.

void fun() {
    int local = 10;
    int fun_secret() {
        local++; // esto es legal
    }
    ...

Este tipo de funciones anidadas se llaman delegates y serán explicadas con mayor detalle en breve.

En profundidad

rdmd playground.d