Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 8 di 112
  • livello avanzato
Indice lezioni

Espressioni e operatori

Comporre le espressioni utilizzando operatori artitmetici, logici, condizionali e bitwise.
Comporre le espressioni utilizzando operatori artitmetici, logici, condizionali e bitwise.
Link copiato negli appunti

Un'espressione è una combinazione di valori, variabili ed operatori che rappresentano un nuovo valore. Ad esempio, la seguente è un'espressione:

x + 1

Nel caso specifico si tratta di un'espressione che combina una variabile x ed il valore numerico 1 tramite l'operatore + (più) per ottenere l'incremento di un'unità del valore di x.

È evidente che un ruolo fondamentale nelle espressioni è assunto dagli operatori, dal momento che determinano il valore risultante dell'espressione.

Possiamo classificare gli operatori in base al numero di valori che possono combinare e in base al tipo di dati su cui possono operare.

JavaScript prevede operatori unari, binari e ternari a seconda che possano combinare rispettivamente uno, due o tre valori.

Operatori aritmetici

Per quel che riguarda il tipo di dato numerico, abbiamo gli operatori aritmetici, che consentono la combinazione di valori numerici. Si tratta di operatori binari corrispondenti ai classici operatori matematici:

Operatore Nome
+ addizione
- sottrazione
/ divisione
* moltiplicazione
% modulo o resto

Le seguenti sono esempi di espressioni che usano operatori aritmetici:

9/4
9%4 + 5
x + 10

Gli operatori aritmetici seguono le regole di precedenza matematiche e, come in matematica, possiamo utilizzare le parentesi (ma soltanto quelle tonde) per modificare il loro ordine di valutazione:

4 + 5 * 6 + 7
(4 + 5) * (6 + 7)

Il valore della prima espressione è 41 mentre la seconda espressione vale 117.

Gli operatori aritmetici prevedono anche tre operatori unari:

Operatore Nome
- negazione
++ incremento
-- decremento

La negazione consente di ottenere un valore negativo di un numero. Ad esempio, -x è il valore negativo del valore numerico rappresentato dalla variabile x.

Gli operatori di incremento e decremento sono applicabili soltanto a variabili e consentono di ottenere un valore rispettivamente aumentato o diminuito di uno. È molto importante la posizione dell'operatore. Infatti, se l'operatore si trova a sinistra dell'operando, l'operazione di incremento o decremento viene eseguita prima della valutazione dell'espressione, mentre se si trova a destra l'operazione viene eseguita dopo. Chiariamo il concetto con un esempio:

var x = 3;
var y = ++x;

La variabile x verrà prima incrementata di uno ed il risultato verrà assegnato alla variabile y. Quindi la situazione finale vedrà x e y con il valore di 4. Nel seguente caso, invece:

var x = 3;
var y = x++;

il valore della variabile x verrà assegnato alla variabile y e soltanto successivamente x verrà incrementata di uno. Come risultato avremo x con il valore di 4 e y con il valore di 3.

Operatori relazionali

Gli operatori relazionali sono quegli operatori utilizzati per il confronto tra valori (e stabilire una "relazione d'ordine"):

Operatore Nome
< minore
<= minore o uguale
> maggiore
>= maggiore o uguale
== uguale
!= diverso
=== strettamente uguale
!== strettamente diverso

Le espressioni che utilizzano gli operatori relazionali restituiscono un valore booleano in base all'esito del confronto. Ad esempio:

4 > 2     // true
5 != 4 + 1	 //false

Il significato della maggior parte degli operatori dovrebbe essere abbastanza intuitivo. Per quanto riguarda il significato degli operatori === e !==, questi verranno approfonditi quando parleremo delle conversioni di tipo.

Gli operatori logici consentono la combinazione di espressioni booleane. JavaScript prevede due operatori binari e un operatore unario:

Operatore Nome
&& and
|| or
! not

Le seguenti sono espressioni che utilizzano operatori logici:

5 > 2 && 3 != 4  // true
true || 4 >= 6   // true
!5==5            // false

La combinazione di operatori logici con altre espressioni può essere insidiosa, nel senso che le regole di precedenza nella valutazione possono generare valori diversi da quelli attesi. È opportuno pertanto utilizzare le parentesi per indicare esplicitamente l'ordine di valutazione e per renderle più leggibili. Le espressioni precedenti diventano pertanto:

(5 > 2) && (3 != 4)  // true
true || (4 >= 6)     // true
!(5==5)              // false

