Fonctions

Une fonction a déjà été introduite: main() - le point de départ de chaque programme en D. Une fonction peut retourner une valeur (où être declarée avec void si elle ne retourne rien) et accepter un nombre arbitraire d'arguments:

int additioner(int gauche, int droite){
    return gauche + droite;
}

Type de retour auto

Si le type de retour défini est auto, le compilateur D déduit le type de retour automatiquement. Si il y a plusieurs instructions return, elles doivent renvoyer des types compatibles.

auto additioner(int gauche, int droite) // retourne un entier
{
    return gauche + droite;
}

auto inferieurOuEgal() // retourne un double
{
    if(gauche <= droite)
        return 0;
    else
        return 1.0;
}

Arguments par défauts

Les fonctions peuvent éventuellement définir des valeurs par défaut pour leur paramètres. Cela évite d'avoir à écrire des surcharges de fonctions redondantes.

void plot(string msg, string couleur = "rouge")
{
    //...
}

plot("D est génial !");
plot("D est génial !", "bleu");

Une fois qu'un paramètre par défaut a été spécifié, tous les paramètres qui le suivent doivent être des paramètres par défaut également.

Fonctions locales

Une fonction peut être déclarée à l'intérieur d'une autre fonction. Elle peut alors être utilisée dans la portée où elle est définie mais n'est pas visible pour le reste du monde. Ces fonctions peuvent même avoir accès à des objets qui sont dans la portée parente de la portée locale:

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

Ces fonctions imbriquées sont appelées des delegates mais nous y reviendrons plus en détail plus tard.

Pour aller plus loin

rdmd playground.d