Una funzione è già stata introdotta: main()
- il punto di partenza di ogni programma D. Una funzione può restituire un valore (o essere dichiarata con void
se non restituisce nulla) e accettare un numero arbitrario di argomenti:
int add(int lhs, int rhs) {
return lhs + rhs;
}
auto
Se il tipo di ritorno è definito come auto
, il compilatore D deduce automaticamente il tipo di ritorno. Di conseguenza, più istruzioni return
devono restituire valori con tipi compatibili.
auto add(int lhs, int rhs) { // restituisce `int`
return lhs + rhs;
}
auto lessOrEqual(int lhs, int rhs) { // restituisce `double`
if (lhs <= rhs)
return 0;
else
return 1.0;
}
Le funzioni possono opzionalmente definire argomenti predefiniti. Questo evita il noioso lavoro di dichiarare ridondanti overload di funzioni.
void plot(string msg, string color = "red") {
...
}
plot("D rocks");
plot("D rocks", "blue");
Una volta specificato un argomento predefinito, tutti gli argomenti successivi devono essere anch'essi predefiniti.
Le funzioni possono essere dichiarate anche all'interno di altre funzioni, dove possono essere utilizzate localmente e non sono visibili al mondo esterno. Queste funzioni possono comunque accedere agli oggetti che sono locali allo scope del genitore:
void fun() {
int local = 10;
int fun_secret() {
local++; // questo è legale
}
...
Queste funzioni annidate sono chiamate delegati e verranno spiegate più approfonditamente a breve.