Node.js REPL e oltre by Stefano Burigat
Cos'è REPL? REPL (Read-Eval-Print-Loop) è un ambiente interattivo a riga di comando che permette di scrivere codice node ed eseguirlo istruzione per istruzione. REPL si attiva scrivendo node da un prompt dei comandi. REPL può essere utilizzato anche per scrivere ed eseguire codice puramente JavaScript.
Esempi Scrivete separatamente in REPL ognuno degli esempi seguenti (senza commenti e premendo INVIO al termine) e osservate il risultato (in tutte le slide successive, queste istruzioni sono sottintese). a = 2; b = "Node"; c = true; d = ['a', 'b', 'c']; var e = 23.4; //??
Carattere _ Il carattere _ (underscore) permette di accedere all'ultimo risultato ottenuto e sfruttarlo nelle istruzioni successive. Tramite _ è possibile accedere anche a proprietà e funzioni di un oggetto. var a = 2; _++; // come mai? ['a','b','c']; _.length; _.tostring();
Altre funzionalità Tutto ciò che scriviamo viene ricordato da REPL e può essere acceduto tramite freccia su e freccia giù. E' anche possibile utilizzare il tasto TAB per autocompletare parole chiave, funzioni e variabili. CTRL-C permette di uscire dal comando corrente, CTRL-D da REPL. Se si termina una riga con una parentesi (tonda, graffa, quadra), REPL consente di continuare la scrittura sulla riga successiva. function add(a,b){ return (a+b) } add(3,7);
Utilizzo di REPL REPL è molto comodo per testare frammenti di codice ma soprattutto per ispezionare oggetti, identificandone le proprietà. console; global; o = new Object(); o.name = "Test"; o;
Comandi nativi REPL supporta un certo numero di comandi nativi, la cui lista si può vedere inserendo il comando.help (con il punto davanti). 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. // partendo da una sessione pulita var numeri = [2,4,6]; numeri.foreach(function(value) { console.log(value); });.save test.js // uscire da REPL e rientrare.load test.js
Esercizi Utilizzate REPL per eseguire i seguenti frammenti di codice JavaScript (uno alla volta). Cercate di capire perchè ottenete quei risultati. alert("hello!"); "La somma di 5 e 15 è: " + 5 + 15; // come correggerlo? "3" + 1; "3" - 1; var nomi = Array("Tizio","Caio"); var numeri = Array(3,7,5); var nomi = Array("Tizio"); var numeri = Array(3);
var a = new Number; a == 0; // due uguale var a = new String; a == ""; var a = new Object; a == {}; var a = new Array; a == []; var a = {}; a == {}; var a = []; a == []; Esercizi
Esercizi typeof NaN; Infinity === 1/0; // tre uguale 0.1 + 0.2 === 0.3; NaN === NaN; "foo" + + "bar"; typeof null; null instanceof Object; null == false;!null;
Esercizi var result = "Brick" < "alphabet"; var result = "23" < "3"; var result = "23" < 3; var result = "a" < 3; var result1 = NaN < 3; var result2 = NaN >= 3; parseint('06'); parseint('08')
Esercizi 3 == "3"; true == 'true'; (true + 1) === 2; (true + true) === 2; true === 2; true === 1; 3 > 2 > 1; "hello".touppercase(); 3.toString();
Esercizi var f = function() { }; f.foo = 'foo'; f.name; f.name = 'foo'; f.name; var f = function myfunction() { }; f.name; var a = 8; var somefunc = function(){ console.log(a); var a = 8; }; somefunc();
Oltre REPL Per quanto REPL sia utile, non è molto comodo da usare. Il modo più semplice per scrivere programmi node è scrivere il codice con un editor di testo ed eseguire il file creato tramite il comando node seguito dal nome del file. Scrivete su un file test.js il codice seguente ed eseguitelo. console.log("hello Node!");
Esercizi Scrivete in file separati i due frammenti di codice seguenti ed eseguiteli. Cosa succede? Perchè? sum(10,10); function sum(num1, num2){ return num1 + num2; } sum(10,10); var sum = function(num1, num2){ return num1 + num2; };
Esercizi Create una funzione che somma i primi 100000 numeri e calcolatene il tempo di esecuzione (sfruttate la funzione Date.now()). Create un oggetto persona dotato delle proprietà nome, età, occupazione e di una funzione che stampa il nome. Provate tre modalità di creazione diverse: 1) come istanza del tipo Object, 2) come istanza del tipo Object utilizzando la notazione letterale, 3) come istanza di un tipo Persona appositamente definito.