133 votos

¿Para qué se utiliza el signo de interrogación "?" y el operador de colon ":"?

Dos preguntas sobre el uso de un signo de interrogación "?" y dos puntos ":" operador dentro de los paréntesis de una función de impresión: ¿Qué es lo que hacen? Además, ¿alguien sabe el término estándar para ellos o dónde puedo encontrar más información sobre su uso? He leído que son similares a una declaración de "si" "si no".

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();
}

Como siempre, cualquier ayuda es muy apreciada.

288voto

Brendan Long Puntos 24372

Este es el operador condicional ternario que puede ser usado en cualquier lugar, no sólo en la declaración impresa. A veces se llama simplemente "el operador ternario", pero no es el único operador ternario sólo el más común.

Aquí hay un buen ejemplo de Wikipedia que demuestra cómo funciona:

Una construcción tradicional de "si no" en C, Java y JavaScript está escrita:

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

Esto puede ser reescrito como la siguiente declaración:

result = a > b ? x : y;

Básicamente toma la forma:

boolean statement ? true result : false result;

Así que si la declaración booleana es verdadera, obtienes la primera parte, y si es falsa obtienes la segunda.

Pruebe estos si aún no tiene sentido:

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

10voto

fmucar Puntos 6937

Esa es una afirmación de "si/no" que equilibra a

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

3voto

moo moo Puntos 55

También pensé en publicar la respuesta a otra pregunta relacionada que tenía,

a = x ? : y;

Es equivalente a:

a = x ? x : y;

Si x es falso o nulo, entonces se toma el valor de y.

3voto

mehmet Puntos 126

Tal vez pueda ser un ejemplo perfecto para Android, Por ejemplo:

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);
}

1voto

Anurag Ramdasan Puntos 2434

es un operador ternario y en inglés simple dice "if row%2 is equal to 1 then return < else return /r"

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X