Introduzione
La Microsoft Ajax Library non si occupa solo di ajax, ma porta grossi miglioramenti al linguaggio. Tanto da farmi superare il vago senso di fastidio che provavo ogni volta che mi toccava usare il JS.
Quello che vediamo oggi sono gli array. Le modifiche applicate lo portano ad assomigliare sempre di più alle Collection server-side se pur con le dovute limitazioni.
In cosa è migliorato?
Questa è la lista dei metodi statici (o shared per i programmatori vb) che troviamo nella classe array.
add |
Aggiunge un elemento alla fine dell'array. |
addRange |
Aggiunge un gruppo di elementi alla fine dell'array. |
clear |
Svuota l'array. |
clone |
Copia l'array. |
contains |
Controlla se un elemento è stato passato all'array. |
dequeue |
elimina il primo elemento dell'array. |
forEach |
Itera su ogni elemento dell'array |
indexOf |
Restituisce la posizione della prima occorrenza dell'elemento richiesto |
insert |
Inserisce un elemento alla posizione specificata |
parse |
costruisce un oggetto Array partendo dalla sua rappresentazione in formato stringa |
remove |
rimuove la prima occorrenza di un elemento |
removeAt |
rimuove l'elemento alla posizione cercata |
Tutti questi metodi sono ovviamente molto utili, ma uno mi ha colpito in modo particolare: forEach.
Questo metodo permette di lavorare in modo simile al server.
Vediamo un po' di codice d'esempio
function pageLoad(){
var Ar = []; // come dire new Array()
Array.add(Ar, 1);
Array.add(Ar, 2);
Array.add(Ar, 3);
Array.addRange(Ar, [3,4,5]);
var resDiv = $get("divResult");
resDiv.innerHTML = "";
var deq = Array.dequeue(Ar);
if(deq){
$get("divResult").innerHTML += "dequeued:" + deq + "<br/>";
}
Array.forEach(
Ar,
function(item){
$get("divResult").innerHTML += item + "<br/>";
}
)
}
Questo codice js viene eseguito all'apertura della pagina lato client e renderizza in un div con id "divResult" il contenuto dell'array. La cosa strana del metodo forEach è il secondo parametro. Avete notato che è una funzione? Questa viene richiamata per ogni elemento presente nell'array passandolo come parametro.
Perché dei metodi statici? Non sono più scomodi?
Sono sicuramente più scomodi. Il problema è che aggiungendo dei metodi "non statici" all'array questi vengono restituiti dal ciclo for/in fra i singoli elementi dell'array.
vediamo un esempio:
function pageLoad(){
Array.prototype.scrivi = function(index){alert(this[index]);};
var Ar = new Array;
Array.addRange(Ar, [1,2,3]);
Ar.scrivi(2);
$get("divResult").innerHTML= "Ciclo for(;;)<br/>";
for(var x = 0; x < Ar.length; x++)
{
$get("divResult").innerHTML += Ar[x] + "<br/>";
}
$get("divResult").innerHTML += "Ciclo for/in<br/>";
for(numero in Ar)
{
$get("divResult").innerHTML += numero + "<br/>";
}
$get("divResult").innerHTML += "Ciclo forEach<br/>";
Array.forEach(
Ar,
function(item){
$get("divResult").innerHTML += item + "<br/>";
}
)
}
Cosa fa quest'esempio?
Aggiunge il metodo scrivi all'array, lo popola e subito dopo prova a lanciarlo.
sfruttando il div del precendete esempio cicliamo con un for(;;) su ar ed il risultato è il seguente:
Ciclo for(;;)
1
2
3
quando però eseguiamo il loop di tipo for/in:
Ciclo for/in
0
1
2
scrivi
il loop for/each restituisce fortunatamente:
Ciclo forEach
1
2
3
Il for/in prende TUTTI gli elementi dell'array, compreso il metodo scrivi.
Rinunciando al for/in potremmo svilupparci una classe collection con metodi non-statici. Forse questa la posterò in un altro articolo.
posted @ sabato 22 dicembre 2007 03:08