Manuel de suivi dynamique Solaris

Expressions conditionnelles

Bien que le langage D ne prenne pas en charge de constructions if-then-else, il supporte les expressions conditionnelles simples employant les opérateurs ? et :. Ces opérateurs permettent d'associer un triplet d'expressions, la première expression étant utilisée pour déterminer de manière conditionnelle l'une des deux autres. Vous pourriez, par exemple, utiliser l'énoncé en langage D suivant pour définir une variable x sur l'une des deux chaînes en fonction de la valeur de i :

x = i == 0 ? "zero" : "non-zero";

Dans cet exemple, l'expression i == 0 est évaluée en premier pour déterminer si elle est vraie ou fausse. Si la première expression est vraie, la seconde est évaluée et l'expression ?: renvoie sa valeur. Si la première expression est fausse, la troisième est évaluée et l'expression ?: renvoie sa valeur.

Comme pour tout opérateur en D, vous pouvez utiliser plusieurs opérateurs ?: dans une seule expression, de manière à créer plus d'expressions complexes. Par exemple, l'expression suivante devra prendre une variable char c contenant l'un des caractères 0-9, a-z ou A-Z et renvoyer la valeur de ce caractère une fois interprété comme un chiffre dans un nombre entier hexadécimal (base 16) :

hexval = (c >= '0' && c <= '9') ? c - '0' :
    (c >= 'a' && c <= 'z') ? c + 10 - 'a' : c + 10 - 'A';

La première expression utilisée avec ?: doit être un pointeur ou un nombre entier pour pouvoir déterminer si sa valeur est vraie. La seconde et la troisième expression peuvent appartenir à n'importe quel type compatible. Vous ne pouvez pas construire d'expression conditionnelle lorsque, par exemple, un chemin d'accès renvoie une chaîne alors qu'un autre chemin d'accès renvoie un nombre entier. La seconde et la troisième expression ne peuvent pas non plus invoquer de fonction de suivi comme trace() ou printf(). Si vous souhaitez assurer le suivi conditionnel des données, utilisez plutôt un prédicat, comme indiqué dans le Chapitre1Introduction.