{

Best practice con Javascript

Il titolo è forse un po' esagerato, diciamo che sarebbe stato più indicato qualcosa tipo "miei personalissimi consigli su come usare javascript".

Iniziamo con un elenco delle informazioni da tenere sempre a mente:

  1. Ovvio, ma ho notato che qualcuno si confonde: javascript è un linguaggio che viene eseguito sul browser del computer che apre la pagina. Il fatto che venga scritto nelle jsp non significa che venga eseguito sul server.
  2. Javascript è un linguaggio dinamicamente interpretato. Questo comporta che gli errori si scoprono solamente quando si esegue quella porzione di codice.
  3. Non è un linguaggio fortemente tipizzato, anzi. Tutte le variabili sono definite con var e si conosce il tipo al momento dell'assegnamento (come python), ma questo può essere modificato (non come per python).
  4. L'incapsulamento, cioè lo scope delle variabili (la loro visibilità) è distinguibile solo in locale e globale (statica).
  5. Praticamente tutto per javascript è una variabile. Ok, affermazione un po' forzata, ma ricordatevi che anche le funzioni sono viste come variabili globali.
  6. Tutti gli oggetti, compresi i nativi, possono essere estesi, non come in java dove le classi final non possono esserlo (es. String).
  7. Gli argomenti delle funzioni possono essere in numero e tipo dinamico.

 

Le precedenti informazioni danno alcune indicazioni su come scrivere codice semi-decente:

  1. Usate nomi di variabili e funzioni quanto più corto possibile. Anche se questo approccio è contrario alla leggibilità del codice, ricordatevi che javascript viene interpretato tutte le volte e se l'interprete deve leggere nomi lunghi impiegherà più tempo ad eseguire il codice.
  2. Quando possibile mette il javascript in file esterni. Aiuta il browser a memorizzare il file senza doverlo scaricare ogni volta con la pagina.
  3. All'interno delle funzioni dichiarate sempre le variabili con var, altrimenti diventano automaticamente variabili globali.
  4. Non dichiarate due funzioni con lo stesso nome solo perché accettano argomenti diversi come fareste in java. Piuttosto usate in maniera intelligente la possibilità di usare "arguments".
  5. Per il confronto, se non siete sicuri del tipo della variabile che state trattando, usate l'operatore === (e l'equivalente !== per il diverso) che controlla valore e tipo.
  6. Documentatevi bene sul framework che adottate visto che alcune librerie/framework modificano gli oggetti nativi di javascript, eviterete comportamenti inattesi.
  7. Quando scrivete una funzione in cui usate oggetti del DOM ricordatevi di "annullare" le variabili usate per il riferimento. Questo è soprattutto vero quando aggiungete eventi dinamici. Es.
    var anchor = document.createElement("a");
    a.onclick(function() {
    alert(this);
    });
    document.appendChild(a);
    a = null;
  8. Evitate quanto più possibile le variabili globali. Si corre il rischio di dichiarare per sbaglio una variabile con lo stesso nome all'interno delle funzioni sovrascrivendo il valore della globale. In questo caso il risultato è imprevedibile.
  9. Se il vostro applicativo viene usato in contesti enterprise, cioè se c'è la possibilità che la vostra pagina venga inclusa in altre (es. portali), cercate di rendere univoci i nomi delle funzioni. Per esempio non usate un generico "submit" come nome della funzione perché sarà altamente probabile che ne possa esistere un'altra nella stessa pagina. In questo senso usate la notazione JSON:
    NomeMiaApp = {
    submit: function() {
    //...
    }
    };

    E poi chiamatela con NomeMiaApp.submit();

  10. Non prendete come oro colato gli esempi che trovate in rete; testateli in ambiti diversi da quelli illustrati tenendo sempre in mente i principi base. Infatti, mentre in giro c'è codice java scritto bene da cui prendere esempio (es. i vari framework sotto apache.org), per javascript si trova roba scritta veramente male!

Queste sono le prime indicazioni a cui cerco di fare riferimento io stesso e spero possano tornare utili ad altri.

Appena me ne verranno in mente altre tornerò ad aggiornare questa pagina.

Realizzato con Drupal, un sistema open source per la gestione dei contenuti