J'ai un vieux code qui doit être ramené à la vie, il utilise environ 10-15 booléens qui dansent autour de la classe, comme ceci:Quelles sont les alternatives à l'utilisation de nombreux commutateurs booléennes
if (condition)
{
bool1 = true
}
if (condition)
{
bool2 = true
}
...
puis
if (bool1 == true && bool2 == true && bool3 == false)
{
do something
}
else if (bool1 == true && bool2 == false && bool3 == false)
{
do something
}
...
Est-il possible d'éviter ce type de codage? Existe-t-il de meilleures façons de mettre en œuvre cela? Peut-être en utilisant une carte? Je voudrais améliorer la lisibilité et les performances globales, puisque ce morceau de code a une longueur de plus de 1.000 lignes.
Après des commentaires ajouter par exemple plus précis:
boolean bool1 = false, bool2 = false, bool3 = false, bool4 = false, bool5 = false,
bool6 = false, bool7 = false, bool8 = false, bool9 = false, bool10 = false;
if (string_object.startsWith("Pattern1"))
{
bool1 = true
}
if (string_object.startsWith("Pattern2")
{
bool2 = true
}
if (string_object.startsWith("Pattern3")
{
bool3 = true
}
if (string_object.startsWith("Pattern4")
{
bool4 = true
}
if (string_object.startsWith("Pattern5")
{
bool5 = true
}
// and so on...
if (system_type.equals("type1"))
{
if (bool1 == true && bool2 == true && bool3 == false)
{
system_value.set("value1")
}
else if (bool1 == true && bool2 == false && bool3 == false)
{
system_value.set("value2")
}
else if (bool1 == true && bool3 == false && bool4 == true)
{
system_value.set("value3")
}
}
else if (system_type.equals("type2"))
{
if (bool1 == true && bool2 == true && bool4 == true)
{
system_value.set("value1")
}
else if (bool1 == true && bool3 == false && bool5 == true)
{
system_value.set("value4")
}
else if (bool1 == true && bool3 == false && bool4 == true)
{
system_value.set("value5")
}
}
// and so on...
1. 'bool1 == true' ->' bool1' 2. la compression dépend de l'ensemble des conditions. –
Cela dépend du but de tous les booléens. Rappelez-vous que l'écriture de code concerne autant la communication avec les futurs développeurs/responsables que le fait de dire à l'ordinateur ce qu'il doit faire. Si ces booléens ont des significations claires dans le contexte de ce que le programme doit faire, alors changez simplement leurs noms pour rendre ces significations claires. Si votre code est plus significatif après un refactoring, effectuez le refactoring. –
Je suggère d'utiliser des méthodes avec de bons noms, donc vous voyez du nom ce que cette condition signifie réellement, pour évaluer vos "conditions" et les utiliser à la place ces 'bool1'' bool2' ... De cette façon vous pouvez incapsuler cette logique, évitez d'utiliser des variables globales et améliorez la lisibilité du code. –