Ciao! La lezione di oggi non sarà molto lunga, ma sicuramente utile :) Parleremo del cosiddetto operatore ternario . “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 Man
e 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ò, securityAnswer
alla 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à!" )
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 A 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.
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. Contiene 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.
GO TO FULL VERSION