web-dev-qa-db-fra.com

Est-ce une mauvaise pratique d'ajouter "Faux ou" ou "Vrai et" aux conditionnels?

Est-ce une mauvaise pratique d'ajouter false or ... ou true and ... Pour la promotion de la générosité de code et/ou de la facilité d'utilisation?

Un péché:

SELECT *
FROM table
WHERE TRUE
AND IsEnabled
AND SomeField = some_value
AND SomeOtherField != some_value

en SQL ou en JavaScript par exemple:

if (false
      || prop === 'category'
      || prop === 'subCategory'
      || prop === 'productLogisticGroup'
      || prop === 'productName'
      || prop === 'color'
      || prop === 'configuration'
)

Cela permet d'ajouter ou de supprimer des conditions un peu plus faciles en supprimant le processus de réflexion si la condition est sur le bord ou non. Est-ce mauvais en quelque sorte?

8
Nae

Il existe des cas d'angle utiles, mais vos exemples n'ont pas l'air particulièrement significatif pour moi. Je l'utilise surtout pour le débogage, si je voulais temporairement basculer d'un bloc ou je veux me forcer à un peu de blocage. Je l'utilise également pour des boucles continues telles que les méthodes de thread où la condition de pause n'est pas si simple ou la condition de rupture dépend d'un calcul interne plutôt que d'un booléen externe. Mais alors le vrai ou le faux est en fait significatif. Dans vos exemples, ils sont purement esthétiques et sont susceptibles d'élever des sourcils oculaires si quelqu'un d'autre lit votre code.

Cela ne fera pas beaucoup de mal cependant, si c'est ainsi que vous roulez, plus de puissance pour vous.

6
Martin Maat

Je pense que le compilateur le supprimera généralement, donc cela ne fait aucun mal. Je ne pense pas que cela ajoute quelque chose d'utile non plus.

Cependant, la plupart du temps où j'ai vu cela, c'est quand quelqu'un construit une chaîne de requête SQL au moment de l'exécution, et c'est généralement une mauvaise pratique. Il est facile d'introduire des bugs (ou des vulnérabilités d'injection SQL) et durement à tester ou à déboguer.

Fwiw, voici comment j'écrirais vos exemples:

SELECT *
FROM table
WHERE IsEnabled
  AND SomeField = some_value
  AND SomeOtherField != some_value


switch (prop)
{
     case 'category';
     case 'subCategory';
     case 'productLogisticGroup';
     case 'productName';
     case 'color';
     case 'configuration';
         DoTheThing();
         Break;
}
1
Robin Bennett

J'aurais tendance à écrire

if (   prop === 'category'
    || prop === 'subCategory'
    || prop === 'productLogisticGroup'
    || prop === 'productName'
    || prop === 'color'
    || prop === 'configuration')

parce que Xcode le gère bien, et parce que vous pouvez supprimer facilement toutes les lignes. Première et dernière ligne sont légèrement plus difficiles.

0
gnasher729