Introduzione alle Variabili e tipi di dato in Object Pascal

Una variabile può essere intesa come un'etichetta applicata ad una particolare locazione di memoria. Il contenuto di questa locazione può variare nel tempo e può essere recuperato facendo uso dell'etichetta o, meglio, del suo nome simbolico.

Le variabili possono essere utilizzare per memorizzare vari tipi di dato, da semplici numeri, a lettere fino a dati complessi costruiti a partire da dati più semplici. Il concetto chiave è che ad ogni variabile è associato un tipo di dato che determina quali valori essa può contenere e quali operazioni sono consentite su di essa.

Da questo punto di vista, l'Object Pascal rientra nella categoria dei linguaggi strongly-typed ossia fortemente tipizzati. Le conseguenze sono che:

  • Una variabile deve essere sempre dichiarata prima di essere utilizzata.
  • Nel dichiarare una variabile bisogna sempre specificarne il tipo

Grazie a queste regole, il compilatore può, a tempo di compilazione, rilevare e segnalare errori di programmazione che, diversamente, si manifesterebbero soltanto a run-time.

In questa lezione vedremo come, in Object Pascal, sia possibile dichiarare ed utilizzare variabili all'interno dei nostri programmi.

Esempio di dichiarazione e utilizzo

Per mostrare come dichiarare ed utilizzare le variabili in Object Pascal analizziamo il programma che segue:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
program Somma;

var
    a: Integer;
    b: Integer;
    risultato: Integer;
begin
    Write('Inserisci il primo numero: ');
    ReadLn(a);
    Write('Inserisci il secondo numero: ');
    ReadLn(b);
    risultato := a + b;
    WriteLn('La somma è: ', risultato);
end.

Come nel caso del programma Hello, anche qui la prima riga inizia con la dichiarazione del nome del programma: Somma.

La novità rispetto ad Hello risiede nelle righe immediatamente successive che vanno da 3 a 6. Infatti, prima della parola chiave begin è stata inserita una nuova sezione var. Come anticipato prima, in Object Pascal le variabili vanno prima dichiarate specificando anche il tipo prima del loro utilizzo. Per questo motivo esiste la sezione var che ha lo scopo di raccogliere tutte le definizioni di variabili prima dell'inizio del programma.

Altri linguaggi di programmazione, come il C++, Java o C# consentono di dichiarare una variabile anche in altre parti del programma, inframezzando operazioni e dichiarazioni. In Object Pascal questo è vietato.

Questo approccio ha i suoi vantaggi e i suoi svantaggi. Di sicuro, concentrare la dichiarazione delle variabili in un unico punto rende il codice più leggibile e manutenibile. D'altro canto, è pur vero che in questo modo il codice diventa più prolisso.

Detto questo, è importante notare come siano dichiarate le variabili. La sintassi è:

var
    variabile1: tipo1;
    variabile2: tipo2;
    ...
    variabileN: tipo;

Di ogni variabile viene specificato il nome e soprattutto, dopo i due punti, il tipo.

Nel caso del programma Somma di sopra, sono state dichiarate tre variabili: a, b e risultato. Ognuna di esse è di tipo Integer ossia numeri interi. Questo tipo, che vedremo nel dettaglio più avanti, consente di memorizzare numeri interi e di effettuare le tipiche operazioni aritmetiche di somma, differenza, prodotto, divisione e così via.

Nel programma le tre variabili hanno un preciso scopo. Le variabili a e b sono utilizzate per memorizzare gli addendi della somma mentre risultato viene utilizzata per memorizzare il risultato della somma.

Nel corpo del programma, inoltre, è stata utilizzata una versione leggermente differente della procedura WriteLn: Write. Come si può notare, manca il suffisso Ln che sta per Line, in quanto, a differenza di WriteLn, Write stampa la riga ma senza andare a capo.

Per richiedere il valore di a e b all'utente, è stata usata la procedura ReadLn che legge un valore dalla console e lo memorizza nella variabile indicata tra parentesi.

La riga più importante del programma è la riga 12:

risultato := a + b;

Questa è un'operazione di assegnamento. Infatti, il risultato dell'espressione a + b viene assegnato alla variabile risultato. In Object Pascal, a differenza di molti linguaggi, l'assegnamento viene indicato attraverso la sintassi :=, cioè l'uguale preceduto da due punti.

Il programma termina, infine, mostrando a schermo il risultato della somma.

Da notare che nell'ultima riga prima di end., la riga 13, nel chiamare la procedura WriteLn vengono indicati sia il testo (nel gergo tecnico stringa) sia la variabile risultato separati da una virgola.

Una variabile dichiarata andrebbe sempre utilizzata

Abbiamo visto nel programma di esempio che le variabili utilizzate in un programma vanno dichiarate nella sezione var prima di poter essere utilizzate nel corpo del programma stesso. Sebbene questo stile di sintassi può essere visto come prolisso da molti programmatori, in realtà esso ha anche i suoi vantaggi.

Il primo vantaggio è che, in questo modo, allo sviluppatore viene richiesta una certa disciplina nell'utilizzo delle variabili. Piuttosto che scrivere codice in maniera diretta, il linguaggio impone una sorta di pianificazione allo sviluppatore.

Da ciò ne consegue un secondo vantaggio. Ossia che bisognerebbe sempre dichiarare soltanto le variabili effettivamente utilizzate nel programma. Infatti, in Object Pascal, dichiarare una variabile nella sezione var e poi non utilizzarla viene segnalato come warning, cioè un avvertimento, da parte del compilatore.

Se proviamo, infatti, a compilare il programma che segue otterremo un warning:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
program NonCompila;

var
    utilizzata: Integer;
    nonUtilizzata: Integer;
begin
    Write('Inserisci un numero: ');
    ReadLn(utilizzata);
    WriteLn('Hai inserito: ', utilizzata);
end.

Provando a compilare questo programma con il compilatore FreePascal otteniamo un warning di questo tipo:

NonCompila.pas(5,5) Note: Local variable "nonUtilizzata" not used

Ricapitolando

....

Esercizi

....