Operatori bitwise ("bit a bit")

Gli operatori sui bit o operatori bitwise trattano i valori numerici come sequenze di bit applicandovi le relative operazioni. Il loro uso è molto specialistico e non entreremo nei dettagli specifici. Gli operatori previsti in JavaScript sono:

Operatore Nome Descrizione
& and bitwise confronta a coppie i bit degli operandi e restituisce 1 se entrambi i bit sono 1, 0 altrimenti
| or bitwise confronta a coppie i bit degli operandi e restituisce 1 se almento uno dei bit è 1, 0 altrimenti
^ xor confronta a coppie i bit degli operandi e restituisce 1 se uno dei bit, ma non entrambi, è 1, 0 altrimenti
~ not inverte il valore di ciascun bit
<< left shift sposta di n posizioni verso sinistra la rappresentazione binaria di un numero
>> right shift sposta di n posizioni verso destra la rappresentazione binaria di un numero
~ not inverte il valore di ciascun bit

Operatori di assegnamento

Un discorso a parte va fatto per gli operatori di assegnamento. Abbiamo già avuto modo di vedere informalmente l'operatore = che ci consente di assegnare il valore di un'espressione ad una variabile. A prima vista questo operatore non sembrerebbe dar luogo ad alcuna espressione. Esso copia semplicemente il valore di un'espressione nella variabile.

In realtà, la copia del valore nella variabile può essere considerata un effetto collaterale. L'espressione di assegnamento restituisce essa stessa un valore: il valore dell'espressione assegnata alla variabile. Il valore del seguente assegnamento, ad esempio:

x = 3 + 5;

è lo stesso valore dell'espressione 3 + 5. Questo vuol dire che possiamo avere espressioni analoghe alla seguente:

y = (x = 3 + 5);

dove y assumerà lo stesso valore di x, cioè 8.

L'uso di espressioni di questo tipo può essere talvolta fonte di bug molto subdoli, soprattutto per chi si avvicina per la prima volta a JavaScript e non proviene da esperienze di programmazione in C, C# o Java. Ad esempio, la seguente espressione avrà come valore sempre "cinque", indipendentemente dal valore di x:

x = 5 ? "cinque" : "diverso da cinque"

Operatore '?', per assegnamenti condizionali

L'unico operatore ternario previsto da JavaScript è l'operatore condizionale. Esso restituisce un valore in base ad una espressione boleana. La sua sintassi è:

condizione ? valore1 : valore 2

Se condizione è vera viene restituito valore1, altrimenti valore2.

Ad esempio, la seguente espressione ha valore "pari" o "dispari" in base alla divisibilità per due della variabile x:

x%2 == 0 ? "pari" : "dispari"

Operatori di assegnamento composti

Oltre all'operatore uguale (=), esistono altri operatori di assegnamento derivanti dalla combinazione degli operatori aritmetici e degli operatori sui bit con il simbolo =. Essi rappresentano una abbreviazione di espressioni di assegnamento la cui espressione da assegnare utilizza lo specifico operatore aritmetico o bitwise.

Ad esempio, la seguente espressione:

x += 3;

è equivalente all'espressione

x = x + 3;

Analogamente a += abbiamo a disposizione gli operatori come:

Forma compatta Scrittura equivalente
x += y x = x + y
x -= y x = x - y
x *= y x = x * y
x /= y x = x / y
x %= y x = x % y

L'uso di questo tipo di espressioni rende più compatto il codice, ma non sempre altrettanto leggibile.

Operatori su stringhe

Oltre agli operatori di assegnamento, logici e relazionali, che sono previsti per tutti i tipi, l'unico operatore su stringhe specifico è l'operatore di concatenazione. Esso consente di creare una nuova stringa come risultato della concatenazione di due stringhe ed è rappresentato dal simbolo del "più" (+):

"piano" + "forte"	// "pianoforte"

Funziona anche nella sua forma compatta per accodare una stringa ad un'altra:

var strumento= "piano";
strumento += "forte";   // strumento = "pianoforte"

Il suo utilizzo è abbastanza immediato, ma con le variabili si possono ottenere risultati non previsti dal momento che il simbolo utilizzato è lo stesso dell'addizione. Ad esempio, nella seguente espressione:

x + y

come fa JavaScript a stabilire se deve sommare o concatenare? Vedremo più avanti la risposta a questa domanda e i possibili effetti indesiderati che si possono generare.


Ti consigliamo anche