Full Stack

Istruzioni ed Espressioni

Autore

Manuel Ricci

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.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.