126 votes

À quoi servent le point d'interrogation " ?" et le deux-points " :"?

Deux questions sur l'utilisation du point d'interrogation " ?" et des deux points " :" entre les parenthèses d'une fonction d'impression : À quoi servent-ils ? Par ailleurs, quelqu'un connaît-il le terme standard pour les désigner ou sait-il où je peux trouver plus d'informations sur leur utilisation ? J'ai lu qu'ils étaient similaires à une instruction "if" et "else".

int row = 10;
int column;
while (row >= 1)
{
    column = 1;
    while(column <= 10)
    {
        System.out.print(row % 2 == 1 ? "<" : "\r>");
        ++column;
    }
    --row;
    System.out.println();
}

Comme toujours, toute aide est la bienvenue.

279voto

Brendan Long Points 24372

C'est le opérateur conditionnel ternaire qui peut être utilisé partout, et pas seulement dans l'instruction print. On l'appelle parfois simplement "l'opérateur ternaire", mais ce n'est pas le seul opérateur ternaire juste le plus commun.

Voici un bon exemple tiré de Wikipedia qui montre comment cela fonctionne :

Une construction if-else traditionnelle en C, Java et JavaScript est écrite :

if (a > b) {
    result = x;
} else {
    result = y;
}

Ceci peut être réécrit comme l'énoncé suivant :

result = a > b ? x : y;

En gros, il prend la forme suivante :

boolean statement ? true result : false result;

Ainsi, si l'instruction booléenne est vraie, vous obtenez la première partie, et si elle est fausse, vous obtenez la seconde.

Essayez ceci si ça n'a toujours pas de sens :

System.out.println(true ? "true!" : "false.");
System.out.println(false ? "true!" : "false.");

9voto

fmucar Points 6937

C'est une déclaration if/else équivalente à

if(row % 2 == 1){
  System.out.print("<");
}else{
  System.out.print("\r>");
}

3voto

mehmet Points 126

Peut-être que cela peut être un exemple parfait pour Android, Par exemple :

void setWaitScreen(boolean set) {
    findViewById(R.id.screen_main).setVisibility(
            set ? View.GONE : View.VISIBLE);
    findViewById(R.id.screen_wait).setVisibility(
            set ? View.VISIBLE : View.GONE);
}

2voto

moo moo Points 55

J'ai également pensé poster la réponse à une autre question connexe que je me posais,

a = x ? : y;

Est équivalent à :

a = x ? x : y;

Si x est faux ou nul, la valeur de y est prise.

1voto

Anurag Ramdasan Points 2434

Il s'agit d'un opérateur ternaire et, en anglais simple, cela signifie que "if row%2 is equal to 1 then return < else return /r"

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