Il concetto di variabile

Il programma Hello.java che abbiamo appena visto è molto semplice: il suo effetto è solo quello di scrivere un messaggio sullo schermo

Normalmente un programma, per risolvere il problema per cui è stato scritto, deve poter manipolare dei dati

Esempio:

Supponiamo di voler calcolare quale sia l'interesse maturato dopo un anno su un conto corrente che inizialmente contiene 1756 euro

public class Interesse1 { 

    public static void main (String[] args) {

        double interesse;
        double capitale;
        double tasso = 0.025;

        capitale = 1756;
        interesse = capitale * tasso;

        System.out.print("L'interesse dopo un anno e':");
        System.out.println(interesse);
    }
}

La caratteristica più importante di questo programma è l'uso di nomi simbolici.

Avremmo potuto scrivere semplicemente

public class Interesse1 { 

    public static void main (String[] args) {

        System.out.print("L'interesse dopo un anno e':");
        System.out.println( 1756 * 0.025 );
    }
}

Questo programma fornisce lo stesso risultato, ma:
  • È molto più difficile da interpretare (cosa rappresentano 1756 e 0.025?)
  • Non è così ovvio da modificare se per esempio cambia il tasso di interesse da applicare o se vogliamo calcolare l'interesse maturato da un diverso conto corrente

Già in questo primo esempio, l'uso delle variabili rende invece il codice più chiaro e facilmente modificabile.

Le variabili sono caselle di memoria a cui associamo un nome

  • Il loro scopo è di contenere valori di un certo tipo
  • Servono per memorizzare dei dati durante l'esecuzione di un programma
In Java ogni variabile utilizzata in un programma deve essere dichiarata prima del suo uso. Nella dichiarazione bisogna indicare l'insieme dei valori che potrà contenere, cioè il tipo dei dati che potranno essere memorizzati nella variabile.

double interesse;
interesse
 
Dichiara una variabile di nome interesse di tipo double (numeri in virgola mobile).
double capitale;
capitale
 
Dichiara una variabile di nome capitale di tipo double (numeri in virgola mobile).

Il tipo double è un tipo di dati primitivo di Java.

ATTENZIONE! ogni variabile deve essere dichiarata soltanto la prima volta che compare nel programma.




Assegnamento

Nella casella di memoria si può memorizzare un dato con l'operazione di assegnamento.

capitale = 1756;
capitale
1756
Il valore della variabile capitale è 1756.

Il valore ottenuto dalla valutazione dell'espressione a destra dell'uguale (il dato assegnato) diventa il valore della variabile il cui nome appare alla sinistra dell'uguale.
Il dato assegnato deve essere di tipo compatibile con il tipo della variabile.

ATTENZIONE! non confondete l'operatore di assegnamento = con il simbolo di uguaglianza usato in matematica: sono due cose molto diverse!

Si può anche combinare la dichiarazione di una variabile con la sua inizializzazione

double tasso = 0.025;
tasso
0.025
Dichiara una variabile di nome tasso di tipo double e gli assegna inizialmente il valore 0.025

ATTENZIONE! malgrado appaia come un unica istruzione una dichiarazione con inizializzazione è una sequenza di 2 istruzioni!

Durante l'esecuzione del programma si può usare il nome della variabile per far riferimento al suo valore.

interesse = (capitale * tasso);
interesse
43.9
Il valore della variabile interesse diventa 43.9
System.out.println(interesse);
interesse
43.9
Stampa il numero 43.9.




Ancora assegnamento

Nel programma precedente le variabili che abbiamo utilizzato non cambiavano molto: una volta inserito il valore questo non veniva più modificato.

Esempio:

Supponiamo di voler calcolare quale sia l'interesse maturato dal nostro conto corrente che contiene 1756 euro dopo due anni

public class Interesse2 { 

    public static void main (String[] args) {

        double interesse;
        double capitale;
        double tasso=0.025;

        capitale = 1756;
        interesse = (capitale*tasso);
        interesse = (interesse+capitale)*tasso;

        System.out.print("L'interesse dopo due anni e':");
        System.out.println(interesse);
    }
}

In questo caso il valore della variabile interesse cambia veramente durante l'esecuzione (da cui il nome di variabile): per ogni anno trascorso calcoliamo un diverso valore per tale variabile

interesse = ( interesse * tasso);
interesse
43.9
Il valore della variabile interesse è 43.9
interesse = 
( interesse + capitale ) * tasso;
interesse
44.9975
Calcola la somma tra capitale e l'interesse corrente, moltiplica per il tasso e colloca il risultato nella posizione in memoria di interesse.



Nomi di variabili

Il nome di una variabile deve essere un identificatore ammissibile. In Java, può essere una sequenza di lettere o numeri che non sia una parola chiave (keyword) del linguaggio, e che cominci con una lettera. È ammesso anche il carattere _.

Si consiglia di utilizzare nomi significativi per le variabili, per renderne intuitivo il significato e l'uso che ne viene fatto. Ad esempio, in un programma che calcola l'area di un rettangolo, dichiareremo le variabili base, altezza e area.

Per evitare inconsistenze, non memorizzare mai in una variabile un valore che non corrisponda al nome scelto (es. non memorizzare l'area nella variabile base).

Per convenzione, i nomi di variabili sono minuscoli, ma se composti da più parole, la prima lettera di ogni parola successiva alla prima è maiuscola (ad esempio, interessiComposti).




Ancora sulle dichiarazioni

Riassumendo una dichiarazione di variabili può avere varie forme, ad esempio:


<tipo> <nome>;  // dichiarazione semplice
<tipo> <nome1>, <nome2>, ...;  // dichiarazione multipla

// dichiarazioni con inizializzazione
<tipo> <nome> = <espressione>;
<tipo> <nome1> = <esp1>, <nome2> = <esp2>, ...;

Il <tipo> è un qualunque tipo di dati ammissibile per Java, ad esempio un tipo primitivo, una classe, un tipo array, ...

In generale, è opportuno inizializzare una variabile prima di leggerne il valore. Alcuni tipi di variabili che vedremo in seguito (variabili statiche e di istanza) vengono inizializzate automaticamente con dei valori di default, ma questo non avviene per le variabili locali dei metodi, che useremo più frequentemente.

Esempi di dichiarazioni:

double  interesse;
double  tasso = 0.025, capitale = 1756;
int  base;
int  k, l, m;
int  altezza = 32;



Le costanti

Una costante è un'associazione tra un nome ed un valore, che a differenza di una variabile viene fissato una sola volta e mai più cambiato nel programma.

Una costante si dichiara come una variabile, premettendo la parola chiave final:

final <tipo> <NOME> = <valore>;

Per convenzione, i nomi delle costanti sono scritti tutti con lettere maiuscole. Se l'identificatore si compone di più parole, si usa il simbolo underscore _ per separarle.


Esempi:

public class Interesse1 { 

    public static void main (String[] args) {

        double interesse;
        double capitale;
        final double TASSO = 0.025;

        capitale = 1756;
        interesse = capitale * TASSO;

        System.out.print("L'interesse dopo un anno e':");
        System.out.println(interesse);
    }
}


      final double PI = 3.141592;
      final int SPEED_LIMIT = 60;
      final char SEPARATOR = ':';

Normalmente una costante viene inizializzata al momento della dichiarazione, ma non è necessario: l'importante è che non venga assegnata più di una volta.