JavaRush /Java Blog /Random-IT /Operatore ternario in Java

Operatore ternario in Java

Pubblicato nel gruppo Random-IT
Ciao! La lezione di oggi non sarà molto lunga, ma sicuramente utile :) Parleremo del cosiddetto operatore ternario . Operatore ternario - 1“Tternario” significa “triplo”. Questa è un'alternativa all'operatore condizionale if-else, con cui hai già familiarità. Facciamo un esempio. Diciamo che una persona decide di andare al cinema per vedere un film con classificazione 18+. La guardia controlla la sua età all'ingresso: se raggiunge il limite di età lo lascia entrare nella sala, altrimenti lo rimanda a casa. Creiamo una classe Mane controlliamola con if-else:
public class Man {

   private int age;

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

   public int getAge() {
       return age;
   }

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

   public static void main(String[] args) {

       Man man = new Man(22);

       String securityAnswer;

       if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }

       System.out.println(securityAnswer);

   }
}
Uscita console:

"Все в порядке, проходите!"
Se rimuoviamo l'output sulla console, il nostro test assomiglia a questo:
if (man.getAge() >= 18) {
           securityAnswer = "It's all right, come in!";
       } else {
           securityAnswer = "This movie is not suitable for your age!";
       }
Qui, infatti, funziona la logica semplice: viene verificata una condizione (età >= 18). A seconda di ciò, securityAnsweralla variabile viene assegnata una delle due righe con la risposta della guardia. Tali situazioni, "una condizione - due possibili risultati", si verificano molto spesso nella programmazione. Pertanto, per loro è stato creato lo stesso operatore ternario. Con esso, possiamo semplificare la nostra verifica in una riga di codice:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = (man.getAge() >= 18) ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
Ecco come appare il lavoro di questo operatore. Si chiama ternario (triplo) perché al suo lavoro partecipano 3 componenti:
  • Una condizione ( man.getAge() >= 18)
  • Due possibili esiti ( "Va tutto bene, vai avanti!" e "Questo film non è adatto alla tua età!" )
Innanzitutto, nel codice viene scritta una condizione, seguita da un punto interrogativo.
man.getAge() >= 18 ?
"L'età della persona è maggiore o uguale a 18 anni?" Quello che segue è il primo risultato. Si attiva se la condizione ritorna true, ovvero è vera:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!"
L'età della persona è maggiore o uguale a 18 anni? Se sì, assegna alla variabile securityAnswer il valore “Va tutto bene, entra!” . Questo è seguito dall'operatore “ :”, dopo il quale viene scritto il secondo risultato. Si attiva se la condizione ritorna false, ovvero è falsa:
String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";
L'età della persona è maggiore o uguale a 18 anni? Se sì, assegna alla variabile securityAnswer il valore “Va tutto bene, entra!” . In caso contrario, assegna alla variabile securityAnswer il valore “Questo film non è adatto alla tua età!” Ecco come appare la logica generale dell'operatore ternario. condizione ? risultato 1 : risultato 2 Operatore ternario - 2A proposito, non è necessario mettere tra parentesi la condizione: lo abbiamo fatto per una maggiore leggibilità. Funzionerà senza di loro:
public static void main(String[] args) {

   Man man = new Man(22);

   String securityAnswer = man.getAge() >= 18 ? "It's all right, come in!" : "This movie is not suitable for your age!";

   System.out.println(securityAnswer);

}
Cosa dovresti usare: if-else, o l'operatore ternario? In termini di prestazioni non c'è molta differenza. Più precisamente, può esistere, ma è insignificante. Qui la domanda riguarda piuttosto la leggibilità del codice. È estremamente importante nella programmazione: il codice che scrivi non deve solo funzionare correttamente, ma anche essere facile da leggere. Dopotutto, può essere “ereditato” da altri programmatori, i tuoi colleghi! E se è difficile da capire, complicherà sia il loro lavoro che il tuo: correranno da te per spiegazioni ogni 5 minuti. Una raccomandazione generale potrebbe suonare così: se la condizione è semplice e facile da verificare, è possibile utilizzare l'operatore ternario senza danni. In questo modo ridurrai la quantità di codice e il numero di controlli if-else, di cui potrebbero già essercene molti. Ma se la condizione è complessa e presenta più fasi, è meglio utilizzare if-else. Ad esempio, in questo caso sarebbe una cattiva idea utilizzare l'operatore ternario:
String securityAnswer = (man.getAge() >= 18 && (man.hasTicket() || man.hasCoupon()) && !man.hasChild())  ? "Come in!" : "You can not pass!";
Quindi non capirai immediatamente cosa sta succedendo qui! Il codice è diventato molto difficile da leggere. E tutto a causa di una condizione difficile:
  • Se una persona ha più o meno 18 anni + ha un biglietto (o ha un buono per l'ingresso gratuito) + non ha bambini piccoli con sé, allora può passare.
  • Se almeno una parte della condizione restituisce false, non può farlo.
Questo è dove sarebbe chiaramente meglio usare if-else. Sì, il nostro codice sarebbe di dimensioni maggiori, ma sarebbe molte volte più leggibile. E nessuno dei tuoi colleghi si stringerà la testa se eredita un codice del genere :) Infine, posso consigliarti il ​​libro. Nella lezione abbiamo toccato il tema della leggibilità del codice. A lei è dedicato il classico libro “Clean Code” di Robert Martin. Operatore ternario - 3Contiene best practice e consigli per i programmatori che ti consentiranno di scrivere non solo codice funzionante, ma anche di facile lettura. C'è una recensione di questo libro su JavaRush.
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION