En C#, il arrive parfois qu'il y ait des chemins de code qui ne retournent pas de valeur, et c'est bien que le compilateur renvoie des erreurs et vous permette de les corriger. Cependant, il arrive parfois STRUCTURELLEMENT qu'il n'y ait pas d'endroit où il ne le fait pas, mais l'ALGORITHME empêcherait cette structure de se produire.
Voici un exemple simple et fabriqué.
public static int test1(bool a)
{
if (a) return 1;
if (!a) return 2;
}
Évidemment, les gens me diront que mon "algorithme" est stupide et que mon deuxième test est redondant et que je devrais simplement faire.
public static int test1(bool a)
{
if (a) return 1;
else return 2;
}
ou même
public static int test1(bool a)
{
if (a) return 1;
return 2;
}
J'ai choisi délibérément cet exemple "redondant" simple, plutôt que mes algorithmes du monde réel, car je veux me concentrer spécifiquement sur ce problème, et non sur les 10 différentes façons dont j'aurais pu écrire l'algorithme :)
Alors, quelles sont les façons possibles de traiter cela, et quels sont les avantages et les inconvénients de chacune.
1) est ce que nous venons de couvrir, et c'est refactoriser l'algorithme. Parfois, cela peut ne pas être possible, ou le résultat final peut ne pas être aussi performant, facile à lire/comprendre ou à entretenir.
une autre consiste simplement à retourner quelque chose qui ne se produira jamais, comme null... mais dans ce cas, je travaille avec un entier et je devrais mettre 0, ce qui semble encore plus sale.
public static int test1(bool a)
{
if (a) return 1;
if (!a) return 2;
//ce code n'arrive jamais, mais je dois garder le compilateur satisfait
return 0;
}
ou utiliser des exceptions
public static int test1(bool a)
{
if (a) return 1;
if (!a) return 2;
throw new Exception("ce code n'arrive jamais, mais je dois garder le compilateur satisfait");
}
Cependant, à chaque fois que j'ai traité avec cela, quel que soit la technique que j'utilise, je ne suis pas satisfait du résultat et je me sens un peu mal à l'aise.
Y a-t-il des alternatives?