Comme certains l'ont dit, il n'y a rien de mal à avoir de multiples conditions simples dans une instruction if, mais j'envisagerais de modifier la mise en forme en :
if ( cave > 0
&& training > 0
&& mobility > 0
&& sleep > 0 )
Alternativement, je changerais l'utilisation de ces variables en tant qu'entiers, en variables bool, c'est-à-dire isCave
, hasTraining
ou similaire, puis définissez le bool approprié plus près de l'endroit où votre code définit les différentes propriétés ( Editar: Et éventuellement, retour anticipé si c'est faux, pour éviter d'autres calculs inutiles). Cela simplifierait votre instruction if par rapport à celle du bloc de code suivant, qui présente en outre une variante pouvant être utilisée si les conditions deviennent légèrement plus complexes ou si vous souhaitez faciliter la lecture de l'instruction if :
var isCave = cave > 0; # What does cave > 0 mean?
var hasTraining = training > 0;
var isMobile = mobility > 0;
var isNotSleeping = sleep > 0; # What does sleep > 0 indicate? Unclear
if (isCave && hasTraining && isMobile && isNotSleeping ) {
// Do your thing
}
En d'autres termes, les conditions multiples dans votre déclaration if ne sont pas votre plus grande odeur de code, je me concentrerais sur le fait de donner à vos variables de meilleurs noms indiquant clairement ce que la valeur indique. Cela améliorerait la lecture et la compréhension de votre code, bien plus qu'une syntaxe étrange pour éviter les conditions multiples.
1 votes
Il y avait une bonne réponse si ces valeurs ne peuvent être que 0 ou positives (jamais négatives, ou jamais TRES TRES grandes)
0 votes
@JaromandaX j'ai pensé à ça aussi !
3 votes
Quel est le problème avec
if (cave && training && mobility && sleep)
?3 votes
@Alex travaille si les valeurs ne peuvent jamais être négatives.
0 votes
Ouais, le truc négatif est un problème ! Merci quand même
0 votes
Et s'il y avait plus de variables impliquées alors...
5 votes
@Alex si l'une des valeurs était 0 et l'autre 4, cela passerait votre test (et ne répondrait pas aux exigences de l'OP).
1 votes
@JamesDonnelly vrai :P
36 votes
Quel est le problème avec la déclaration originale ? 1. Elle est simple. 2. Elle est concise. 3. Il est clair. 4. Il fait exactement ce que vous voulez qu'il fasse. Aucune autre suggestion sur cette page ne peut satisfaire à toutes ces exigences.
13 votes
Ce fil de discussion est rempli d'échantillons de code sur-ingénierie et mignon. Il y a rien avec votre déclaration "si". Si vous avez plus de quatre conditions, je vous suggère d'utiliser des drapeaux intermédiaires (
valid_location && valid_status
).7 votes
Je ne vois pas comment utiliser
&& > 0
plusieurs fois dans une déclaration if une fois pour être une violation de DRY. Si vous devez utiliser le même ensemble de conditions à plusieurs endroits, placez-le dans une fonction ou dans le prototype de cette "classe". Être intelligent ne fera que rendre les choses plus ennuyeuses à déboguer pour les autres.2 votes
La solution la plus évidente est la meilleure :
if(cave > 0 && training > 0 && mobility > 0 && sleep > 0)
. Si cela rend le code plus facile à lire, vous devriez tirer la conditionnelle dans une fonction séparée.1 votes
Pour une raison quelconque, c'est le genre de question qui fait ressortir les pires réponses des programmeurs. C'est comme si nous étions obligés de trouver des réponses inhabituelles et intelligentes. Votre travail consiste à écrire du code qui est facile à comprendre. Les réponses uniques ne vous donneront pas plus de points (en dehors de stackoverflow, du moins).
2 votes
@isanae , c'est ça le truc, dans mon code actuel j'en ai 8 autres et ça couvre deux lignes, je l'ai juste simplifié un peu pour que ce soit plus simple sur la pile. Mais quand j'ai 12 conditions et qu'elles doivent toutes être supérieures à 0, j'espérais une méthode plus subtile !
1 votes
@OllieKlein Alors vous posez peut-être la mauvaise question. Vous seriez peut-être mieux servi en affichant tout le code impliqué dans Examen du code ou dans une autre question sur Stack Overflow . Vous obtiendriez de meilleures réponses si nous avions une vue d'ensemble.
0 votes
@OllieKlein, si vous avez 12 conditions, et que chacune d'entre elles doit être calculée (et pas seulement consultée dans une base de données), vous devez vraiment réfléchir à votre logique globale ! Vous pourriez avoir besoin de le changer en retours anticipés, c'est-à-dire
cave = ... calculcation ...; if (cave <= 0) return; training = ... calculation ...; if (training <= 0) return;
. Calculer 12 conditions, et s'arrêter sur un échec, c'est beaucoup de calcul gaspillé...