Istruzioni ed Espressioni
Dev

Istruzioni ed Espressioni

Piccola premessa: questo articolo cerca di far chiarezza una volta per tutte sulla differenza sostanziale tra i concetti di istruzioni ed espressioni in JavaScript. Non è sempre molto chiara e attorno c'è parecchia confusione (come per lo scope delle variabili e come altri 1200 cose che gravitano intorno a JavaScript 🤦‍♂️).

Quindi partiamo dall'ABC, con la definizione di espressione e istruzione.

Un espressione produce un valore e può essere scritto/assegnato ovunque sia necessario, come ad esempio l'assegnazione ad una variabile o il passaggio di un argomento ad una funzione. Di seguito qualche esempio di espressione:

1laMiaVariabile; 2Math.floor(3.14); 3(2 + 3) * x;

Un'istruzione, invece, esegue un'azione. I cicli for, do/while, while, if/else e switch.

Un programma (questa in linea generale, non sto parlando solo di JavaScript) è un sequenza di istruzioni.

Dove JavaScript si aspetta un'istruzione può essere anche essere scritta un'espressione. Questo tipo di istruzioni sono chiamate dichiarazione di espressione (o expression statement). Il discorso vale solo in questo senso, perché altro contrario non è contemplabile. Un if non può essere passato come argomento di una funzione, molto semplicemente.

Qualche esempio

Ho affermato che "Dove JavaScript si aspetta un'istruzione può essere anche essere scritta un'espressione", vediamo nel dettaglio cosa intendo dire con qualche semplice esempio.

Prendiamo in esame il seguente snippet di codice:

1let x; 2if (y >= 0) { 3 x = y; 4} else { 5 x = -y; 6}

Questa istruzione può essere scritta sfruttando l'operatore ternario (spoiler alert: sarà oggetto del prossimo articolo) in questo modo:

1let x = y >= 0 ? y : -y;

Ciò che c'è a destra dell'uguale è un'espressione e fa esattamente la medesima cosa fatta dall'istruzione precedente.

Oppure, in JavaScript si usa il punto e virgola per dichiarare il termine di istruzione.

1foo(); bar();

In questo caso è possibile usare il poco famoso operatore virgola che valuta entrambe le espressioni e restituisce il risultato della seconda.

1foo(), bar(); 2// Oppure 3let x = "a", "b"; // x è uguale a 'b'

Un articolo breve, ma che spero serva a chiarire due concetti fondamentali di JavaScript così da non fare confusione in futuro.

Crediti foto: Neil Su

;