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.

Concetti Chiave
  • In Object Pascal, le variabili devono essere dichiarate prima dell'uso.
  • La dichiarazione delle variabili avviene nella sezione var del programma.
  • Ogni variabile deve avere un nome e un tipo specificato.
  • L'assegnazione di valori alle variabili si fa con l'operatore :=.
  • Le variabili non dichiarate generano un avviso (warning) dal compilatore.
  • È buona pratica dichiarare solo le variabili effettivamente utilizzate nel programma.

Dichiarazione e Utilizzo delle Variabili

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

Sezione var

Adesso, entriamo nel dettaglio della sezione var che, come abbiamo visto, serve per dichiarare le variabili.

La sintassi generale è la seguente:

var
    nomeVariabile1: tipo1;
    nomeVariabile2: tipo2;
    ...
    nomeVariabileN: tipoN;

Dove nomeVariabileX è il nome simbolico della variabile e tipoX è il tipo di dato associato alla variabile.

Se abbiamo più variabili dello stesso tipo, possiamo anche dichiararle in un'unica riga separandole con una virgola. Per esempio, le seguenti due dichiarazioni sono equivalenti:

var
    a: Integer;
    b: Integer;
var
    a, b: Integer;
Definizione

Sezione var e dichiarazione di variabili

In Object Pascal, la sezione var serve per dichiarare le variabili che verranno utilizzate nel programma.

Essa va adoperata prima della parola chiave begin che indica l'inizio del corpo del programma.

La sintassi generale per dichiarare una variabile è:

var
    variabile1, variabile2: tipo1;
    variabile3: tipo2;
    ...
    variabileN: tipoN;

Dove variabileX è il nome simbolico della variabile e tipoX è il tipo di dato associato alla variabile.

I valori Letterali

In Object Pascal, così come in molti altri linguaggi di programmazione, i valori possono essere rappresentati direttamente nel codice sorgente attraverso i valori letterali (o semplicemente letterali).

I valori letterali sono rappresentazioni fisse di valori che possono essere utilizzati direttamente nel codice. Essi possono rappresentare diversi tipi di dati, come numeri, stringhe, caratteri e valori booleani.

Ecco alcuni esempi di valori letterali in Object Pascal:

  • Numeri interi: 42, -7, 0
  • Numeri reali: 3.14, -0.001, 2.0e3 (notazione scientifica)
  • Stringhe: 'Ciao, mondo!', 'Delphi è fantastico'
  • Caratteri: #65 (rappresenta il carattere 'A'), #10 (rappresenta il carattere di nuova linea)
  • Valori booleani: True, False

Man mano che esploreremo i vari tipi di dato in Object Pascal, vedremo più in dettaglio i valori letterali associati a ciascun tipo.

Quando lavoriamo con le variabili possiamo assegnare loro valori letterali direttamente. Per esempio:

var
    numero: Integer;
begin
    numero := 42;  // Assegna il valore letterale 42 alla variabile numero
end.
Definizione

Valori Letterali

In Object Pascal, i valori letterali sono rappresentazioni fisse di valori che possono essere utilizzati direttamente nel codice sorgente.

Essi possono rappresentare diversi tipi di dati, come numeri, stringhe, caratteri e valori booleani.

Il concetto di Tipo di Dato

In Object Pascal, come in molti altri linguaggi di programmazione, ad ogni variabile è associato un tipo di dato. Il tipo di dato determina quali valori la variabile può contenere e quali operazioni sono consentite su di essa.

Per esempio, nel programma Somma di sopra, le variabili a, b e risultato sono di tipo Integer. Questo significa che esse possono contenere numeri interi e che è possibile effettuare su di esse operazioni aritmetiche come somma, differenza, prodotto, divisione e così via.

In Object Pascal esistono vari tipi di dato. I più comuni sono:

  • Integer: numeri interi
  • Real: numeri reali (con la virgola)
  • Char: singoli caratteri
  • String: stringhe di caratteri
  • Boolean: valori booleani (vero o falso)

Oltre a questi, esistono molti altri tipi di dato, inclusi tipi più complessi come array, record e classi, che verranno trattati in lezioni successive.

Definizione

Tipo di Dato

In Object Pascal, un tipo di dato definisce il tipo di valori che una variabile può contenere e le operazioni che possono essere eseguite su di essa.