J'utilise donc un raccourci javascript if
/else
(j'ai lu quelque part on les appelle des instructions ternaires?)
this.dragHandle.hasClass('handle-low') ? direction = "left" : direction = "right"
Cela fonctionne très bien, mais que se passe-t-il si plus tard je veux utiliser simplement un raccourci if
, sans la partie else
. Comme:
direction == "right" ? slideOffset += $(".range-slide").width()
est-ce possible?
vous pouvez utiliser l'opérateur &&
- la deuxième expression d'opérande n'est exécutée que si la première est vraie
direction == "right" && slideOffset += $(".range-slide").width()
à mon avis, if(conditon) expression
est plus lisible que condition && expression
Ne le pensez pas comme un bloc de contrôle (c'est-à-dire: un if-else ou un commutateur). Il n'est pas vraiment destiné à exécuter du code à l'intérieur.
Vous pouvez. Cela devient très moche, très rapide, ce qui va à l'encontre du but.
Ce que vous voulez vraiment l'utiliser, c'est ATTRIBUTION DE VALEURS .
En prenant votre exemple initial et en le tournant un peu sur la tête, vous obtenez:
direction = (this.dragHandle.hasClass("handle-low")) ? "left" : "right";
Voir. Maintenant, ce que j'ai fait, c'est que j'ai pris quelque chose qui aurait nécessité un if/else ou un commutateur, qui aurait été utilisé pour attribuer à cette seule valeur, et je l'ai nettoyé Nice et joli.
Vous pouvez même faire un type ternaire else-if:
y = (x === 2) ? 1 : (x === 3) ? 2 : (x === 4) ? 7 : 1000;
Vous pouvez également l'utiliser pour déclencher du code, si vous le souhaitez, mais il devient vraiment difficile après un certain temps, de savoir ce qui se passe où (voir l'exemple précédent pour voir comment même une affectation peut commencer à paraître bizarre en un coup d'œil) ...
((this.dragHandle.hasClass("...")) ? fireMe(something) : noMe(somethingElse));
... cela fonctionnera généralement.
Mais ce n'est pas vraiment plus joli ou plus utile qu'une fonction if ou une branche, invoquant immédiatement (et les programmeurs non JS ou les programmeurs JS non formés vont se faire chier en essayant de maintenir votre code).
Ce que vous avez ne fonctionnera pas, mais pourquoi ne pas simplement utiliser une instruction if d'une ligne à la place.
if(direction == "right") slideOffset += $(".range-slide").width();
Cela implique moins de frappe que la méthode suggérée par Ray. Bien sûr, sa réponse est valable si vous voulez vraiment vous en tenir à ce format.
Non, ce n'est pas possible, car l'opérateur ternaire nécessite, trois opérandes avec lui.
first-operand ? second-operand (if first evaluates to true) : third-operand (if false)
Cela ne répond pas exactement à votre question, mais les ternaires vous permettent d'écrire moins que ce que vous avez montré:
direction = this.dragHandle.hasClass('handle-low') ? "left" : "right";
Et maintenant que j'y pense, oui, vous pouvez aussi poser votre question:
slideOffset + direction == "right" ? = $(".range-slide").width() : = 0;
Ceci est une théorie. La prochaine fois que j'aurai l'occasion de +=
un ternaire je vais essayer ça. Dites-moi comment ça marche!