Comment coder une expression booléenne
Votre code doit raconter une histoire; par conséquent toute expression booléenne telle que :
if ( A )
{
//code omitted for brevity
}
doit être écrite sous la forme d'une phrase positive.
Par défaut, et dans la mesure du possible, vous devez toujours formuler de manière positive l'expression booléenne que vous êtes sur le point de coder.
Pour réaliser cela, substituer l'expression A
par une méthode d'extension définie sur le type d'objet qui vous semble le plus approprié.
Cette méthode d'extension doit être nommée en utilisant l'une des trois options ci-dessous:
- avoir le préfixe :
- Is;
- Has;
- Can.
- Être Un verbe à la troisième personne du singulier comme :
- Exists;
- Etre Une séquence de mots qui représente une phrase en langage naturel dont on a supprimé les espaces entre les mots.
Pour mettre en œuvre la méthodologie de création de nom d'une méthode ou d'une propriété qui renvoie un booléen reportez vous à la section correspondante : Comment nommer une méthode ou une propriété qui renvoie un booléen.
Le code snippet ci-dessus peut donc être réécrit de la manière suivante:
var myObject = ... //code omitted for brevity
if ( myObject.IsXXX() )
{
//code omitted for brevity
}
ou bien
var myObject = ... //code omitted for brevity
if ( myObject.HasXXX() )
{
//code omitted for brevity
}
ou bien
var myObject = ... //code omitted for brevity
if ( myObject.CanXXX() )
{
//code omitted for brevity
}
Notez qu'il faut toujours commencer par coder l'usage de la méthode d'extension avant même de coder son implémentation. Si vous utilisez la méthodologie TDD vous trouverez cette approche normale, dans le cas contraire cette approche devrait vous inciter à mettre en œuvre cette méthodologie.
Une fois que vous avez défini le nom et l'usage de la méthode d'extension, il reste à l'implémenter.
La première ligne de code de cette méthode d'extension doit être :
throw new NotImplementedException();
Ceci est la garantie que la première exécution du premier test unitaire associée à cette méthode va à l'échec.
Si vous êtes dans une approche TDD et si vous avez défini les spécifications associées à cette méthode d'extension et bien commencez par mettre en place le code qui fait passer la première spécification.
Pour savoir commencer définir les spécifications d'une méthode booléenne, reportez vous à la section correspondante : Comment nommer une méthode ou une propriété qui renvoie un booléen.
Si vous n'avez pas défini de spécifications et que vous souhaitez déjà coder l'expression booléenne sous la forme d'une méthode d'extension, appuyez vous sur les règles suivantes pour structurer le contenu de votre code:
Quand vous développez une méthode, vous devez en sortir le plus vite possible. Autrement dit si vous pouvez déterminer un cas de figure qui permet de faire immédiatement un
return
écrivez d'abord ce cas.La dernière instruction d'une méthode booléenne est toujours:
return false;
le bloc de code qui précède la dernière ligne de code d'une méthode booléenne est toujours de la forme:
if ( A ) { //code omitted for brevity return true; }
L'expression
A
ci-dessus peut être exprimée en pensée positive ou en pensée négative.
Une méthode booléenne doit donc toujours être structurée de la manière suivante:
public static bool IsIn(this string input, string[] values)
{
//code omitted for brevity
if ( A )
{
//code omitted for brevity
return true;
}
return false;
}
ou bien
public static bool IsIn(this string input, string[] values)
{
//code omitted for brevity
if ( ! A )
{
//code omitted for brevity
return true;
}
return false;
}
Vous verrez dans la section suivante comment coder une expression négative sans utiliser l'opérateur de négation !
.
Quand vous codez un
if
procédez de la manière suivante: Tapez le mot cléif
puis attendez que l'IntelliSense vous montre l'existence du code snippet associé:Appuyez ensuite deux fois sur la touche
TAB
. Visual Studio substitue le mot cléif
par le code:
if (true)
{
}
Notez que Visual Studio vous incite par défaut à penser et à coder positif.
Il ne vous reste plus qu'à remplacer true
par une expression booléenne codée en utilisant la technique décrite dans cette section.
Si la méthode que vous développez contient une boucle for
ou foreach
, vous pouvez structurer votre boucle en vous appuyant sur la règle suivante:
Quand vous développez une boucle
for
ouforeach
, vous devez en sortir le plus vite possible. Autrement dit si vous pouvez déterminer un cas de figure qui permet de passer immédiatement à l'itération suivante ,écrivez d'abord ce cas.Si vous pouvez déterminer un cas de figure qui permet de sortir de la boucle, écrivez d'abord ce cas.
Autrement dit, une boucle for
ou foreach
doit toujours être codée de la manière suivante:
foreach (var item in input)
{
if (A)
{
//code omitted for brevity
continue;
}
if (B)
{
//code omitted for brevity
return result;
}
//code omitted for brevity
}
A compléter