Comment gérez-vous d'énormes conditions if?

C'est quelque chose qui me dérange dans toutes les langues que j'ai utilisées, j'ai une instruction if mais la partie conditionnelle a tellement de vérifications que je dois la diviser sur plusieurs lignes, utiliser une instruction if imbriquée ou simplement accepter que c'est moche et continuer ma vie.

Y a-t-il d'autres méthodes que vous avez trouvées qui pourraient être utiles à moi et à quelqu'un d'autre qui rencontre le même problème ?

Exemple, tout sur une seule ligne :

if (var1 = true && var2 = true && var2 = true && var3 = true && var4 = true && var5 = true && var6 = true)
{

Exemple, multiligne :

if (var1 = true && var2 = true && var2 = true
 && var3 = true && var4 = true && var5 = true
 && var6 = true)
{

Exemple imbriqué :

if (var1 = true && var2 = true && var2 = true && var3 = true)
{
     if (var4 = true && var5 = true && var6 = true)
     {
请先 登录 后评论

4 réponses

TimM

J'ai recours à des valeurs booléennes séparées :

Bool cond1 == (var1 && var2);
Bool cond2 == (var3 && var4);

if ( cond1 && cond2 ) {}
请先 登录 后评论
pix0r

J'ai vu beaucoup de personnes et d'éditeurs indenter chaque condition de votre instruction if avec une tabulation, ou la faire correspondre avec la parenthèse ouverte :

if (var1 == true
    && var2 == true
    && var3 == true
   ) {
    /* do something.. */
}

Je mets généralement le parenthèse fermante sur la même ligne que la dernière condition :

if (var1 == true
    && var2 == true
    && var3 == true) {
    /* do something.. */
}

Mais je ne pense pas que ce soit aussi propre.

请先 登录 后评论
Coincoin

Séparez la condition en plusieurs booléens, puis utilisez un booléen maître comme condition.

bool isOpaque = object.Alpha == 1.0f;
bool isDrawable = object.CanDraw && object.Layer == currentLayer;
bool isHidden = hideList.Find(object);

bool isVisible = isOpaque && isDrawable && ! isHidden;

if(isVisible)
{
    // ...
}

Mieux encore :

public bool IsVisible {
    get
    {
        bool isOpaque = object.Alpha == 1.0f;
        bool isDrawable = object.CanDraw && object.Layer == currentLayer;
        bool isHidden = hideList.Find(object);

        return isOpaque && isDrawable && ! isHidden;
    }
}

void Draw()
{
     if(IsVisible)
     {
         // ...
     }
}

Assurez-vous de donner à vos variables un nom qui indique en fait une intention plutôt qu'une fonction. Cela aidera grandement le développeur à maintenir votre code... ça pourrait être VOUS !

请先 登录 后评论
Mark Renouf

Eh bien, tout d'abord, pourquoi pas :

si (var1

请先 登录 后评论
  • 4 abonnés
  • 0 favoris,415 Feuilleter
  • Teifion posée à 2023-03-27 14:38