Il primo modo per familiarizzare con Node è tramite la sua REPL (Read-Eval-Print-Loop), vale a dire la sua interfaccia testuale: si tratta di una sorta di riga di comando attraverso la quale possono essere eseguiti comandi Javascript.
Per poterla utilizzare, e quindi testare per la prima volta Node.js, è sufficiente – dopo aver proceduto all’installazione del framework, ovviamente – lanciarla digitando sul terminale:
node
Una volta entrati proviamo a digitare questo semplice comando:
console.log("Hello World!");
Il motore di Node eseguirà il nostro comando stampando a schermo la stringa Hello World!, ma restituirà anche il valore prodotto dall’elaborazione: se non viene elaborato alcun valore (come nel nostro caso) l’output sarà semplicemente undefined.
console e global
Nel nostro primo esempio di codice abbiamo fatto riferimento a console, una delle variabili globali di Node, che svolge una funzione molto simile a quella già molto nota e sfruttata per il debug nel browser. Rispetto a quell’ambiente di lavoro (il browser), però, esiste un’importante differenza: in Node.js non abbiamo a disposizione la variabile globale window in quanto non abbiamo a che fare con una finestra del browser… in un certo senso possiamo dire, per importanza, che essa è sostituita da global. Ogni variabile che assoceremo a global sarà disponibile in ogni punto dell’applicazione. Facciamo un esempio definedo una variabile "cane" in questo modo:
global.cane = "Barboncino";
Se d’ora in poi, ogni volta che faremo valutare l’espressione cane, la REPL ci restituirà la stringa Barboncino. Proviamo in questo modo:
console.log(cane);
Carattersitiche di REPL
Esponiamo, molto sinteticamente, alcune caratteristiche/funzionalità della riga di comando di Node:
- tutto ciò che viene digitato nella REPL viene ricordato: possiamo sfogliare le varie istruzioni digitate utilizzando i tasti freccia su e freccia giù;
- è possibile utilizzare la tabulazione (tasto TAB) per autocompletare parole chiave, funzioni e variabili;
- la combinazione di tasti CTRL-C permette di uscire dal comando corrente, CTRL-D chiude REPL;
- se si termina una riga con una parentesi (tonda, graffa, quadra), REPL consente di continuare la scrittura del codice sulla riga successiva.
Un ruolo importante è ricoperto dal carattere _ (underscore) attraverso il quale è possibile accedere al risultato dell’ultima elaborazione. Ad esempio:
1 + 2 + 3;
// output: 6
_ + 4;
// output: 10
Nel nostro esempio, tramite underscore abbiamo acceduto al valore ricavato dalla somma di 1 + 2 + 3.
Sempre attraverso il carattere underscore è possibile accedere a metodi e proprietà di un oggetto, ad esempio:
['a','b','c'];
_.length;
_.toString();
Comandi nativi di REPL
REPL supporta un certo numero di comandi nativi, la cui lista è accessibile mediante il comando:
.help
I comandi più utili sono .save che permette di salvare la sessione corrente (l’input inserito dall’utente fino a quel momento), e .load che carica un file Javascript nella sessione corrente. Vediamo un esempio:
var num = [3,5,7];
num.forEach(function(value) {
console.log(value);
});
// salvo la sessione corrente come test.js
.save test.js
// esco da REPL...
// poi rientro e carico test.js
// per irprendere da dove lasciato
.load test.js
Eseguire un’applicazione
Il comando da terminale node può essere utilizzato anche per lanciare una applicazione già scritta. Supponiamo di avere un’applicazione denominata miaapp.js nella stessa cartella in cui operiamo col terminale. Col comando:
node miaapp.js
viene eseguita nella finestra del terminale. Tuttavia non trattandosi di istruzioni lanciate all’interno della shell, non otterremo più la stampa del valore restituito.
Nella prossima lezione useremo la shell di Node.js per creare un piccolo server HTTP, e per approfondire l’uso del modello di esecuzione asincrono.