lunedì, dicembre 01, 2014

Esercitazioni su node.js: esercizio 1

Con questo post, comincia una serie di esercitazioni pratiche, tratte dal sito nodeschool.io, per prendere confidenza con le librerie del linguaggio.

Testo dell'esercizio
Scrivere un programma che accetti uno o più numeri come parametri da linea di comando e che stampi a video la somma di tali numeri.
Esempio di invocazione del programma: node programma.js 2 3 5 , in tal caso l'output sarà 10.

Suggerimenti
Per risolvere l'esercizio, dare un'occhiata alla documentazione ufficila sull' oggetto globale process, in particolare alla proprietà process.argv.

Esempio di utilizzo di un ciclo for in javascript

 var indice,  
   max = 10;  
   for (indice = 1; indice <= max; indice++) {  
        console.log(indice);  
   }  
          

Una possibile Soluzione
 var somma = 0,  
     i = 0;  
   
 if (process.argv.length > 2) {  
      for (i = 2; i < process.argv.length; i++) {  
           if (Number(process.argv[i])) {  
              somma += parseInt(process.argv[i]);  
           }  
           else {  
              console.log("Parametro " + process.argv[i] + " non è un numero!" );  
           }  
      }   
      console.log(somma);  
 } else {  
      console.log('Esempio di utilizzo : node programma.js 1 3 5');  
 }  

Per convertire una stringa in un intero, ho utilizzato la funzione Number che trasforma una stringa nell'intero equivalente o ritorna NaN (Not a Number) nel caso in cui la stringa non rappresenti un numero.

In javascript esistono i concetti di valore falsy e truthy per le espressioni booleane: i numeri sono considerati valori veri mentre NaN, null, undefined valori falsi: Number('ertttt') ritorna dunque NaN che nell'if viene valutato a false.

Ho aggiornato su github il progetto, effettuate un git pull per aggiornare i sorgenti che avete in locale, come mostrato in questo post

Alla prox
Ivan

3 commenti:

  1. Anonimo10:48 PM

    la mia soluzione:
    esercizio_1.js :
    var somma = 0;
    process.argv.forEach(function(val, index, array) {
    // console.log(index + ' : ' + val);
    if (index > 1 ){ // elimina gli argomenti 0 e 1
    somma += parseInt(val) };
    });
    console.log(somma);

    node esercizio_1.js 2 4 6
    ==>12

    RispondiElimina
    Risposte
    1. Buona soluzione.
      Aggiungerei solo un po' di controlli, cosa succede se uno dei parametri non è una stringa che rappresenta un intero o se mancano i parametri?
      Invece del forEach utilizzerei un classico for, per evitare il controllo sul index.
      Invece di parseInt, utilizzerei Number. Prova ad eseguire parseInt('4s3'), ti stupirà ma il risultato è 4 :). Utilizzando Number('4s3') otteniamo NaN, la costante che rappresenta un NON Numero :)
      A breve una possibile soluzione completa

      Elimina
  2. Visto che nei commenti non posso usare i tah html per formattare in maniera efficace il codice, metterò le soluzioni in fondo ad ogni rispettivo post.

    RispondiElimina