giovedì, novembre 13, 2014

All'inizio fu il caos ...

Non so quale sia stato il vostro primo approccio con il linguaggio javascript, io ho cominciato ad usarlo mettendo mano ad una vecchia applicazione web scritta in asp con un po' di controlli di validazione di un form.

Tanto per rendere l'idea:
 <html>  
      <head>  
           <script>  
                function f1() {  
   
                } 
   
                function f2() {  
   
                }
   
                function f3() {  
   
                } 
           </script>  
      </head>  
      <body>  
        <!-- eventi sul dom che scatenano le varie funzioni -->  
      </body>  
 </html>  
Nel mio caso le funzioni erano "solo" una ventina e già  faticavo a seguire il flusso di esecuzione del codice, impiegavo tanto tempo a fare le modifiche piu' banali.

Capite che non ci misi molto ad odiare javascript, soprattutto perchè abituato al rigore di un linguaggio ad oggetti tipizzato e compilato come Java.

Mi sentivo spaesato. Io che cercavo sempre di strutturare il codice in Java cercando di evitare codice a spaghetti, non sopportavo l'accozzaglia di funzioni e variabili globali sparse nella varie pagine html senza un minimo di struttura e di incapsulamento dei dati.

Insomma evitavo lavori di front end come la peste, ma con l'avvento del web2 e 3 e 4, a (proposito : a che punto siamo?) non potevo più nascondermi: dovevo prendere di petto il linguaggio e domarlo.

Avevo letto da qualche parte che Javascript  era comunque un linguaggio ad oggetti, ma io gli oggetti non li vedevo! Ma come si fa ad avere un oggetto senza una classe? Queste erano le mie perplessità, finchè, cercando sul web, non mi sono imbattuto in lui: Douglas Crockford e ho cominciato a scoprire le meraviglie del linguaggio.

Grazie a Douglas, l'esempio in alto ho cominciato a scriverlo così:
  var modulo = (function() {  
                   var f1 = function() {  
               
                            },  
                       f2 = function() {  
                 
                            },  
                       f3 = function() {  
                 
                            };  
               
                       return {  
                         f1 : f1,  
                         f2 : f2,
                         f3 : f3
                       };   
                })();  
   
ottenendo una unica variabile globale che incapsula le funzionalità del modulo, nascoste all'esterno come se fossero private :))

Per capire a fondo il precedente codice, bisogna padroneggiare i concetti di closure, IIFE, inner function che cercherò di illustrare nei prossimi post :))
Alla prox
Ivan

2 commenti:

  1. Quindi ogni singola funzione diventa una variabile, contenute poi in un altra funzione, anch essa che diventa una funzione... :O "prima ero cieco...ora vedo"

    RispondiElimina
    Risposte
    1. Direi che ogni funzione dichiarata nelle scope global è un oggetto proprietà dell'oggetto window: lo vedrai nei prossimi post.
      Ciao!

      Elimina