CodeGym /Java Blog /Random-IT /Operatore ternario
John Squirrels
Livello 41
San Francisco

Operatore ternario

Pubblicato nel gruppo Random-IT
CIAO! La lezione di oggi non sarà molto lunga, ma sarà sicuramente utile :) Parleremo del cosiddetto operatore ternario . Operatore ternario - 1Ternario significa " composto di tre parti ". È un'alternativa if-elseall'istruzione del flusso di controllo che hai già incontrato. Facciamo un esempio. Supponiamo che qualcuno abbia deciso di andare a vedere un film vietato ai minori (i minori di 17 anni richiedono un genitore accompagnatore o un tutore adulto). L'usciere controlla la sua età alla porta: se ha superato il controllo dell'età, può entrare; in caso contrario, viene rimandato a casa. Dichiariamo una Personclasse e controlliamo questo usando un'istruzione if-else:

public class Person {

   private int age;

   public Person(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
Uscita console:

"Everything is in order. Come in!"
Se rimuoviamo l'output della console, il nostro controllo avrà questo aspetto:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
La logica qui è molto semplice: viene verificata una condizione (età >= 18) In base al risultato, alla variabile usherResponseviene assegnata una delle due stringhe con la risposta dell'usciere. Tali situazioni ("una condizione - due possibili esiti") sono estremamente comuni nella programmazione. Ed è per questo che è stato creato l'operatore ternario. Possiamo usarlo per semplificare il nostro controllo a una singola riga di codice:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Ecco come funziona questo operatore. Si chiama operatore ternario, perché coinvolge 3 componenti:
  • Una condizione ( person.getAge() > 18)
  • Due possibili esiti ( "Tutto è in ordine. Entra!" e "Questo film non è adatto alla tua età!" )
Per prima cosa scriviamo la condizione, seguita da un punto interrogativo.

person.getAge() > 18 ?
"L'età di questa persona è superiore a 18 anni?" Quindi scriviamo il primo valore . Questo valore viene utilizzato se la condizione restituiscetrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
L'età di questa persona è maggiore di 18 anni? Se sì, imposta la usherResponse variabile su "Tutto è in ordine. Entra!" Poi viene il :simbolo " " e il secondo valore . Questo valore viene utilizzato se la condizione restituiscefalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
L'età di questa persona è maggiore di 18 anni? Se sì, imposta la usherResponse variabile su "Tutto è in ordine. Entra!" . In caso contrario, imposta la usherResponse variabile su "Questo film non è adatto alla tua età!" In generale, ecco come appare la logica dell'operatore ternario. condizione ? risultato 1 : risultato 2 Operatore ternario - 2 A proposito, le parentesi attorno alla condizione non sono necessarie: le abbiamo aggiunte per una maggiore leggibilità. Funziona anche senza di loro:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Quindi cosa dovresti usare? Una if-elsedichiarazione o l'operatore ternario? In termini di prestazioni, non c'è differenza. Più precisamente, forse c'è, ma è insignificante. La più grande considerazione qui è la leggibilità del tuo codice. Il codice che scrivi non deve solo funzionare correttamente, ma anche essere facile da leggere . Dopotutto, potrebbe essere "ereditato" da altri programmatori, i tuoi colleghi! Se è difficile da capire, complicherà il loro lavoro e il tuo (vengono di corsa da te per spiegazioni ogni 5 minuti). La raccomandazione generale è questa: se la condizione è semplice e facilmente verificabile, puoi usare l'operatore ternario senza danni. Ciò consente di ridurre la quantità di codice e il numero diif-elseaffermazioni (e potrebbero già essercene molte). Ma se la condizione è complessa e comporta più passaggi, è meglio utilizzare un'istruzione if-else. Ad esempio, l'utilizzo di un operatore ternario sarebbe una cattiva idea in questo caso:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Non è immediatamente evidente cosa sta succedendo qui! Il codice è diventato molto difficile da leggere. E tutto a causa della complessa condizione:
  • Se qualcuno ha più di 18 anni, ha un biglietto (o un abbonamento gratuito) e non ha figli piccoli, può entrare.
  • Se anche solo una parte della condizione è falsa, allora non può.
Qui è chiaramente meglio usare if-else. Sì, il nostro codice sarà più grande, ma sarà molto più leggibile. E i tuoi colleghi non affronteranno il palmo della mano se erediteranno questo codice :) Infine, posso consigliarti un bene. Abbiamo toccato la leggibilità del codice durante la lezione. Il libro di Robert Martin "Clean Code", diventato un classico, è dedicato a questo argomento. Operatore ternario - 4Riunisce le migliori pratiche e le raccomandazioni per i programmatori, che ti aiuteranno a scrivere codice non solo funzionale, ma anche facilmente leggibile.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION