Il existe une autre bonne raison d'utiliser des gardes (par opposition au code imbriqué) : Si un autre programmeur ajoute du code à votre fonction, il travaille dans un environnement plus sûr.
Pensez-y :
void MyFunc(object obj)
{
if (obj != null)
{
obj.DoSomething();
}
}
contre :
void MyFunc(object obj)
{
if (obj == null)
return;
obj.DoSomething();
}
Maintenant, imaginez qu'un autre programmeur ajoute la ligne : obj.DoSomethingElse() ;
void MyFunc(object obj)
{
if (obj != null)
{
obj.DoSomething();
}
obj.DoSomethingElse();
}
void MyFunc(object obj)
{
if (obj == null)
return;
obj.DoSomething();
obj.DoSomethingElse();
}
Bien sûr, il s'agit d'un cas simpliste, mais le programmeur a ajouté un crash au programme dans la première instance (code imbriqué). Dans le deuxième exemple (sortie anticipée avec gardes), une fois que vous avez passé la garde, votre code est protégé contre l'utilisation involontaire d'une référence nulle.
Bien sûr, un grand programmeur ne fait pas (souvent) de telles erreurs. Mais il vaut mieux prévenir que guérir - nous pouvons écrire le code de manière à éliminer complètement cette source potentielle d'erreurs. L'imbrication ajoute de la complexité. Les meilleures pratiques recommandent donc de remanier le code pour réduire l'imbrication.