L’OPERATORE CONDIZIONALE
Più avanti nel corso impareremo a usare i test condizionali, cioè istruzioni che ci permettono di eseguire blocchi di codice diversi a seconda o meno del verificarsi di certe condizioni. L’operatore condizionale pur in una forma limitata ci consente di raggiungere lo stesso scopo. È un operatore ternario, cioè utilizza tre operandi.
exp1 è un’espressione booleana. Se l’espressione exp1 ritorna true allora viene eseguita la seconda espressione, altrimenti se false exp3. Facciamo un esempio.
ESEMPIO OPERATORE TERNARIO
Nella figura a fianco riporto un esempio. In questo caso a z viene assegnato il valore 50 in quanto il test condizionale (x < y ) exp1 restituisce true e quindi viene eseguita ed assegnata alla variabile z il literal 50 (exp2). Il test condizionale si usa spesso in Java, rende il codice più compatto rispetto ai normali blocchi condizionali.
CONVERSIONI DI TIPO
Tornando a parlare dell’operatore di assegnamento è importante verificare anche quando gli operandi sono di tipo diverso fra loro. Java esegue dei controlli molto rigidi sui Data Type. Quando si assegna una variabile a un’altra la prima cosa che può fare Java è una Automatic Type Conversion.
Entrambe le condizioni sono soddisfatte, int e double sono compatibili fra loro, inoltre la destinazione che è il tipo che si trova alla sinistra del simbolo di = è più capiente del tipo che si trova alla destra del simbolo di = cioè un int (sorgente). Vediamo ora nella prossima immagine la compatibilità dei tipi.
IL CAST
Riguardo alla conversione automatica questa è possibile se i tipi sono compatibili fra loro e se la destinazione è più ampia della sorgente. Quando non è possibile eseguire una conversione automatica si ricorre al cast o explicit type conversion.
(target-type)exp;
Questa è la forma di un cast in java, si mette il Data Type prima dell’espressione tra parentesi. Facciamo un esempio.
Nell’esempio a fianco si vede che i tipi sono numerici; quindi, compatibili ma la destinazione (int) è meno ampia della sorgente (double). Per risolvere il problema si usa il cast perdendo la parte decimale.
Quando noi utilizziamo il cast per eseguire una conversione in modo esplicito, noi stiamo utilizzando una narrowing conversion per effetto della quale effettivamente potremmo avere una perdita di informazioni.
CONVERSIONI DI TIPO NELLE ESPRESSIONI
All’interno di un’espressione noi possiamo utilizzare variabili, operatori, literal. Se i tipi nelle espressioni sono compatibili fra loro Java esegue delle conversioni automatiche sulla base di quelle che si chiamano regole di promozione. Vediamo quali sono queste regole:
Tutti i char, byte, short vengono trasformati in int. Se all’interno dell’espressione è presente un long, allora tutta l’espressione viene convertita in long. Stessa cosa vale per float e double, cioè se nell’espressione è presente un float tutta l’espressione viene convertita in float, se c’è un double tutta l’espressione è convertita in double. Vediamo un esempio.
Dato che Java ha promosso x e y a int l’assegnamento ad uno short non si può fare. Si può però eseguire il cast convertendo l’intero in uno short come si vede in figura.
LINK AI POST PRECEDENTI
LINK AL CODICE SU GITHUB
ESECUZIONE DEL CODICE DI ESEMPIO
- Scaricare il codice da GITHUB, lanciare il file JAR con il seguente comando in Visual Studio Code, posizionandosi nella directory contenente il JAR.
java -jar –enable-preview CorsoJava.jar
- Oppure mettere in esecuzione il main che si trova nel file CorsoJava.java.
Scrivi un commento