Che cos’è un punto interrogativo “?” E “due punti”: “Operatore utilizzato?

Due domande sull’utilizzo di un punto interrogativo “?” e due punti “:” operatore tra parentesi di una funzione di stampa: cosa fanno? Inoltre, qualcuno conosce il termine standard per loro o dove posso trovare maggiori informazioni sul loro uso? Ho letto che sono simili a una frase ‘if’ ‘else’.

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

Questo è l’ operatore condizionale ternario , che può essere utilizzato ovunque, non solo la dichiarazione di stampa. A volte viene chiamato semplicemente “l’operatore ternario”, ma non è l’unico operatore ternario , solo il più comune.

Ecco un buon esempio di Wikipedia che dimostra come funziona:

Viene scritto un costrutto if-else tradizionale in C, Java e JavaScript:

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

Questo può essere riscritto come la seguente dichiarazione:

 result = a > b ? x : y; 

Fondamentalmente prende la forma:

 boolean statement ? true result : false result; 

Quindi, se l’istruzione booleana è vera, ottieni la prima parte e se è falsa ottieni la seconda.

Prova questi se ancora non ha senso:

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

Ecco una dichiarazione if / else equilibrata a

 if(row % 2 == 1){ System.out.print("<"); }else{ System.out.print("\r>"); } 
 a=1; b=2; x=3; y=4; answer = a > b ? x : y; 

answer=4 poiché la condizione è falsa, prende il valore y.

Un punto interrogativo (?)
. Il valore da utilizzare se la condizione è vera

A due punti (:)
. Il valore da utilizzare se la condizione è falsa

Forse può essere un esempio perfetto per Android, ad esempio:

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

è un operatore ternario e in inglese semplice afferma "if row%2 is equal to 1 then return < else return /r"

Inoltre, anche se inserirò la risposta ad un’altra domanda correlata che ho avuto,

 a = x ? : y; 

È equivalente a:

 a = x ? x : y; 

Se x è falso o nullo, allora viene preso il valore di y.

Sono chiamati operatori ternari poiché sono l’unico in Java.

La differenza rispetto al costrutto if … else è che restituiscono qualcosa e questo qualcosa può essere qualsiasi cosa:

  int k = a > b ? 7 : 8; String s = (foobar.isEmpty ()) ? "empty" : foobar.toString ();