Domanda

Dimostrare come l'operatore ternario lavora con un normale blocco if / else. Esempio:

Boolean isValueBig = value > 100 ? true : false;

Duplicazione esatta: Come posso utilizzare il operatore ternario?

È stato utile?

Soluzione

Boolean isValueBig = ( value > 100  ) ? true : false;


Boolean isValueBig;

if(  value > 100 ) { 
      isValueBig = true;
} else { 
     isValueBig = false;
}

Altri suggerimenti

La differenza tra l'operazione ternaria e if / else è che l'espressione ternaria è un'istruzione che valuta un valore, mentre se / else non lo è.

Per usare il tuo esempio, cambiando dall'uso di un'espressione ternaria a se / altrimenti potresti usare questa affermazione:

Boolean isValueBig = null;
if(value > 100)
{ 
    isValueBig = true 
}
else
{
    isValueBig = false;
}

In questo caso, tuttavia, la tua dichiarazione è equivalente a questa:

Boolean isValueBig = (value > 100);

Quando ero nuovo in C ++, ho scoperto che mi ha aiutato a leggere questo costrutto come segue:

Boolean isValueBig = if condition ? then x else: y;

(Nota che questo non è un codice valido. È proprio quello che mi sono allenato a leggere nella mia testa.)

Boolean isValueBig;

if (value > 100)
{
   isValueBig = true;
}
else 
{
   isValueBig = false;
}
Boolean isValueBig;

if(value > 100) { isValueBig = true; } else { isValueBig = false; }

Non sono mai stato un fan dell'operatore ternario perché pensavo fosse difficile da leggere. Come succede, Jon Skeet e il suo libro, C # in profondità , infine hanno colpito questo vecchio cane sopra la testa e l'hanno fatto affondare. Jon ha detto, e io parafrasando, lo penso come una domanda.

  

valore > 100?

     

" sì " : " no "

Ora i ciechi possono vedere.

Spero che questo ti aiuti a renderlo una seconda natura.

Come citato dalla ?: Pagina MSDN operatore , " l'operatore condizionale (? :) restituisce uno dei due valori in base al valore di un'espressione booleana. "

Quindi puoi usare l'operatore ternario per restituire più di semplici booleani:

   string result = (value > 100 ) ? "value is big" : "value is small";

Esempio di PHP

<?php

  // Example usage for: Ternary Operator
  $action = (empty(

Esempio di PHP

<*>
  

" L'espressione (expr1)? (expr2): (expr3) restituisce expr2 se expr1 restituisce VERO e expr3 se expr1 restituisce FALSE . "

Documentazione PHP sugli operatori di confronto

POST['action'])) ? 'default' :

Esempio di PHP

<*>
  

" L'espressione (expr1)? (expr2): (expr3) restituisce expr2 se expr1 restituisce VERO e expr3 se expr1 restituisce FALSE . "

Documentazione PHP sugli operatori di confronto

POST['action']; // The above is identical to this if/else statement if (empty(

Esempio di PHP

<*>
  

" L'espressione (expr1)? (expr2): (expr3) restituisce expr2 se expr1 restituisce VERO e expr3 se expr1 restituisce FALSE . "

Documentazione PHP sugli operatori di confronto

POST['action'])) { $action = 'default'; } else { $action =

Esempio di PHP

<*>
  

" L'espressione (expr1)? (expr2): (expr3) restituisce expr2 se expr1 restituisce VERO e expr3 se expr1 restituisce FALSE . "

Documentazione PHP sugli operatori di confronto

POST['action']; } ?>
  

" L'espressione (expr1)? (expr2): (expr3) restituisce expr2 se expr1 restituisce VERO e expr3 se expr1 restituisce FALSE . "

Documentazione PHP sugli operatori di confronto

Assicurati di non mescolare i tipi in parti true / false in Java. Produce risultati strani :-(

Cattivo esempio, perché potresti facilmente scrivere

Boolean isValueBig = value > 100 ? true : false;

come:

bool isValueBig = value > 100

Oltre a ciò, tutti gli altri hanno già risposto. Non consiglierei semplicemente di usare operatori ternari per impostare valori booleani, dal momento che quello che stai valutando è già un valore booleano.

Mi rendo conto che era solo un esempio, ma valeva la pena sottolineare.

Altri hanno già risposto, ma ecco una cosa che dovresti davvero sapere sull'uso di Ternary e con questo voglio dire non farlo mai.

Supponiamo che tu abbia un pezzo di codice che dovrebbe restituire un oggetto diverso per ogni possibile variazione di un valore, diciamo per semplicità un numero intero compreso tra 1 e 5. Il tuo codice è simile al seguente:

if(i==1) {
    return new ObjectOne();
} else if(i==2) {
    return new ObjectTwo();
} else if(i==3) {
    return new ObjectThree();
} else if(i==4) {
    return new ObjectFour();
} else if(i==5) {
    return new ObjectFive();
} else {
    return new DefaultObject();
}

È facile da capire ma un po 'pesante. Poiché ternary è solo un altro modo di scrivere un'istruzione if..else che può essere riformattata in questo

return (i==1) ? new ObjectOne() :
       (i==2) ? new ObjectTwo() :
       (i==3) ? new ObjectThree() :
       (i==4) ? new ObjectFour() :
       (i==5) ? new ObjectFive() : new DefaultObject();

Si chiama ternario nidificato . È malvagio, ora che lo conosci per favore non usarlo mai. Potrebbe sembrare che abbia i suoi usi come nel caso precedente, ma è molto probabile che nelle situazioni della vita reale avresti bisogno di usarlo da qualche parte dove perde leggibilità (pensa a modificare le configurazioni con una quantità variabile di parametri e simili).

Settore bonus: non impostare mai valori di attributo all'interno di if (), basta guardare questo: if (bool = true! = false) {..}

Come citato da MSDN (annotato in un post precedente)

risultato stringa = (valore > 100)? "il valore è grande" : "il valore è piccolo";

Potrebbe essere letto come:

Il valore è maggiore di 100? In caso affermativo, il risultato della stringa è "il valore è grande", in caso contrario, il risultato della stringa è "il valore è piccolo".

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top