tecnologie lato client: javascript © 2005 stefano clemente i lucidi sono in parte realizzati con...
TRANSCRIPT
Tecnologie lato Client:Tecnologie lato Client:JavascriptJavascript
© 2005 Stefano Clemente
I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto in italiano:© 2002 Prentice Hall H. M. Deitel, P. J. Deitel, T. R. Nieto Internet & World Wide Web – How To Program (Second Edition)
Stefano [email protected]
11 Ottobre 2005 Stefano Clemente 2
Riferimenti bibliograficiRiferimenti bibliografici
• H. M. Deitel, P. J. Deitel, T. R. Nieto Internet & World Wide Web – How To Program (Second Edition)ed. Prentice Hall 2002 Capitoli 7, 8, 9, 10, 11, 12
11 Ottobre 2005 Stefano Clemente 3
IntroduzioneIntroduzione
• JavaScript
−Linguaggio di scripting per un approccio disciplinato alla realizzazione di programmi utili per migliorare le funzionalità e la visualizzazione delle pagine Web
−È il linguaggio client-side “de facto” per le applicazioni basate sul Web
−L’uso di JavaScript non è destinato solo allo scripting lato client, ma è utilizzato anche dal lato server per la creazione di script più complessi
11 Ottobre 2005 Stefano Clemente 4
Esempio 1Esempio 1
11 Ottobre 2005 Stefano Clemente 5
Esempio 2Esempio 2
11 Ottobre 2005 Stefano Clemente 6
Esempio 3Esempio 3
11 Ottobre 2005 Stefano Clemente 7
Esempio 4Esempio 4
N.B. - JavaScript è case-sensitiveN.B. - JavaScript è case-sensitive
11 Ottobre 2005 Stefano Clemente 8
Esempio 4Esempio 4
11 Ottobre 2005 Stefano Clemente 9
Struttura di un programma Struttura di un programma JavaScriptJavaScript• Un programma JavaScript deve essere definito nella
parte di intestazione <head></head> (X)HTML• Deve essere racchiuso tra i tag <script></script>• All’interno di questi tag, si può ancora racchiudere in
una sezione di commento HTML per evitare che un browser che non è in grado di eseguirlo lo visualizzi nella pagina
• In sostanza la struttura è<script language="Javascript“
type="text/javascript"><!--
{dichiarazioni e statement JavaScript}//--></script>
11 Ottobre 2005 Stefano Clemente 10
VariabiliVariabili
• Locazioni di memoria in cui memorizzare dati
• Devono essere dichiarate con uno statement varvarvarvar <nome_variabile>;varvar <nome_variabile_1> , … , <nome_variabile_n>;
• Una variabile può essere inizializzata nello stesso statement di definizionevarvar <nome_variabile> = <valore>; varvar <nome_variabile_1> = <valore1> ,
… , <nome_variabile_n> = <valoren>;
11 Ottobre 2005 Stefano Clemente 11
VariabiliVariabili• Il tipo di dato della variabile è definito dal valore che
le viene assegnato• I valori possono essere di tipo
− caratteri o stringhe− interi− virgola mobile− date− booleani
• false = false, 0, null, NaN, “”false, 0, null, NaN, “”• true = qualsiasi altro valorequalsiasi altro valore
• Il nome di una variabile può essere una qualsiasi sequenza di caratteri alfa-numerici, caratteri di sottolineatura (_) e dollaro ($), purché non cominci per un numero e non contenga spazi
11 Ottobre 2005 Stefano Clemente 12
Operazioni sulle variabiliOperazioni sulle variabili
• È possibile−interrogare le variabili per conoscerne il valore−eseguire l’operazione di assegnamento
<variabile> = <espressione>;<variabile> = <espressione>;• l’espressione alla destra dello statement viene valutata• il valore risultante diventa il nuovo valore assegnato alla
variabile
−ESEMPI• a = 12 + 3;a = 12 + 3;• a = a + 3; a = a + 3; ≡ ≡ a += 3;a += 3;• a = a + 1; a = a + 1; ≡≡ a += 1; a += 1; ≡≡ a++; a++; ≡≡ ++a++a;
attenzione: in alcuni casi a++;a++; ≠≠ ++a;++a;
11 Ottobre 2005 Stefano Clemente 13
Esempio 5Esempio 5
11 Ottobre 2005 Stefano Clemente 14
OperatoriOperatoriOperatoreOperatore TipoTipo PrioritàPriorità
() [] .() [] . parentesi/array/punto
++ -- !++ -- ! incremento/decremento/NOT
* / %* / % moltiplicazione/divisione/modulo
+ -+ - addizione/sottrazione
< <= > >=< <= > >= relazionali
== !=== != uguaglianza
&&&& AND
|||| OR
?:?: condizionale
= += -= *= /= = += -= *= /= %=%=
assegnamento
11 Ottobre 2005 Stefano Clemente 15
OggettiOggetti• JavaScript è un linguaggio di programmazione Object-
based• Il nostro mondo è fatto di oggetti• Gli oggetti hanno
− attributi – es. colore, peso, forma− comportamenti – es. una palla rotola, rimbalza, si gonfia, ecc.
• Nel caso dei linguaggi di programmazione− gli oggetti sono parti di codice standardizzate e
intercambiabili che consentono il riutilizzo del codice− proprietà – corrispondono agli attributi dell’oggetto e sono le
variabili e le costanti dell’oggetto− metodi – corrispondono ai comportamenti e sono le parti di
codice richiamabili dall’esterno vale a dire le funzioni dell’oggetto
11 Ottobre 2005 Stefano Clemente 16
L’oggetto Math: i metodiL’oggetto Math: i metodiMetodo Descrizione Esempio
abs( x ) Valore assoluto di x abs( 7.2 ) = 7.2 abs( 0.0 ) = 0.0 abs( -5.6 ) = 5.6
ceil( x ) Arrotonda x per eccesso ceil( 9.2 ) = 10.0 ceil( -9.8 ) = -9.0
cos( x ) Coseno di x (x in radianti) cos( 0.0 ) = 1.0 exp( x ) Metodo esponenziale ex exp( 1.0 ) = 2.71828
exp( 2.0 ) = 7.38906 floor( x ) Arrotonda x per difetto floor( 9.2 ) = 9.0
floor( -9.8 ) = -10.0 log( x ) Logaritmo naturale di x (base e) log( 2.718282 ) = 1.0
log( 7.389056 ) = 2.0 max( x, y ) Massimo tra x e y max( 2.3, 12.7 ) = 12.7
max( -2.3, -12.7 ) = -2.3
min( x, y ) Minimo tra x e y min( 2.3, 12.7 ) = 2.3 min( -2.3, -12.7 ) = -12.7
pow( x, y ) X alla y (xy) pow( 2.0, 7.0 ) = 128.0 pow( 9.0, .5 ) = 3.0
round( x ) Arrotondamento di x round( 9.75 ) = 10 round( 9.25 ) = 9
sin( x ) seno di x (x in radianti) sin( 0.0 ) = 0.0 sqrt( x ) Radice quadrata di x sqrt( 900.0 ) = 30.0
sqrt( 9.0 ) = 3.0 tan( x ) Tangente di x (x in radianti) tan( 0.0 ) = 0.0
11 Ottobre 2005 Stefano Clemente 17
L’oggetto Math: le proprietàL’oggetto Math: le proprietà
Costante Descrizione Valore Math.E Costante di Eulero (e) Circa 2.718
Math.LN2 Logaritmo naturale di 2 (in base e) Circa 0.693
Math.LN10 Logaritmo naturale di 10 (in base e) Circa 2.302
Math.LOG2E Logaritmo in base 2 della costante di Eulero Circa 1.442
Math.LOG10E Logaritmo in base 10 della costante di Eulero Circa 0.434
Math.PI Circa 3.141592653589793
Math.SQRT1_2 Radice quadrata di 0.5. Circa 0.707
Math.SQRT2 Radice quadrata di 2.0. Circa 1.414
11 Ottobre 2005 Stefano Clemente 18
L’oggetto String: i metodiL’oggetto String: i metodiMetodo Descrizione e esempi
charAt( indice ) Restituisce una stringa contenente il carattere alla posizione specificata da indice var s = “Tecnologie di Internet”; s.charAt ( 0 ) = “T” s.charAt ( 7 ) = “g” s.charAt ( 100 ) = “”
charCodeAt( indice ) Restituisce il carattere Unicode alla posizione specificata da indice s.charCodeAt ( 0 ) = 84 s.charCodeAt ( 7 ) = 103 s.charCodeAt ( 100 ) = NaN
concat( string ) Concatena stringhe s.concat ( “ – CLEI” ); = “Tecnologie di Inernet – CLEI” s1.concat ( s2 ) = s1 + s2
indexOf( substring, indice )
Cerca la prima occorrenza di substring a partire dalla posizione specificata da indice in avanti s.indexOf( "di", 4 ) = 11 s.indexOf( "di", 14 ) = -1
lastIndexOf( substring, indice )
Cerca l’ultima occorrenza di substring a partire dalla posizione specificata da indice all’indietro s.lastIndexOf( "di", 4 ) = -1 s.lastIndexOf( "di", 14 ) = 11
slice( start, end ) Restitusce la stringa compresa tra start e end. Se end non è specificato, il metodo restituisce la stringa da
start alla fine della stringa. Un end negativo specifica un indice a partire dalla fine della stringa (–1 è l’indice dell’ultimo carattere della stringa) s.slice( 1, 14 ) = “ecnologie di ” s.slice( 12 ) = “i Internet” s.slice( 12, -5 ) = “i Int”
split( string ) Separa la stringa proprietaria del metodo in più stringhe
nella posizioni specificate da substring s.split( "e" ) = “T” “cnologi” “ di Int” “rn” “t” s.split( "u" ) = “Tecnologie di Internet”
11 Ottobre 2005 Stefano Clemente 19
L’oggetto String: i metodiL’oggetto String: i metodi
11 Ottobre 2005 Stefano Clemente 20
L’oggetto Date: i metodiL’oggetto Date: i metodi
11 Ottobre 2005 Stefano Clemente 21
L’oggetto Date: i metodiL’oggetto Date: i metodi
11 Ottobre 2005 Stefano Clemente 22
L’oggetto Boolean: i metodiL’oggetto Boolean: i metodi
var b = new Boolean ( <valore_booleano> ); Metodo Descrizione
toString() Restituisce “true” (stringa) se il valore dell’oggetto Boolean corrisponde a vero altrimenti restituisce “false” (stringa)
valueOf() Restituisce il valore true se l’oggetto Boolean corrisponde a true altrimenti restituisce false
11 Ottobre 2005 Stefano Clemente 23
L’oggetto Number: i metodiL’oggetto Number: i metodi
11 Ottobre 2005 Stefano Clemente 24
L’oggetto Number: le L’oggetto Number: le proprietàproprietà
11 Ottobre 2005 Stefano Clemente 25
ArrayArray• Un array è un
gruppo di locazioni di memoria tutte corrispondenti allo stesso nome e con valori solitamente dello stesso tipo (quest’ultima proprietà non è obbligatoria)
c[ 6 ]
-45
6
0
72
1543
-89
0
62
-3
1
6453
78
c[ 0 ]
c[ 1 ]
c[ 2 ]
c[ 3 ]
c[ 11 ]
c[ 10 ]
c[ 9 ]
c[ 8 ]
c[ 7 ]
c[ 5 ]
c[ 4 ]
indice dell’elementodell’array c
nomedell’array c
Il primo elementoha indice 0
11 Ottobre 2005 Stefano Clemente 26
ArrayArray• Un elemento dell’array può essere acceduto
fornendo il nome dell’array e l’indice dell’elementoes: c [ 2 ]
• L’indice può essere il risultato della valutazione di un’espressionees: c [ a + b ]
• Un elemento di un array può essere trattato come una variabilees: c [ 1 ] += 12;
• Un array in JavaScript è un oggettooggetto
11 Ottobre 2005 Stefano Clemente 27
ArrayArray• La dichiarazione di un array
var c = new Array ( 12 );var c = new Array ( 12 );in cui l’operatore new crea un array di 12 elementi
• La dichiarazione sopra può essere scritta anche nel modo che seguevar c;var c; // dichiara l’array// dichiara l’arrayc = new Array ( 12 );c = new Array ( 12 ); // alloca l’array// alloca l’array
• È possibile dichiarare più array nello stesso statementvar c = new Array ( 12 ), b = new Array ( 104 );var c = new Array ( 12 ), b = new Array ( 104 );
• È possibile dichiarare array vuotivar c = new Array ( );var c = new Array ( );e in questo caso gli elementi saranno aggiunti ogni volta con un assegnamento all’elementoc [ 0 ] = 12;c [ 0 ] = 12;
11 Ottobre 2005 Stefano Clemente 28
ArrayArray• Al momento della dichiarazione si può anche inizializzare l’array
var c = new Array ( 10, 20, 30, 40, 50 );var c = new Array ( 10, 20, 30, 40, 50 );crea un array di 5 elementi con i valori 10 per il primo (0), 20 per il secondo (1), …, 50 per il quinto (4)
• Un altro modo di dichiarare un array e di inizializzarlo è il seguente: var c = [ 10, 20, 30, 40, 50 ] var c = [ 10, 20, 30, 40, 50 ]
• Non è necessario inizializzare tutti gli elementivar c = [ 10, 20, , 40, 50 ]var c = [ 10, 20, , 40, 50 ]
• Una proprietà dell’oggetto array è lengthlength, che conta il numero degli elementi dell’arrayc.lengthc.length
• Un metodo dell’oggetto array è sort(<funzione_confronto>)sort(<funzione_confronto>), che ordina gli elementi dell’array; la funzione argomento è opzionale e nel caso in cui non venga fornita sortsort opera attraverso il confronto delle stringhec.sort ()c.sort ()
11 Ottobre 2005 Stefano Clemente 29
Esempio 6Esempio 6
11 Ottobre 2005 Stefano Clemente 30
Array multi-dimensionaliArray multi-dimensionali
• Sono anche detti “array di array”• Un elemento può contenere a sua volta
un array
a[ 1 ][ 0 ] a[ 1 ][ 1 ] a[ 1 ][ 2 ] a[ 1 ][ 3 ]
Row 0
Row 1
Row 2
Column 0 Column 1 Column 2 Column 3
Row subscript (or index)
Array name
Column subscript (or index)
a[ 0 ][ 0 ] a[ 0 ][ 1 ] a[ 0 ][ 2 ] a[ 0 ][ 3 ]
a[ 2 ][ 0 ] a[ 2 ][ 1 ] a[ 2 ][ 2 ] a[ 2 ][ 3 ]
11 Ottobre 2005 Stefano Clemente 31
Array multi-dimensionaliArray multi-dimensionali
• Esempi di dichiarazionivar b = [ [ 1, 2 ], [ 3, 4 ] ];var b = [ [ 1, 2 ], [ 3, 4 ] ];
var b = [ [ 1, 2 ], [ 3, 4, 5 ] ];var b = [ [ 1, 2 ], [ 3, 4, 5 ] ];
var b;var b;b = new Array ( 2 );b = new Array ( 2 );b [ 1 ] = new Array ( 5 );b [ 1 ] = new Array ( 5 );b [ 2 ] = new Array ( 10 );b [ 2 ] = new Array ( 10 );
11 Ottobre 2005 Stefano Clemente 32
FunzioniFunzioni• Un programmatore può scrivere delle funzioni per codificare
delle azioni che possono essere eseguite in più punti dello script• Una funzione è invocata da una chiamata, uno statement del tipo
<nome_funzione> ( <lista_argomenti> );<nome_funzione> ( <lista_argomenti> );• La funzione esegue le azioni codificate e alla fine restituisce il
risultato delle sue elaborazioni• La sintassi della definizione delle funzioni è
function <nome_funzione> ( <lista_parametri> )function <nome_funzione> ( <lista_parametri> ){{
dichiarazioni e statementdichiarazioni e statement}}in cui <nome_funzione><nome_funzione> è un identificatore valido, <lista_parametri><lista_parametri> è un elenco di nomi di parametri ricevuti con la chiamata; il corpo della funzionecorpo della funzione è la sequenza di dichiarazioni e statement tra parentesi graffe
11 Ottobre 2005 Stefano Clemente 33
FunzioniFunzioni• Il corpo della funzione è anche un blocco: un
blocco è in generale in JavaScript una sequenza di dichiarazioni e statement
• Le funzioni terminano−quando l’esecuzione raggiunge la parentesi graffa
finale• in questo caso la funzione non restituisce alcun risultato
−quando l’esecuzione incontra all’interno del corpo uno statement return;return;
• anche in questo caso la funzione non restituisce alcun risultato
−quando l’esecuzione incontra all’interno del corpo uno statement return ( <espressione> );return ( <espressione> );
• la funzione restituisce il valore di <espressione><espressione>
11 Ottobre 2005 Stefano Clemente 34
Esempio 7Esempio 7
11 Ottobre 2005 Stefano Clemente 35
Passaggio argomentiPassaggio argomenti
• Gli argomenti possono essere passati alle funzioni in due modi−call-by-value
• si passa alla funzione una copia del valore dell’argomento
−call-by-reference• la funzione accede direttamente ai dati (variabili)
di chi la invoca
• In JavaScript tutti gli oggetti sono passati alle funzioni nella modalità call-by-reference
11 Ottobre 2005 Stefano Clemente 36
Esempio 8Esempio 8
11 Ottobre 2005 Stefano Clemente 37
Durata e portata degli Durata e portata degli identificatoriidentificatori• Durata = ciclo di vita dell’identificatore
−periodo per il quale l’identificatore è mantenuto in memoria
−variabili dichiarate nelle funzioni e i parametri delle funzioni hanno durata automaticadurata automatica e sono chiamati identificatori localiidentificatori locali
• creati quando il controllo passa alla funzione in cui sono dichiarati
• distrutti quando la funzione termina la sua esecuzione
−gli identificatori definiti nella parte <head> dell’XHTML hanno durata staticadurata statica e sono chiamati identificatori globaliidentificatori globali
11 Ottobre 2005 Stefano Clemente 38
Durata e portata degli Durata e portata degli identificatoriidentificatori• Portata = è la porzione del programma
in cui l’identificatore può essere riferito−portata globale−portata locale – sono le variabili locali alle
funzioni la cui portata è limitata ai delimitatori “{” e “}” del corpo della funzione• gli identificatori locali alle funzioni hanno portata
limitata alla funzione alla quale appartengono e se hanno lo stesso nome di una variabile globale, nascondono per la loro durata la visibilità della variabile globale
11 Ottobre 2005 Stefano Clemente 39
Esempio 9Esempio 9
11 Ottobre 2005 Stefano Clemente 40
Funzioni Globali di JavaScriptFunzioni Globali di JavaScript
11 Ottobre 2005 Stefano Clemente 41
Strutture di controlloStrutture di controllo• Normalmente l’esecuzione di un programma procede
uno statement dopo l’altro seguendo l’ordine in cui questi sono scritti
• A volte è necessario alterare questa sequenza imponendo che il comando successivo da eseguire non sia quello staticamente successivo (trasferimento del controllo)
• Le strutture di controllo sono− strutture sequenze
• prevedono l’esecuzione dei comandi secondo la sequenza in cui sono stati scritti
− strutture di selezione• prevedono la possibilità si scegliere se eseguire o meno alcune
righe di programma− strutture di ripetizione
• prevedono la possibilità di ripetere più volte uno o più righe di programma
11 Ottobre 2005 Stefano Clemente 42
Le strutture di selezione: ifLe strutture di selezione: if
• È la struttura più semplice e permette di scegliere se eseguire o meno uno o più comandi in base al verificarsi di una condizione
• Esempioif ( a >= 0 )if ( a >= 0 )
document.writeln ( “a è positiva” );document.writeln ( “a è positiva” );
condizione comandotrue
false
11 Ottobre 2005 Stefano Clemente 43
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• A differenza della if permette di codificare un’azione da eseguire se la condizione non si verifica
• Esempioif ( a >= 0 )if ( a >= 0 )
document.writeln ( “a è positiva” );document.writeln ( “a è positiva” );elseelse
document.writeln ( “a è negativa” );document.writeln ( “a è negativa” );
condizione comando1truefalsecomando2
11 Ottobre 2005 Stefano Clemente 44
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• JavaScript dispone di un operatore ternario “?:?:” equivalente al costrutto if/else
• L’esempio precedente potrebbe essere riscritto nel modo seguentedocument.writeln ( document.writeln (
a >= 0 ? “a è positiva” : “a è a >= 0 ? “a è positiva” : “a è negativa” );negativa” );
11 Ottobre 2005 Stefano Clemente 45
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• Si possono annidare diversi if/else per testare condizioni multiple
• Esempioif ( a >= 1 && a <= 10 ) if ( a >= 1 && a <= 10 )
document.writeln ( “1 document.writeln ( “1 ≤ a ≤ 10” );≤ a ≤ 10” );else if else if ( a >= 11 && a <= 20 ) ( a >= 11 && a <= 20 )
document.writeln ( “11 document.writeln ( “11 ≤ a ≤ 20” );≤ a ≤ 20” );else if else if ( a >= 21 && a <= 30 ) ( a >= 21 && a <= 30 )
document.writeln ( “21 document.writeln ( “21 ≤ a ≤ 30” );≤ a ≤ 30” );else if else if ( a >= 31 && a <= 40 ) ( a >= 31 && a <= 40 )
document.writeln ( “31 document.writeln ( “31 ≤ a ≤ 40” );≤ a ≤ 40” );
11 Ottobre 2005 Stefano Clemente 46
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• L’else è associato sempre all’ultimo if, per esempioif ( a >= 1 )if ( a >= 1 )
if ( b >= 1 ) if ( b >= 1 ) document.writeln ( “a e b sono document.writeln ( “a e b sono ≥ 1≥ 1” );” );
else else document.writeln ( “document.writeln ( “a < 1” );a < 1” );
produrrà il risultato “a < 1” quando a >= 1 e b < 1
• Per evitare questo tipo di errori bisogna ricorrere all’uso delle parentesi graffeif ( a >= 1 ) {if ( a >= 1 ) {
if ( b >= 1 ) if ( b >= 1 ) document.writeln ( “a e b sono document.writeln ( “a e b sono ≥ 1≥ 1” );” );
}}else else
document.writeln ( “document.writeln ( “a < 1” );a < 1” );
11 Ottobre 2005 Stefano Clemente 47
Le strutture di selezione: if/elseLe strutture di selezione: if/else
• L’uso delle parentesi graffe è utile anche quando si vuole associare l’esecuzione di più comandi a un ramo if o elseif ( a >= 1 && a <= 10 ) {if ( a >= 1 && a <= 10 ) {
document.writeln ( “document.writeln ( “a a ≥≥ 1” ); 1” );document.writeln ( “adocument.writeln ( “a ≤ 10” ); ≤ 10” );
}}else {else {
document.writeln ( “document.writeln ( “a < 1 oppure ” );a < 1 oppure ” );document.writeln ( “document.writeln ( “a a >> 10” ); 10” );
}}• Un insieme di statement racchiuso tra
parentesi graffe è detto bloccoblocco
11 Ottobre 2005 Stefano Clemente 48
Le strutture di selezione: switchLe strutture di selezione: switch
• Permette la selezione multipla• Sintassiswitch ( <variabile> ) {switch ( <variabile> ) {
case <valore_1>:case <valore_1>:<lista_statement_1><lista_statement_1>break;break;
……case <valore_n>:case <valore_n>:
<lista_statement_n><lista_statement_n>break;break;
default:default:<lista_statement_default><lista_statement_default>
}}
11 Ottobre 2005 Stefano Clemente 49
Esempio 11Esempio 11
11 Ottobre 2005 Stefano Clemente 50
Le strutture di ripetizione: whileLe strutture di ripetizione: while
• Permette di ripetere un comando o una sequenza di comandi fino a quando un data condizione è vera
• La condizione è valutata all’ingresso nella strutturae il comando eseguito solose la condizione è true
• Sintassiwhile ( <condizione> )while ( <condizione> )
<lista_statement>;<lista_statement>;• Esempiovar prodotto = 2;var prodotto = 2;while ( prodotto <= 1000 )while ( prodotto <= 1000 )
prodotto *= 2;prodotto *= 2;
condizione comandotrue
false
11 Ottobre 2005 Stefano Clemente 51
Esempio 12Esempio 12
11 Ottobre 2005 Stefano Clemente 52
Le strutture di ripetizione:Le strutture di ripetizione:do/whiledo/while• Come il comando while, ma la condizione è valutata dopo l’esecuzione
del corpo− il corpo è eseguito almeno una volta
• All’ingresso nella struttura si esegue il corpo dopo si valuta la condizione: se la condizione è true si esegue nuovamente il corpo, se è false si esce dal ciclo
• Sintassido {do {
<lista_statement><lista_statement>} while ( <condizione> );} while ( <condizione> );
• Esempiovar prodotto = 2;var prodotto = 2;do {do {
prodotto *= 2;prodotto *= 2;} while ( prodotto <= 1000 );} while ( prodotto <= 1000 );NB – le parentesi graffe in caso di un unico statement sono opzionali e vengono solitamente messe al solo fine di migliorare la leggibilità del programma
condizione
comando
true
false
11 Ottobre 2005 Stefano Clemente 53
Le strutture di ripetizione: forLe strutture di ripetizione: for
• È una ripetizione controllata da un contatore• Sintassi
for ( <inizializzazione>; <test>; <incremento> )for ( <inizializzazione>; <test>; <incremento> )<lista_statement><lista_statement>
• È equivalente a <inizializzazione><inizializzazione>while ( <test> ){while ( <test> ){<lista_statement><lista_statement><incremento><incremento>}}
• Esempiofor ( var i = 1; i <= 10; i++ )for ( var i = 1; i <= 10; i++ )document.writeln ( i );document.writeln ( i );
11 Ottobre 2005 Stefano Clemente 54
Esempio 13Esempio 13
11 Ottobre 2005 Stefano Clemente 55
Le strutture di ripetizione: for/inLe strutture di ripetizione: for/in
• È una ripetizione eseguita su tutti gli elementi di un insieme
• Sintassifor ( <variabile_elemento> in <insieme> for ( <variabile_elemento> in <insieme> ))
<lista_statement><lista_statement>
• Viene solitamente usata con gli array
11 Ottobre 2005 Stefano Clemente 56
Esempio 14Esempio 14
11 Ottobre 2005 Stefano Clemente 57
Le strutture di ripetizione:Le strutture di ripetizione:break e continuebreak e continue• breakbreak e continuecontinue, usati nelle strutture di ripetizione,
servono per alterare l’esecuzione dei cicli• breakbreak
− provoca l’uscita immediata dalla struttura di ripetizione− all’interno della struttura i comandi successivi al breakbreak non
saranno eseguiti− nessun ciclo verrà più eseguito− si esegue il primo comando successivo alla struttura di
ripetizione• continuecontinue
− forza una nuova iterazione− all’interno della struttura i comandi successivi al continuecontinue
non saranno eseguiti− nei whilewhile e do/whiledo/while la continuecontinue forza il test della
condizione− nei forfor e for/infor/in forza l’incremento dell’elemento di
conteggio e solo dopo il test della condizione
11 Ottobre 2005 Stefano Clemente 58
Esempio 15Esempio 15
11 Ottobre 2005 Stefano Clemente 59
Esempio 16Esempio 16
11 Ottobre 2005 Stefano Clemente 60
Le strutture di ripetizione:Le strutture di ripetizione:break e continue con uso di etichettebreak e continue con uso di etichette• breakbreak e continuecontinue, interrompono l’esecuzione
del ciclo al quale appartengono
• Nel caso di strutture di ripetizione annidate, l’uscita da una non provoca l’uscita dalle altre
• Si può controllare il salto attraverso l’uso di etichette
• Un’etichetta non è altro che un identificatore di uno statement o di un blocco di statement<etichetta>: <statement><etichetta>: <statement>
11 Ottobre 2005 Stefano Clemente 61
Esempio 17Esempio 17
11 Ottobre 2005 Stefano Clemente 62
Esempio 18Esempio 18
11 Ottobre 2005 Stefano Clemente 63
Esempio 19Esempio 19
11 Ottobre 2005 Stefano Clemente 64
Esempio 20Esempio 20
11 Ottobre 2005 Stefano Clemente 65
Funzioni ricorsiveFunzioni ricorsive• Una funzione ricorsiva è una funzione che
richiama se stessa−direttamente−indirettamente attraverso un’altra funzione
• L’uso delle funzioni ricorsive è utile in quei casi in cui−si conosce il caso base−gli altri casi sono riconducibili attraverso casi più
semplici al caso base (chiamata ricorsiva)
• Esempio: fattoriale di un numero – n!n!−Caso base: 1! = 11! = 1−Caso generico: n! = n * (n – 1)!n! = n * (n – 1)!
11 Ottobre 2005 Stefano Clemente 66
Esempio 21Esempio 21
11 Ottobre 2005 Stefano Clemente 67
Esempio 22Esempio 22