258 votes

Point d'interrogation et deux-points en JavaScript

Je suis tombé sur la ligne suivante

hsb.s = max != 0 ? 255 * delta / max : 0;

Que signifient les ? et : dans ce contexte ?

372voto

Greg Points 11248

Il est appelé l'Opérateur conditionnel (qui est un opérateur ternaire).

Il a la forme suivante: condition ? valeur-si-vrai : valeur-si-faux
Pensez au ? comme "alors" et : comme "sinon".

Votre code est équivalent à

if (max != 0)
  hsb.s = 255 * delta / max;
else
  hsb.s = 0;

28 votes

"? n'est pas l'opérateur ternaire; "? :" est l'opérateur ternaire. Parler de "?" comme l'opérateur ternaire, c'est comme parler de Abbott sans Costello, Laurel sans Hardy, Cheech sans Chong...."

11 votes

D'accord, d'accord... maintenant j'utilise un pronom ambigu, content ? :)

16 votes

Pour être pointilleux, c'est un opérateur ternaire, qui se trouve être le seul dans la plupart des langages de programmation. Tout opérateur qui fonctionne sur 3 parties est un opérateur ternaire, tout comme l'addition est un opérateur binaire qui opère sur les expressions précédentes et suivantes (par exemple 1+2, le plus opère sur 1 et 2), ou la négation est un opérateur unaire (par exemple -x où la valeur de x est négative).

39voto

Jason S Points 58434

Correctement parenthésé pour plus de clarté, il est

hsb.s = (max != 0) ? (255 * delta / max) : 0;

c'est-à-dire retourner soit

  • 255*delta/max si max != 0
  • 0 si max == 0

7voto

CaffGeek Points 10925
hsb.s = max != 0 ? 255 * delta / max : 0;

? est un opérateur ternaire. Il fonctionne comme un if en conjonction avec le :

!= signifie n'est pas égal

Donc, la forme longue de cette ligne serait

if (max != 0) { // si max n'est pas égal à zéro
  hsb.s = 255 * delta / max;
} else {
  hsb.s = 0;
}

7voto

Nikolas Stephan Points 605

Ceci est probablement un peu plus clair lorsqu'il est écrit avec des crochets comme suit :

hsb.s = (max != 0) ? (255 * delta / max) : 0;

Ce qu'il fait est d'évaluer la partie entre les premiers crochets. Si le résultat est vrai, alors la partie après le ? et avant le : est retournée. Si c'est faux, alors ce qui suit le : est retourné.

0voto

jldupont Points 31331

? : n'est-ce pas l'opérateur ternaire ?

var x= expression ? true:false

3 votes

Voici un exemple de son utilisation, mais il existe en réalité une version plus courte de votre déclaration, pour les cas où vous voulez simplement VRAI / FAUX: Si 'expression' était juste une variable avec un nombre ou une chaîne de caractères dedans, "var x = !!expression" le transformera en un résultat booléen.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X