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;
}
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;
}
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.
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.