Massimo Caliman
by Massimo Caliman
4 min read

Categories

  • Java

Tags

  • it
  • java
  • tutorial

Diamo prima una definizione di variabile sufficientemente formale per i nostri scopi: Definizione di variabile Una variabile è una coppia formata da un nome, l’identificatore della variabile, e da un valore.

T var = value ;

Le variabili in un programma memorizzano i dati che vengono elaborati durante l’esecuzione. Durante l’esecuzione del programma i valori delle variabili vengono modificati (altrimenti sarebbero costanti). Le variabili nascono, vivono e muoiono; è nostro compito prendercene cura, della loro vita, della loro visibilità (scope). Trattiamole bene, diamo loro un nome di tutto rispetto per far sì che non ci odino e non ci facciano passare notti insonni. Prima che una variabile possa essere utilizzata, deve essere dichiarata; la dichiarazione di una variabile è necessaria per riservare uno spazio di memoria in cui scrivere il suo valore. La dichiarazione definisce il tipo della variabile.

T var;

dove T è il tipo, per esempio int , double e altri. Si possono avere come tipi, tipi di base che non sono oggetti, o oggetti ( T diventa il nome di una classe). Di seguito alcuni esempi di dichiarazioni di variabili:

int x ; double y ;

Posso anche assegnare un valore alla variabile:

int x = 5 ; double y = 60 ;

Il tipo dei valori della variabile è usato per determinare quanta memoria riservare per la variabile, nel caso del tipo int si tratta di 4 byte. Se dovessimo rappresentare graficamente le dichiarazioni

int x = 0 ; 
int y = 2 ; 
int z ; 

x 0 y 2 z - dove - indica che z è stata dichiarata ma non inizializzata, cioè non le è stato assegnato alcun valore.

Diamo ora una definizione di un comando di assegnazione sufficientemente formale per i nostri scopi.

Definizione di un comando di assegnazione

Un comando di assegnazione è un’istruzione il cui scopo è modificare il valore di una variabile. Assegna anche un valore a una variabile che era stata solo dichiarata e perciò aveva un valore indefinito.

var = expr;

Dove var è il nome della variabile ed expr un’espressione il cui tipo è compatibile con il tipo di var. Il comando ha l’effetto di sostituire il valore della variabile il cui nome compare a sinistra (left-value) del segno di uguale con il valore che appare a destra. Le espressioni sono entità sintattiche composte da nomi di variabili, costanti e segni di operazione per determinare l’ordine in cui gli operandi sono valutati.

x = 12;

assegna alla variabile x il valore 12;

y = (x+1)/2;

un esempio di espressione.

Abbiamo parlato finora dei tipi di variabili senza darne una definizione formale, corriamo ai ripari:

Definizione del Tipo di Dato

Un tipo di dato consiste in un insieme di valori e un insieme di operazioni applicabili a tali valori.

Come accennato in precedenza, i tipi di dati in java appartengono a 2 categorie principali:

  • Tipi primitivi: boolean, byte, short, int, long, float, double, char
  • Tipi classe: String ecc.

La seguente tabella riporta per ogni tipo di valore le operazioni che possono essere applicate.

  • boolean : false e true
  • byte : interi [-27,27-1] ( decimale, ottale , esadecimale) operazioni : + , - , *, / , %.
  • short : interi [-215, 215-1] ( decimale, ottale , esadecimale) operazioni: + , - , * , / , %.
  • int numeri naturali [-231,231-1] ( decimale, ottale , esadecimale) operazioni: + , - , * , / , %.
  • long numeri naturali [-263,263-1] ( decimale, ottale , esadecimale) operazioni: + , - , * , / , %.
  • float numeri reali in formato IEEE754 a 32 bit notazione a virgola fissa e mobile: + , - , * , /.
  • double numeri reali in formato IEEE754 a 64 bit notazione a virgola fissa e mobile: +, -, *, /.
  • char caratteri, simboli della notazione Unicode tra apici singoli nessuna operazione.
  • String : Sequenza di caratteri, simboli della notazione Unicode tra doppie virgolette nessuna operazione + (concatenazione)

Le 4 operazioni aritmetiche sono rappresentate dai simboli + , - , * , /.

Per i tipi di dati byte, short, int, long, il simbolo / rappresenta il quoziente dell’operazione.

Per inserire un apice singolo o doppio all’interno di una stringa si scrive rispettivamente ' e "

Aggiungiamo per completezza anche i simboli: && e logico o congiunzione || o logico o disgiunzione ! not o negazione

Come già accennato nel caso di un’assegnazione del tipo

T var = expr 

abbiamo detto che expr deve avere tipo compatibile con T (non necessariamente lo stesso). È utile a questo punto dare la definizione di promotion e casting per i tipi che definiscono casi in cui il tipo di var ed expr possono non coincidere ma essere comunque corretti e applicabili.

Definizione Se sia il tipo della variabile sia il tipo dell’espressione rappresentano dati numerici e il tipo expr è un sottoinsieme del tipo var prima dell’assegnazione, avviene una conversione automatica chiamata promotion. Ad esempio:

int i ; 
byte j ; 
i = j ;

Diamo ora invece una definizione di casting:

Definizione

Se il tipo di var e il tipo di expr hanno valori in comune (tipicamente TypeOf(expr) sottoinsieme di TypeOf(var)) possiamo pensare alla conversione esplicita chiamata casting e cioè: TypeOf(expr) –> TypeOf(var). Questo a patto che i valori numerici siano corretti e compatibili.

Ad esempio:

int i; 
byte j; 
j = (byte) i;

corretto solo se è minore o uguale al valore massimo disponibile per un byte.