Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
JavaScript: Esempi
Marco Comini
2021-10-21
JavaScript: Esempi funzioni/6
Bisogna stare attenti alle dichiarazioni in blocchi anonimi (cioè quelli che non sono
il corpo di una funzione) perché JavaScript non li tratta nel modo canonico.
1 var something = 1;
2 { print ( " Inside 1 a : something = " + something );
3 var something = 2;
4 print ( " Inside 1 b : something = " + something );
5 }
6 print ( " Outside 1: something = " + something );
7 print ( " Outside 1: somethingElse = " + somethingElse );
8 { var somethingElse = 4;
9 }
10 print ( " Outside 2: somethingElse = " + somethingElse );
11 function block1 () {
12 print ( " Inside 2 a : something = " + something );
13 var something = 3;
14 print ( " Inside 2 b : something = " + something );
15 }
16 block1 ();
17 print ( " Outside 3: something = " + something );
Marco Comini
2021-10-21
Strutturare i dati
Due categorie
Tipi semplici
Booleani, Caratteri, Interi, Virgola mobile
Unit (Void)
Enumerazioni
Intervalli
Tipi composti
Record, record varianti
Array
Insiemi
Puntatori
Marco Comini Informatica Multimediale 2021-10-21 3 / 28
Tipi semplici
Unit (Void)
Contiene un unico valore (detto unità) e non ci sono operazioni
Intervalli
Un insieme di tutti i numeri interi fra un minimo e un massimo.
Si implementano come un normale numero intero ma si controlla a tempo
d’esecuzione che il valore sia contenuto nell’intervallo.
Nei linguaggi in cui si hanno i tipi intervallo gli indici degli array sono di questo
tipo.
Enumerazioni
Si dichiarano esplicitamente tutti i nomi dei possibili valori. Ad esempio
1 type Courses = In f o rm a t i ca _ m ul t i me d i al e
2 , M a te ma ti c a_ e_ st a ti st ic a
3 , Sociologia_della_comunicazione
A volte si hanno le operazioni successore e predecessore.
Per ogni nome viene riservato uno spazio di memoria adatto a contenere un
valore del tipo specificato
In ogni momento viene mantenuto il valore per uno solo fra i nomi specificati.
Si mantiene inoltre un tag che permette di identificare qual’è il nome attivo.
Viene riservato uno spazio di memoria pari al massimo delle dimensioni di
tutti i tipi specificati più lo spazio per il tag.
I valori del tag del record variante implicitamente sono un enumerato.
Si usa spesso in combinazione con un costrutto case, come
1 case x . tag {
2 study_year : ...
3 graduated : ... }
In alcuni linguaggi abbiamo una variante che viene chiamata union in cui non
si memorizza il tag (perdendo ogni controllo).
Marco Comini Informatica Multimediale 2021-10-21 6 / 28
Tipi composti: Array/1
? 7 ? ? 8
0 1 2 3 4
0 1 2 3 4
0 ? ? ? ? ?
1 ? 7 ? ? ?
2 ? ? ? ? 8
Si parla di
conversione implicita o coertion quando la conversione viene fatta nella
macchina astratta, senza che ve ne sia traccia a livello linguistico;
conversione esplicita o cast quando la conversione è indicata nel testo del
programma.
Definizione (Classi)
Una classe è un costrutto usato come modello per creare oggetti composti da
attributi = la specifica di nomi associati a dei tipi o (altre) classi;
metodi = la specifica di nomi associati a tipi di funzioni.
Definizione (Istanze)
Una istanza di una classe è un oggetto che contiene valori e funzioni per i nomi
della classe.
Marco Comini Informatica Multimediale 2021-10-21 15 / 28
Classi ed oggetti/2
Marco Comini
2021-10-21
JavaScript: Oggetti/1
Il termine proprietà usato da JavaScript indica sia gli attributi che i metodi
nella terminologia della programmazione ad oggetti.
Quindi le proprietà che non sono metodi (= che non sono funzioni) sono
esattamente gli attributi nella terminologia della programmazione ad oggetti.
Ad esempio
1 var point = { coordY : 2};
2 point . coordX = 0;
3 point . coordY = 0;
4 show ( point );
5 show ( point . coordZ );
produce
1 { coordY : 0 , coordX : 0}
2 undefined
Con la keyword this possiamo riferire l’oggetto che invoca una funzione.
Ad esempio
1 var person = {
2 firstName : " John " ,
3 lastName : " Doe " ,
4 fullName : makeFullName
5 };
6
7 function makeFullName () {
8 return this . firstName + " " + this . lastName ;
9 }
10
Ad esempio
1 class Car {
2 constructor ( name , year ) {
3 this . name = name ;
4 this . year = year ;
5 }
6 ageInYear ( year ) {
7 return year - this . year ;
8 }
9 }
10