  |
Comandi semplici e Blocchi |
Con questi costrutti segniamo il confine tra le espressioni e i comandi.
  |
Se si ha una espressione a = 1 |
Consideriamo una espressione. In matematica, una espressione non ha "stato", ovvero non causa modifiche ad una "memoria", concetto che non esiste. In matematica una espressione è come un filtro, che prende dei valori in uscita e ritorna una valore di ritorno. In informatica le cose stanno diversamente. Abbiamo che le informazioni vengono sempre memorizzate in una cosa che si chiama "memoria". Le variabili consetono di accedere alla memoria, e non solo per prendere valori. Alcuni operatori non sono prendono valori dalla memoria per effettuare un coalcolo, ma sono in grado di scrivervi. Abbiamo già visto questi operatori: sono l'=, il += e simili, il ++ e il --.
  |
aggiungendo un ';' diventa un comando (semplice) |
a = 1;
Quindi, possiamo trattare queste "espressioni con effetti collaterali"come strumenti per effettuare comandi. Ricordiamo che un comando per definizione modifica la memoria. In un linguaggio imperativo, come java, si lavora con una serie di modifiche della memoria che vengono fatte seguendo cicli e condizioni. Per trasformare una espressione con effetti collaterali in un comando è sufficiente mettere alla fine un punto e virgola. Bisogna stare attenti che ha senso utilizzare una espressione in questo modo solo se alla fine risulta in una qualche modifica della memoria. Il compilatore controlla che i comandi semplici alla fine risultino in un valore che viene memorizzato, e avverte se non è così. Se uno scrivere a+1; si ritrova nell'effettuare un calcolo che non viene memorizzato da nessuna parte e quindi è inutile ai fini della programmazione. In questo caso il compilatore avverte del fatto che si è fatta una operazione inutile.
  |
Se si hanno due comandi |
a=1;
b=2;
I comandi in Java (semplici e, come vedremo, quelli composti) vengono eseguiti uno dopo l'altro. Non ci sono particolari regole per specificare una sequenza di comandi. Basta scriverli uno dopo l'altro. Quelli che si osservano in figura sono semplicemente due comandi diversi.
  |
racchiudendoli tra graffe diventano un solo comando (blocco) |
{
a=1;
b=2;
}
Ci sono casi in cui due comandi non vanno bene: devono essere uno solo. Infatti i comandi composti sono per definizione "composti" da un altro comando. Uno solo però. Per questo motivo esiste un costrutto che serve a trasformare due comandi in uno solo, che è il blocco. Basta racchiudere due comandi tra graffe per avere quello che, sintatticamente, è un solo comando..
  |
Notare che il punto e virgola ci vuole sempre |
Come osservazione notiamo come sia sempre necessario mettere un punto e virgola alla fine di ogni comando (perchè è quello che trasforma una
espressione in un comando) e poi inserire il tutto tra graffe.
  |
I blocchi delimitano la "portata" delle variabili locali |
Il blocco ha anche un'altra funzione: serve a definire la "portata" delle variabili. Vediamo di capire di che cosa si tratta. Innanzitutto abbiamo visto che abbiamo tre tipi di variabili: parametri, variabili locali e campi.
Le variabili locali sono abbastanza "persistenti", di questo lo vedremo più in dettaglio nella parte relativa alle classi. I parametri vengono definiti all'inizio di un metodo e finiscono alla fine del metodo stesso. Finiscono significa che spariscono, vengono eliminate.
01. int a;
02. { int b;
03. char a; // copre l'altra a
04. }
05. char a; // errore
  |
una variabile può essere ridichiarata in un blocco |
Quello che a volte non è totalmente chiaro è il fatto che le variabili locali possono essere dichiarate dentro un blocco e terminano la loro vita alla fine di quel blocco. Una variabile deve essere unica in un blocco ma può essere ridichiarata in un altro blocco più interno. Nella figura abbiamo la variabile a nella riga 01, Aprendo un blocco possiamo ridichiararla, anche con un altro tipo, come si vede in riga 03. Questa variabile è viva fino alla chiusura del blocco che la contiene. Appena si raggiunge la riga 04, spariscono tutte le variabili contenute nel blocco. Notare che la a dentro il blocco copre la a fuori il blocco che non è più utilizzabile dentro il blocco. La dichiarazione in riga 05 è un errore: mentre si può ridichiarare la ariabile a nel blocco più interno, non si può nel blocco più esterno, perchè è stata già dichiarata ed è ammessa una sola dichiarazione per blocco.
|