Pacchetto di funzioni personali

functionsTutte le volte che inizio un nuovo progetto cerco di usare il più possibile script e funzioni che ho creato in precedenza.

Questo permette di velocizzare i tempi di implementazione e soprattutto affidarsi a del codice che si conosce bene e che è stato raffinato nel tempo rendendolo privo di errori e bug (per quanto questo possa essere possibile! ;-) )

Affinche questo sia possibile senza impazzire è importante seguire prima di tutto queste due semplici regole:

  • Tenere le funzioni e gli script raggruppati in un file o una directory
  • Creare funzioni e script di carattere generale  non troppo specializzati su un aspetto del progetto

Se per esempio stiamo sviluppando un software per una libreria, sicuramente avremmo bisogno di decine di funzioni e procedure per interagire con dati del tipo autore, titolo, descrizione, codice ISBN e altro. Tutte funzioni necessarie ma che non hanno un carattere generale e difficilmente potranno essere usate per altri progetti.

Per questo motivo di solito quando programmo in qualsiasi linguaggio – sia esso PHP, ASP, COLDFUSION, PLSQL, JAVASCRIPT o quello che più vi piace – ho almeno due file da includere nel mio progetto:

funzioni_generali.php dentro questo file inserisco tutte le funzioni e codice che hanno carattere generale. 

funzioni_progetto.php dentro questo file si trovano tutte le funzioni e codice che, nonostante debbano essere disponibili in qualsiasi parte del progetto corrente, non saranno probabilmente usate per altri progetti.

Per rendere disponibile il contenuto del file, a seconda del tipo li linguaggio usato, esso verrà incluso o compilato insieme al progetto.

(l'estensione dei file è .php per scopo dimostrativo, all'occorrenza sarà .asp o .aspx o .js o altro)

Se durante lo sviluppo mi rendo conto che ho ripetutamente bisogno di eseguire un'operazione o un set di istruzioni e che queste potrebbero essere utili anche in altri progetti allora creo una funzione specifica che richiamerò all'occorrenza e la includo nel file funzioni_generali.


Andando avanti con il tempo e con i progetti ci si accorge che il pacchetto di funzioni generali che ci portiamo dietro contianua a crescere e soprattutto molte delle funzioni che avevamo pensato e già  implementato in decine di progetti con una piccola modifica possono essere migliorate e servire per più scopi.

Il consiglio che vi do è semplice: NON FATELO!

Se trovate un bug correggetelo (anche qui ci sarebbe da discutere non poco!!! moltissime volte vi troverete in situazioni in cui  l'applicazione è adattata al bug e, correggendolo l'applicazione potrebbe gererare errori o comportamenti anomali) ma non modificate o ampliate la logica con cui tale funzione era stata progettata anche se vi sembra un peccato. Resistete! 

Se invece volete estendere una funzione ma, lo scopo della funzione rimane invariato allora vi consiglio di valutare l'impatto in ogni punto del progetto in cui avete usato quella funzione o script e capire come si comporterà il sistema.

Solitamente, quando mi capita una cosa del genere faccio una di queste tre cose:

  • Se sono all'inizio di un progetto e la funzione non è ancora stata implementata oppure è usata in pochi punti allora la modifico e rieseguo un test completo di ogni punto in cui è utilizzata.
  • Se la funzione in questione è utilizzata in molti punti e valutare l'impatto della modifica sarebbe troppo lungo e dispendioso creo un'altra funzione agganciando alla fine del nome " _v2 " (versione 2) e nei commenti spiego il motivo della revisione e cosa c'è di diverso/in più rispetto alla versione precedente.
  • Se lo scopo della funzione cambia allora posso crearne una copia e la rinomino chiamandola con un nome adatto al nuovo scopo. Avrete due funzioni molto simili ma sarà più facile fare manutenzione e debug.

Una cosa che sconsiglio vivamente è quella di estendere una funzione aggiungendo in coda ai paramentri passati altri parametri nuovi e OPZIONALI così da non dover neppure modificare i punti in cui la funzione stessa viene richiamata! E' il modo più veloce ed apparentemente indolore per implementare le nuove funzionalità ma questo porta potenziale situazione in cui sarete costretti a rimettere mano pesantemente sia alla funzione che al codice.

Ricordate che una tecnica del genere è solo una scorciatoia e, sebbene tutto continuerà a funzionare all'esterno della funzione, al suo interno i parametri opzionali andranno comunque gestiti ed entreranno a far parte del codice e delle condizioni di IF.

Ancora peggio se aggiungete un parametro opzionale e, all'interno della funzione create due sezioni di IF per gestire la presenza o meno del parametro!! Molto meglio creare una funzione separata _v2 o con un nuovo nome a seconda del caso. 

Ricordatevi che scomporre le operazioni più complesse in tante operazioni più piccole non è facile e che la linearità del codice che scrivete vi salverà ore di lavoro e di sconforto. 

Cercate di creare funzioni che siano come delle blackbox in cui sapete cosa ci dovete mettere dentro e cosa vi dovete aspettare come ritorno o output. Se una funzione diventa troppo complessa o strutturata dividetela a sua volta in più parti.

Ciao per ora

F

You can leave a response, or trackback from your own site.

Leave a Reply