tecnologie lato client: javascript © 2005 stefano clemente i lucidi sono in parte realizzati con...

67
Tecnologie lato Client: Tecnologie lato Client: Javascript Javascript © 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 Clemente [email protected]

Upload: arabella-neri

Post on 03-May-2015

214 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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]

Page 2: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 3: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 4: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 4

Esempio 1Esempio 1

Page 5: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 5

Esempio 2Esempio 2

Page 6: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 6

Esempio 3Esempio 3

Page 7: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 7

Esempio 4Esempio 4

N.B. - JavaScript è case-sensitiveN.B. - JavaScript è case-sensitive

Page 8: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 8

Esempio 4Esempio 4

Page 9: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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>

Page 10: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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>;

Page 11: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 12: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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;

Page 13: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 13

Esempio 5Esempio 5

Page 14: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 15: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 16: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 17: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 18: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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”

Page 19: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 19

L’oggetto String: i metodiL’oggetto String: i metodi

Page 20: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 20

L’oggetto Date: i metodiL’oggetto Date: i metodi

Page 21: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 21

L’oggetto Date: i metodiL’oggetto Date: i metodi

Page 22: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 23: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 23

L’oggetto Number: i metodiL’oggetto Number: i metodi

Page 24: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 24

L’oggetto Number: le L’oggetto Number: le proprietàproprietà

Page 25: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 26: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 27: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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;

Page 28: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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 ()

Page 29: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 29

Esempio 6Esempio 6

Page 30: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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 ]

Page 31: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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 );

Page 32: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 33: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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>

Page 34: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 34

Esempio 7Esempio 7

Page 35: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 36: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 36

Esempio 8Esempio 8

Page 37: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 38: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 39: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 39

Esempio 9Esempio 9

Page 40: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 40

Funzioni Globali di JavaScriptFunzioni Globali di JavaScript

Page 41: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 42: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 43: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 44: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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” );

Page 45: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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” );

Page 46: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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” );

Page 47: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 48: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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>

}}

Page 49: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 49

Esempio 11Esempio 11

Page 50: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 51: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 51

Esempio 12Esempio 12

Page 52: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 53: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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 );

Page 54: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 54

Esempio 13Esempio 13

Page 55: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 56: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 56

Esempio 14Esempio 14

Page 57: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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

Page 58: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 58

Esempio 15Esempio 15

Page 59: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 59

Esempio 16Esempio 16

Page 60: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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>

Page 61: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 61

Esempio 17Esempio 17

Page 62: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 62

Esempio 18Esempio 18

Page 63: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 63

Esempio 19Esempio 19

Page 64: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 64

Esempio 20Esempio 20

Page 65: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

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)!

Page 66: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 66

Esempio 21Esempio 21

Page 67: Tecnologie lato Client: Javascript © 2005 Stefano Clemente I lucidi sono in parte realizzati con materiale tratto dal libro di testo adottato tradotto

11 Ottobre 2005 Stefano Clemente 67

Esempio 22Esempio 22