3 – Vettori e Cicli do while
Un Vettore o array deve essere creato col comando new, si inizializza come una variabile stanziata ad oggetto di tipo Array()
var numeri = new Array();
Da notare che l’oggetto stanziato è di tipo Array con la A maiuscola. Tra le parentesi posso specificare dei parametri iniziali.
var numeri = new Array(); for (i=0; i<=1000; ++i) numeri[i]=Math.random();
In questo caso memorizzo nell’indice dell’array chiamato numeri[] il valore del contatore i, generato casualmente per 1001 volte (ricordo che for guarda l’inizializzazione, poi la condizione, poi esegue lo script, al successivo passaggio esegue l’incremento). Pertanto numeri[] conterrà 1001 valori.
var numeri = new Array(); for (i=0; i<=1000; ++i) numeri[i]=Math.random(); for (i=0; i<=1000; ++i) document.write(numeri[i]+'<br />');
La controprova è scrivere questi 1001 valori con un ulteriore ciclo for che usa il metodo write (ho aggiunto il tag <br /> per andare a capo). Possiamo inserire i valori anche manualmente
var numeri = new Array(); for (i=0; i<=2; ++i) numeri[i]=Math.random(); for (i=0; i<=2; ++i) document.write(numeri[i]+'<br />'); document.write('-----------------<br />'); numeri[3] = 999; for (i=0; i<=3; ++i) document.write(numeri[i]+'<br />');
Inserisco 3 valori nell’array col primo for, col secondo li stampo, scrivo una riga di divisione con un <br /> e infine aggiungo alla posizione 3 (il 4 valore considerando che il primo è uno zero) il numero 999. Stampo i 4 valori. Vediamo cosa succede se lascio un posto vuoto:
numeri[4] = 999; for (i=0; i<=4; ++i) document.write(numeri[i]+'<br />');
Il quinto valore sarà 999 mentre il 4 che non è stato assegnato verrà restituito come undefined . Se nel mio ciclo voglio saltare la stampa dei valori undefined:
numeri[4] = 999; for (i=0; i<=4; ++i) if (numeri[i] != null) document.write(numeri[i]+'<br />');
l’operatore != vuol dire diverso quindi con l’if condiziono la stampa solo se la posizione i è diversa da null .
Posso anche indicare in partenza il numero di elementi contenuti nel vettore:
var numeri = new Array(18);
ovviamente posso poi aggiungerne come abbiamo visto.
Vediamo l’ultimo modo per inizializzare un array
var numeri = new Array("rossi" , "verdi" , "" , "bianchi");
Ho costruito un array di stringhe con 3 valori ( numeri[2] ) passando i valori in fase di inizializzazione.
Vediamo la stampa di questo array approfittando per parlare del ciclo while .
var numeri = new Array("rossi" , "verdi" , "" , "bianchi"); var i = 0; while (numeri[i] != "" ) document.write(numeri[i++] + '<br />');
nomi[i++] viene usato prima col primo valore , cioè zero, poi viene incrementato fino a quando è diverso da nullo, quindi fino al terzo valore.
Se c’ è un risultato, a livello logico, viene considerato true, mentre se è nullo o indefinito viene considerato false, di conseguenza la sintassi abbreviata del while può essere scritta in questo modo:
while (numeri[i] )
finché (while) i ha un valore è true e lo eseguo, altrimenti se è zero o null lo blocco perché false. Vediamo lo stesso esempio col do while :
var numeri = new Array("rossi" , "verdi" , "" , "bianchi"); var i = 0; do document.write(numeri[i++] + '<br />'); while (numeri[i]);
La differenza è che l’espressione viene seguita almeno una volta.
Vediamo il costrutto if else :
var numeri = new Array(1,4,6,8,9); for(i=0; i<=numeri.length; ++i) if (numeri[i]%2) document.write('dispari <br>'); else document.write('pari' + '<br>');
nel ciclo for il contatore i parte da zero e arriva fino alla lunghezza (lenght) dell’array cioè 4 (5 numeri). L’if viene eseguito se è true quindi se il resto tra l’indice i e 2 da valore positivo (quindi dispari) se invece da zero l’if è false e viene seguito l’else.
var numeri = new Array(1,4,6,8,9,4,6,7); for(i=0; i<numeri.length; ++i) if ( (numeri[i]==4) || (numeri[i]==6) ) document.write('trovato alla posizione: ' + i + '<br>');
In questo esempio stampiamo il messaggio se il numero vale 4 o 6 (or si indica con ||). Da notare le parentesi tonde degli if e l’operatore vale (==).
var numeri = new Array(1,4,6,8,9,4,6,7); for(i=0; i<numeri.length; ++i) if ( (numeri[i]>=4) && (numeri[i]<=7 ) ) document.write('trovato alla posizione: ' + i + '<br>');
Nell’esempio usiamo l’operatore and ( && ) quindi stampiamo se l’i è uguale a 4 e minore e uguale 7
var numeri = new Array(1,4,6,8,9,4,6,7); for(i=0; i<numeri.length; ++i) if ( ! (numeri[i]>=4) && (numeri[i]<=7 ) ) document.write('trovato alla posizione: ' + i + '<br>');
Stesso esempi ma con uso del not ( ! ) quindi nego la condizione e stampo tutti i numeri diversi da prima.
switch
var colore = prompt("Qual'è il tuo colore preferito?"); switch (colore) { case "Giallo": document.write("come il sole!"); break; case "Rosso": alert("troppo violento!"); colore=prompt("Dimmene un altro ..."); break; default: document.write("Piace anche a me!"); document.write("... davvero ..."); }
Nel case non c’è bisogno delle graffe per seguire più istruzioni perché c’è il break che interrompe. notare i due punti ( : ) che confronta la condizione del caso.
Il metodo prompt, apre un box con un campo di input nel quale l’utente può inserire del contenuto.