Corso Java Base (5): Espressioni, istruzioni e blocchi

Operatori di uguaglianza e relazionali

Gli operatori di uguaglianza e relazionali determinano se un operando è maggiore, minore, uguale a, o diverso rispetto un altro operando. Questa famiglia di operatori restituisce come valore un booleano, vero o falso a seconda che l’espressione a cui fanno riferimento assuma l’uno o l’altro valore.

== uguale a
!= diverso da
> maggiore di
>= maggiore o uguale < minore di
<= minore o uguale

Esempio:

int a = 7; 
int b = 8;

if(a == b){ System.out.println("a == b"); }
if(a != b){ System.out.println("a != b"); }
if(a > b){ System.out.println("a > b"); }

if(a < b){ System.out.println("a < b");
}
if(a <= b){ System.out.println(“a <= b”);
}

L’output di questo esempio è:

a != b
a < b
a <= b

Operatori di condizione

Gli operatori && e || sono operatori che eseguono le operazioni di condizione AND e OR su due espressioni booleane. Questi operatori mostrano un comportamento “corto-circuito”, che significa che il secondo operando viene valutato solo se necessario.

&& condizione AND || condizione OR

Ecco un esempio:

int a = 7;
int b = 8;
if((a == 7) && (b == 8)){
   System.out.println(“a=7 e b=8”); 
}

if((a == 7) || (b == 7)){
    System.out.println(“a=7 o b=7”); 
}

Il primo if controlla se sono vere entrambe le espressioni ovvero se a è uguale a 7 e se b è uguale a 8. Entrambe le condizioni devono essere soddisfatte, se la prima delle due fosse falsa, la seconda non verrebbe presa in considerazione.
Il secondo if controlla due espressioni ed almeno una delle due deve essere soddisfatta:  a è uguale a 7 OR b è uguale a 7.

Operatore instanceof

L’operatore instanceof confronta un oggetto a un tipo specificato. Si può usare per verificare se un oggetto è un’istanza di una classe, un’istanza di una sottoclasse, o un’istanza di una classe che implementa una particolare interfaccia.

Esempio:

String s = "Hello";
if (s instanceof java.lang.String) {
   System.out.println("is a String");
}

 

Priorità degli operatori

Abbiamo già accennato al fatto che gli operatori hanno una priorità ovvero una precedenza.

Tipo operatore

Priorità

moltiplicativi

*/%

additivi

+-

relazionali

< > <= >= instanceof

uguaglianza

!= ==

logico AND

&&

logico OR

||

Gli operatori presenti nella tabella sopra riportata sono elencati secondo l’ordine di precedenza. Quelli con precedenza maggiore (situati più in alto) vengono valutati prima di quelli con precedenza minore. Quelli sulla stessa riga hanno pari precedenza. Quando operatori aventi la stessa precedenza vengono utilizzati nella stessa espressione vige la regola che vengono valutati da sinistra a destra, ad esempio:

int a = 20/2*5;

in questa espressione sono presenti due operatori ( / e * ) che hanno la stessa priorità per cui vale la regola secondo la quale viene prima valutata l’azione che coinvolge l’operatore più a sinistra ovvero / per cui viene prima svolta l’operazione 20/2 e poi il risultato viene moltiplicato per 5.

Espressioni, istruzioni e blocchi

Dopo aver affrontato le variabili e gli operatori, è il momento di vedere che cosa si intende con espressioni, istruzioni e blocchi. Gli operatori possono essere utilizzati per costruire delle espressioni le quali eseguono dei calcoli con valori; le espressioni sono i componenti principali delle istruzioni le quali possono essere raggruppate in blocchi.

Espressioni

Un’espressione è un costrutto formato da variabili, operatori e chiamate a metodi, che sono costruiti secondo la sintassi del linguaggio, e restituisce un singolo valore. Il tipo di dato, relativo al valore restituito da un’espressione, dipende dagli elementi utilizzati nell’espressione stessa.

Il linguaggio Java permette di costruire espressioni composte da varie espressioni più piccole, purché il tipo di dati richiesto da una parte dell’espressione corrisponda al tipo di dati dell’altra parte. Ecco un esempio di espressione composta:

10 * 20 * 30

In questo esempio, l’ordine in cui viene valutata l’espressione non è importante perché il risultato della moltiplicazione è indipendente dall’ordine dei fattori. Tuttavia, questo non è vero per tutte le espressioni.

Ad esempio, la seguente espressione restituisce risultati diversi, a seconda se si esegue prima l’addizione o la divisione:

x + y / 1000

È possibile specificare esattamente come un’espressione deve essere valutata utilizzando le parentesi tonde; per cui facendo riferimento all’ultimo esempio, se si volesse valutare prima il risultato dell’addizione si potrebbe scrivere quanto segue:

(x + y) / 1000

Se non viene esplicitamente indicato l’ordine delle operazioni da eseguire, questo viene determinato dall’ordine di precedenza degli operatori all’interno dell’espressione. Gli operatori che hanno precedenza vengono valutati per primi, come già spiegato. Ad esempio, l’operatore di divisione ha una precedenza maggiore dell’operatore di addizione. Pertanto, le due istruzioni seguenti sono equivalenti:

x + y/1000 x + (y / 1000)

E’ buona consuetudine utilizzare le parentesi nel momento in cui si creano delle espressioni composte affinché vengano specificate le priorità desiderate e migliori la leggibilità del codice.

Istruzioni

Le istruzioni sono più o meno equivalenti a frasi in lingue naturali. Un’istruzione costituisce un’unità completa di esecuzione. I seguenti tipi di espressioni possono essere racchiusi in una istruzione che termina con un punto e virgola (;)

  • Espressione di assegnazione
  • Qualsiasi utilizzo di + + e – –
  • Invocazione di metodi
  • Creazioni di oggetti

 

Tali istruzioni sono dette istruzioni di espressione. Ecco alcuni esempi di istruzioni di espressione.

// dichiarazione di assegnazione 
aValue = 333.254;
// dichiarazione di incremento 
aValue++;
// dichiarazione di invocazione di un metodo 
System.out.println("Ciao Mondo!");
// dichiarazione di creazione di un oggetto 
Auto myAuto = new Auto();

Oltre alle istruzioni di espressione, ci sono altri due tipi di istruzioni:

  • istruzioni di dichiarazione
  • istruzioni di controllo del flusso.

 

Un’istruzione di dichiarazione dichiara una variabile. Abbiamo visto molti esempi di istruzioni di dichiarazione. Infine, le istruzioni di controllo del flusso regolano l’ordine in cui vengono eseguite le istruzioni. Le istruzioni di controllo verranno discusse successivamente.

Blocchi

Un blocco è un gruppo di zero o più istruzioni tra parentesi graffe. Il seguente esempio, BloccoProva, illustrata l’utilizzo dei blocchi:

class BloccoProva {
public static void main(String[] args) { 
   boolean cond = true;
   if (condition) { 
      // inizio del blocco 1 
      System.out.println("Condizione è true."); 
   } // fine del blocco 1
   else { 
      // inizio del blocco 2 
      System.out.println("Condizione è false."); 
   } // fine del blocco 2
}}

 

Questo codice esegue le seguenti operazioni:

– Dichiara una variabile di tipo booleano chiamata cond inizializzandola a true.

– Esegue un controllo, sulla variabile, se questa è true esegue le istruzioni contenute nel blocco1. Altrimenti, se cond è false, esegue le istruzioni contenute nel blocco 2.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.