Aller au contenu

Programmation D/Éléments avancés du langage

Un livre de Wikilivres.

Autres mots-clés du langage D

[modifier | modifier le wikicode]

Le langage D propose également des petits mots clés qui font sa richesse.

Ce mot clé permet de déterminer automatiquement le type d'une variable. Par exemple :

auto file = new File("pathToTxt");

La variable file sera de type File.

Ce mot clé permet d'effectuer des tests et si un échec se produit, il lève une exception (par exemple, on souhaite ici vérifier que maFonction() retourne 1).

assert(maFonction() == 1);

Vous avez la possibilité de mettre des portions de code dans des blocks debug.

Utilisation :

debug(niveauDebug){

}
debug(debugIdentifiant){

}

Cas d'utilisation : ceci permet aux équipes de développement de travailler sur une version orientée développeur, où l'on pourra afficher de nombreux message d'information ainsi que des tests.

Ces portions de code seront compilées si et seulement si l'option -d-debug <niveauDebug/debugIdentifiant> est précisée.

ldc *.d -d-debug 3

ou encore

ldc *.d -d-debug graphicEngineTeam

Ainsi, on activera les portions de debug des blocks de niveau 3 ou dans l'autre cas, ceux dont l'identifiant est "graphicEngineTeam".

Comme vous le voyez, le langage D n'en finit pas d'intégrer de superbes fonctionnalités nativement ! Un test unitaire[1] permet de vérifier le comportement de votre code. Par exemple, vous avez une classe magicien avec des méthodes comme :

  • lancerBouleDeFeu
  • soin
  • marcher
  • couvrir

À la suite de la définition de la classe, on écrit un exemple d'utilisation, permettant de garantir son fonctionnement.

class Magicien : Humain
{
    private:

    public:
        this(){
            
        }
        ~this(){
            
        }
        lancerBouleDeFeu(){
            
        }
        marcher(){
            
        }
        couvrir(){
            
        }
        soin(){
            
        }
}
unittest
{
    Magicien gandalf = new Magicien();
    gandalf.lancerBouleDeFeu();
    gandalf.marcher();
    gandalf.marcher();
    gandalf.couvrir();
    gandalf.soin();
}

Les tests unitaires sont compilés si l'option -unittest est utilisé au moment de la compilation

ldc Magicien.d -unittest

Ce mot-clé permet de proposer différentes versions de votre logiciel (par exemple, une version familiale, une version professionnelle, une version « Black », etc. Et bien au lieu d'avoir trois programmes différents, vous pouvez mettre le code spécifique à chaque version dans le block version correspondant, par exemple :

import tango.io.Stdout;

uint FAMILIALE      = 0;
uint PROFESSIONNELLE= 1;
uint BLACK          = 2;

void main()
{
    Stdout("Bonjour").nl;
    version(FAMILIALE)
    {
        Stdout("Bienvenue dans la version familiale").nl;
    }
    version(PROFESSIONNELLE)
    {
        Stdout("Bienvenue dans la version professionnelle").nl;
    }
    version(BLACK){
        Stdout("Bienvenue dans la version black edition").nl; 
    }
}

Admettons que vous avez enregistré ce code dans le fichier version.d. Pour tester les cas :

1/ Sans spécifier la version :

ldc version.d
./version

2/ Avec la version FAMILIALE :

ldc -d-version FAMILIALE version.d
./version

3/ Avec la version PROFESSIONNELLE :

ldc -d-version PROFESSIONNELLE version.d
./version

4/ Avec la version BLACK :

ldc -d-version BLACK version.d
./version

5/ Utiliser 2 versions :

ldc -d-version PROFESSIONNELLE -d-version BLACK version.d
./version

Il existe des versions automatiquement détectées et par conséquent réservées, comme :

  • le type de compilateur:
    • dmd identifiant -> DigitalMars
    • ldc identifiant -> LDC
  • l'architecture du processeur identifiant :
    • x86
    • X86_64
  • la plateforme identifiant :
    • linux
    • Win32
    • Windows
    • darwin
    • freebsd
    • solaris
    • Posix
    • GNU
pragma(msg, "Bonjour");
  1. Si vous n'êtes pas familier avec les tests, vous pourrez découvrir ces notions de développement dans Introduction au test logiciel