1. Espressioni vs affermazioni
In Java, è utile distinguere tra due categorie: dichiarazioni ed espressioni . Di solito si dice che un'istruzione viene eseguita , mentre un'espressione viene valutata . Ma non è la cosa più importante.
La principale differenza tra un'istruzione e un'espressione è che la valutazione di un'espressione ha un risultato . E questo risultato ha un tipo e può essere assegnato a una variabile o utilizzato in qualche altra espressione.
Esempi:
Codice | Appunti |
---|---|
int x; |
Dichiarazione |
(a < 10) |
Espressione il cui tipo èboolean |
i++; |
Espressione il cui tipo è uguale al tipo della i variabile |
x = 5; |
Espressione il cui tipo è uguale al tipo della x variabile |
E questo cosa ci dà?
Innanzitutto, possiamo trarre vantaggio dal fatto che molte affermazioni sono in realtà espressioni (nel senso che valutano un valore). Ad esempio, un codice come questo funzionerà:
Codice | Appunti |
---|---|
|
|
In secondo luogo, se vogliamo, possiamo ignorare il risultato della valutazione di un'espressione.
Codice | Codice in cui ignoriamo il risultato: |
---|---|
|
|
Ignoriamo il risultato della valutazione di un'espressione, ad esempio, se l'espressione implica fare qualcosa di utile, e questa azione è ciò che è importante per noi, non il risultato stesso.
2. Operatore ternario
Questo life hack è già più interessante del precedente. Java ha uno speciale operatore ternario . La sua sintassi è in qualche modo simile alla sintassi dell'istruzione :if-else
Condition ? Expression 1 : Expression 2;
Se la condizione è vera, viene valutata l'Espressione 1 , altrimenti viene valutata l'Espressione 2 . La condizione è seguita da un punto interrogativo e le due espressioni sono separate da due punti .
La principale differenza tra l' operatore ternario e un'affermazione if-else
è che l'operatore ternario è un'espressione, il che significa che possiamo assegnare il suo risultato a qualcosa.
Ad esempio, supponiamo di voler calcolare il minimo di due numeri. Usando l'operatore ternario, questo codice sarebbe simile a questo:
int a = 2;
int b = 3;
int min = a < b ? a : b;
Oppure, diciamo che devi assegnare valori diversi a una variabile a seconda di alcune condizioni. Come si fa a farlo?
Un'opzione è usare un'istruzione if-else
:
int age = 25;
int money;
if (age > 30)
money = 100;
else
money = 50;
La seconda opzione consiste nell'utilizzare l' operatore ternario , ovvero l'abbreviazione dell'affermazione if-else
:
int age = 25;
int money = age > 30 ? 100 : 50;
Quindi quale è meglio usare: un'istruzione if-else
o l' operatore ternario ? In termini di velocità di esecuzione, non c'è molta differenza. Questa è più una questione di leggibilità del codice. E questo è un punto molto importante: il codice non deve solo funzionare correttamente, ma anche essere facilmente leggibile da altri programmatori.
La regola più semplice è questa: se il codice sta su una riga , usa l' operatore ternario ; ma se non sta su una riga, allora è meglio usare un'istruzione if-else
.
3. Confronto tra numeri reali
Come accennato in precedenza, non puoi semplicemente prendere numeri reali e confrontarli. C'è sempre la possibilità che alcune cifre significative vengano scartate, causando effetti collaterali imprevisti.
Ecco perché esiste un approccio testato nel tempo. Se due numeri reali differiscono di un valore molto piccolo, allora possono essere considerati uguali. Esempio:
double a = 1.000001;
double b = 1.000002;
if ( (b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
Ma non è tutto ciò di cui dobbiamo preoccuparci, poiché la differenza tra i numeri potrebbe rivelarsi negativa. Quindi, affinché questo approccio funzioni, è necessario confrontare non solo la differenza tra i numeri, ma anche il valore assoluto della differenza tra i numeri:|a-b|
Java ha un metodo per calcolare il valore assoluto di un numero Math.abs()
:
int m = Math.abs(value);
Di conseguenza, la versione corretta del nostro esempio sopra sarà simile a questa:
double a = 1.000001;
double b = 1.000002;
if ( Math.abs(b - a) < 0.0001 )
System.out.println("The numbers are equal");
else
System.out.println("The numbers are not equal");
GO TO FULL VERSION