JavaScript/Tipi di dati e variabili

Indice del libro

Un elemento necessario per la programmazione è la possibilità di salvare delle informazioni introdotte dall'utente o elaborate a partire da altre dal programma. In informatica, queste vengono chiamate dati i quali possono essere salvati in celle di memoria identificate da una variabile.

Tipi di dati

modifica

I dati in JavaScript possono essere di varie tipologie e a seconda della tipologia si potrà lavorare in modo diverso con essi. Il JavaScript è un linguaggio chiamato a tipizzazione debole, in quanto ogni volta che si fa riferimento ad un dato non è necessario specificare il tipo, che viene attribuito automaticamente dal parser in base al contesto. In linguaggi di programmazione come il C, ad esempio, è necessario specificare se una variabile conterrà una stringa di testo o un numero o altri tipi di dati, mentre ciò non è necessario in JavaScript.

I dati numerici possono essere positivi e negativi e si distinguono in integer (numeri interi) e float (numeri a virgola mobile).
Per convertire un valore qualsiasi in un valore numerico, JavaScript mette a disposizione due funzioni: parseInt e parseFloat. Per ora ci basti sapere che una funzione è un sottoprogramma (come un metodo) che non è associato ad alcun oggetto ma restituisce comunque un valore in base ad eventuali parametri accettati in ingresso. Per convertire i dati, ad esempio una stringa, queste funzioni analizzano carattere per carattere la stringa fornita come input prendendo in considerazione solo i numeri e, nel caso di parseFloat, anche il separatore decimale .. Ad esempio:

parseFloat("34acb") //restituisce 34.
parseInt("3eac34") //restituisce 3.

Not a Number

modifica

Può tuttavia succedere che il valore passato alle funzioni di parsing dei numeri non possa essere elaborato come numero. In questo caso la funzione restituisce un valore particolare, NaN, che è l'acronimo per Not a Number, non un numero. È possibile testare se un valore è NaN usando la funzione isNaN:

isNaN("123") //restituisce false o 0.
isNaN("abc") //restituisce true o 1.

Stringhe

modifica

In informatica una stringa è una sequenza di uno o più caratteri alfanumerici. In JavaScript le stringhe si indicano inserendole all'interno di virgolette doppie (") o apici (') Bisogna però fare attenzione a chiudere una stringa con lo stesso apice con la quale è stata aperta; sono ad esempio stringhe valide:

"Hello, world ! 1234"
"Peter O'Toole"

ma non lo è ad esempio

'Peter O'Toole'

in quanto il parser analizzerebbe la stringa e, arrivato a O' penserebbe che la stringa si chiuda, senza sapere cosa sia Toole'.
È possibile anche indicare che caratteri come " e ' non indicano la fine del testo ma un carattere qualsiasi facendole precedere dal carattere di commutazione o backslash \. Ad esempio sono stringhe valide:

'Peter O\'Toole'
"Questo libro è depositato su \"it.wikibooks\""

In realtà ogni carattere è commutabile in una sequenza esadecimale usando la notazione \xNN dove NN è un numero esadecimale che identifica un carattere nel set Latin-1.

Per forzare la conversione da un numero ad una stringa basta usare la sintassi numero.toString().

Dati booleani

modifica

Il tipo di dato booleano può assumere i soli valori true (vero) e false (falso). Il tipo di dato booleano è fondamentale per la selezione binaria e per il decision-making.
Quando è atteso un tipo di dato booleano il parser si comporta in maniere differenti:

  • se viene fornito un numero, questo viene convertito in false se è 0 oppure -0, in true se è 1.
  • se viene fornito una stringa, questa viene convertito in false se è una delle seguenti:
  • null
  • ""
  • false
  • undefined
  • NaN

in true negli altri casi.

Variabili

modifica

Una variabile in JavaScript identifica una porzione di memoria nella quale vengono salvati i dati durante l'esecuzione dello script.

Quando si lavora con le variabili, è necessario per prima cosa indicare al parser il suo nome utilizzando l'istruzione var, nonostante sia equivalente la dichiarazione di una variabile anche senza quest'istruzione:

var nome_variabile;

dichiara una variabile nome_variabile. Essendo JavaScript un linguaggio a tipizzazione debole, non è necessario indicare il tipo di dato della variabile, a meno che non si stia lavorando con oggetti (si vedrà più avanti). In questo caso la variabile appena dichiarata non avrà valore, non è stata cioè ancora inizializzata; è possibile però inizializzare la variabile direttamente insieme alla dichiarazione:

var nome_variabile = espressione;

dichiara una variabile con il valore di espressione. Per espressione si intende una sequenza di operatori, variabili e/o dati che restituisca a sua volta un valore.

Quando si scelgono dei nomi per le variabili, si faccia attenzione ad alcune regole:

  • JavaScript è case-sensitive (sensibile alle maiuscole): var1 e Var1 sono due variabili differenti
  • in JavaScript esistono, come in ogni linguaggio formale, delle parole riservate, che identificano cioè particolari comandi per il parser. Non bisogna quindi usare parole riservate come nomi di variabili. Per l'elenco delle parole riservate in JavaScript, si veda l'appendice.
  • una variabile non può contenere caratteri particolari (? : ; , . ecc...), tranne l'underscore, e non può iniziare con un numero

L'operazione fondamentale da usare con le variabili è l'assegnazione, che consiste nell'assegnare, nell'attribuire ad una variabile un valore. La sintassi è intuitiva e semplice:

nome_variabile = valore;

dove valore è un'espressione. Ad esempio:

var1 = "ciao!";
var2 = 3;
var3 = false;
var4 = var3; //attribuisce a var4 una copia del valore di var3

E' possibile assegnare a una variabile un array:

lettere = ["a", "b", "c"];

JavaScript non supporta gli array associativi. Al loro posto si usano gli oggetti. Quindi usare i metodi degli array su array associativi produrrà risultati non corretti. Per rappresentare i valori con coppie chiave-valore si usa questa sintassi (che inizializza un oggetto):

persona = { nome: "Mario", cognome: "Rossi", indirizzo: "Roma" };

Per accedere al valore di una proprietà della variabile (e quindi dell'oggetto):

x = persona.nome;