Negli articolo precedenti è stato spiegato come costruire una semplice pagina WML e come organizzarne i contenuti utilizzando le “card”.
L’obiettivo di questa settimana è analizzare qualche ottimizzazione che ci permette di scrivere codice WML più compatto, leggibile e mantenibile.
L’ultimo codice WML proposto come esempio era il seguente:
Questa é la card 1!
Questa é la card 2!
Questa é la card 3!
Questa é la card 4!
/
La pagina in questione è un deck composto da una card con funzioni di indice e da quattro card di dettaglio.
All’interno di ogni singola card di dettaglio notiamo l’utilizzo della action
/
che serve per utilizzare uno dei due tasti funzionali dell’apparecchio WAP assegnando ad esso una funzione specifica, in questo caso la funzionalità di equivalente al back sul browser Internet.
L’utilizzo di questa action è ripetuto diverse volte all’interno del codice, in particolare è ripetuto in ogni singola card che deve contenere la funzionalità in questione. Dal punto di vista formale questo è corretto, ma la replicazione del codice non è mai la situazione migliore, se il linguaggio lo permette è meglio prevedere delle ottimizzazioni.
Il questo conteso WML prevede la possibilità di utilizzare i Template.
Un template è un frammento di codice, da scrivere al di fuori del contenuto delle singole card, che viene incluso automaticamente in ogni card del deck.
Vediamo come potrebbe essere riscritta la pagina di esempio utilizzando un template per ottimizzare la scrittura del codice:
Questa é la card 1!
Questa é la card 2!
Questa é la card 3!
Questa é la card 4!
/
È aggiunto il nodo XML identificato dal seguente frammento:
/
e sono state eliminate le action dalle singole card.
In realtà la pagina WML continua a funzionare quasi allo stesso modo, nel senso che l’utilizzo del template permette di replicare automaticamente il codice racchiuso all’interno del template stesso in tutte le card del deck.
La differenza tra le due situazioni è una sola: la pagina che utilizza il template prevede una action specifica per tutte le card del deck, anche per la prima, quella che funge da indice, che nella situazione iniziale non aveva una action associata.
Se vogliamo avere un comportamento identico tra le due pagine WML possiamo utilizzare il meccanismo di shadowing.
Si tratta di inserire, all’interno della card per la quale non vogliamo sia applicato il template, un frammento di codice che abbia esattamente questa funzione. Questo esiste ed è il seguente:
/
In pratica si personalizza il comportamento della action generale, ereditata dal template, modificandola con un’altra action che esegue il comando che, come si intuisce, non esegue nessuna operazione.
Il codice completo diventa quindi il seguente:
Questa é la card 1!
Questa é la card 2!
Questa é la card 3!
Questa é la card 4!
/
In quest’ultimo caso il template si applica a tutte le card, tranne a quella iniziale, dove la stessa action è stata ridefinita in modo da alterarne il comportamento.
Questo meccanismo è generalizzabile in modo da poter utilizzare template anche complessi ma senza l’obbligo di includerli in tutte le card del deck.