Il a été clairement dit, bien que l’avis n’en reste pas moins, que le fait d’abandonner des accolades sur une seule déclaration if
n’est pas idéal pour la maintenabilité et la lisibilité.
Mais qu'en est-il?
if (lemons) { document.write("foo gave me a bar"); }
C'est encore plus compressé, et si élargi, les accolades ne seront pas oubliées. Y a-t-il des problèmes flagrants, et si non, quelles sont les considérations? J'ai l'impression que c'est toujours très lisible, au moins autant qu'un opérateur ternaire de toute façon. Il me semble que les opérateurs ternaires ne sont pas autant suggérés pour des raisons de lisibilité, bien que cette conclusion ne soit pas aussi unanime.
Le jumeau diabolique en moi veut suggérer ceci, bien que la syntaxe ne soit évidemment pas faite pour cela, et qu’elle n’est probablement qu’une mauvaise idée.
(syntax) ? document.write("My evil twin emerges"): "";
J'ai vu le comportement de l'opérateur &&
en court-circuit utilisé pour y parvenir, bien que les personnes qui ne sont pas habituées à cela puissent avoir du mal à lire ou même appeler cela un anti-motif:
lemons && document.write("foo gave me a bar");
Personnellement, je vais souvent utiliser if
sur une seule ligne sans crochets, comme ceci:
if (lemons) document.write("foo gave me a bar");
Si je dois ajouter d'autres déclarations, je les mettrai à la ligne suivante et ajouterai des crochets. Étant donné que mon IDE applique une indentation automatique, les objections de maintenabilité à cette pratique sont sans objet.
Je l'utilise comme ça:
(lemons) ? alert("please give me a lemonade") : alert("then give me a beer");
Vous pouvez utiliser ce format, qui est couramment utilisé en PHP:
(lemon) ? document.write("foo gave me a bar") : document.write("if condition is FALSE");
// Un autre exemple simple
var a = 11;
a == 10 ? alert("true") : alert("false");
Cette ligne est beaucoup plus propre.
if(dog) alert('bark bark');
Je préfère ça. j'espère que ça aide quelqu'un
peut utiliser cela,
lemons ? alert("please give me a lemonade") : alert("then give me a beer");
explication: si lemons
existe alors donnez-moi une alerte ("donnez-moi s'il vous plaît une limonade") else
alert ("alors donnez-moi une bière")
Comme beaucoup de gens l'ont dit, si vous cherchez une ligne réelle si:
if (Boolean_expression) do.something();
est préféré. Cependant, si vous cherchez à faire un if/else alors ternary est votre ami (et aussi super cool):
(Boolean_expression) ? do.somethingForTrue() : do.somethingForFalse();
ÉGALEMENT:
var something = (Boolean_expression) ? trueValueHardware : falseATRON;
Cependant, j'ai vu un exemple très cool. Merci à @ Peter-Oslson pour &&
(Boolean_expression) && do.something();
Enfin, il ne s’agit pas d’une instruction if, mais l’exécution d’une tâche en boucle avec un mappage/réduction ou Promise.resolve () est également amusante. Cris à @brunettdan
Exemple dans les fonctions de flèche:
let somethingTrue = true
[1,2,3,4,5].map(i=>somethingTrue && i*2)
En promesses:
Promise.resolve()
.then(_=>checkTrueFalse && asyncFunc())
.then(_=>{ .. })
Autrement:
if(somethingTrue) thenDo()
Si c'est simplement une simple condition, je préfère utiliser if (valeur) chaque fois que cela est possible car le mot if au début de la déclaration en dit plus sur ce qui se passe que la parenthèse et les points d'interrogation.
Cela peut aussi être fait en utilisant une seule ligne avec while
boucles et if
comme ceci:
if (blah)
doThis();
Cela fonctionne aussi avec les boucles while
.
Comme cela a déjà été dit, vous pouvez utiliser:
lemons && document.write("foo gave me a bar");
ou
if (lemons) document.write("foo gave me a bar");
Si, toutefois, vous souhaitez utiliser l'instruction if
d'une ligne pour court-circuiter une fonction, vous devez utiliser la version sans crochet de la manière suivante:
if (lemons) return "foo gave me a bar";
comme
lemons && return "foo gave me a bar"; // does not work!
vous donnera un SyntaxError: Unexpected keyword 'return'
J'ai vu de nombreuses réponses avec de nombreux votes en faveur de l'utilisation de l'opérateur ternaire. Le ternaire est génial si a) vous avez une option alternative et b) vous renvoyez une valeur assez simple à partir d'une condition simple. Mais...
La question initiale n'avait pas d'alternative et l'opérateur ternaire ne possédant qu'une seule branche (réelle) vous oblige à renvoyer une réponse configurée.
lemons ? "foo gave me a bar" : "who knows what you'll get back"
Je pense que la variation la plus courante est lemons ? 'foo...' : ''
, et, comme vous le constaterez en lisant la myriade d'articles pour toutes les langues sur vrai, faux, vérité, falsey, nul, nul, vide, vide (avec notre sans? ), vous entrez dans un champ de mines (bien qu’un champ de mines bien documenté.)
Dès qu'une partie du ternaire se complique, il vaut mieux utiliser une forme plus explicite de conditionnel.
Un long chemin pour dire que je vote pour if (lemons) "foo"
.
**Old Method:**
if(x){
add(x);
}
New Method:
x && add(x);
Même assigner opération nous pouvons aussi faire avec des parenthèses rondes
exp.includes('regexp_replace') && (exp = exp.replace(/,/g, '@&'));