Introduzione alla programmazione

Uno sguardo a Turbo Pascal e Lazarus
LEZIONE 3

Lezione 3

Le Variabili

Le variabili sono degli spazi di memoria in cui possiamo memorizzare dei dati affinché il programma possa utilizzarli in seguito.
Per comprendere il concetto di variabile pensiamo al foglietto su cui si scrive un appunto veloce per ricordarsi qualcosa, un numero di telefono, un indirizzo e simili, per poi magari memorizzarli sul cellulare o per ricordarsi dove dobbiamo andare.

Le variabili devono essere dichiarate esplicitamente nel codice e possiamo farlo solo in tre punti esatti, a seconda di dove andremo a dichiarare la variabile questa sarà accessibile in modo diverso da caso a caso: Vediamole una alla volta:

Variabili Procedurali (anche per le funzioni) Le variabili procedurali, o locali, sono accessibili solo dalla procedura o dalla funzione che le contiene, si dichiara tra la dichiarazione della procedura (o della funzione) e l’inizio della procedura stessa.
In questo modo:

  Procedure SalutaTutti ();
    Var
      S:string;
      I:integer;
  begin
      //il tuo codice va qui
      S:='Ciao a tutti';
      I:=100;
      ShowMessage(S + ' ' + IntToStr(I) + ' volte!');
  end;

N.B.
Per assegnare un valore ad una variabile è necessario usare i due punti seguiti dal simbolo di uguale, in questo modo: variabile := valore;
Si dichiara con i due punti, gli si assegna un valore con "due punti uguale".



Variabili Private

Le variabili private sono accessibili da tutte le funzioni e tutte le procedure della finestra che le contiene, per accedere ad una variabile privata che si chiami MioNumero, occorre chiamare prima la finestra che la contiene e poi chiamare in causa la variabile: Form1.MioNumero:=124;

Le variabili private si dichiarano in un area apposita del codice che si trova nella sezione “private” del codice auto generato, apri una finestra con Lazarus e osserva il codice e vedrai la sezione private subito prima dell’area dedicata al codice che andrai a scrivere (sezione implementation).
In questo caso la dichiarazione di una variabile non prevede l’uso dell’istruzione var, si dichiara semplicemente in questo modo: MioNumero:integer;

Variabili Pubbliche

Le variabili pubbliche sono esattamente uguali alle private, ma a differenza di queste, che sono visibili solo in una finestra, le pubbliche sono visibili da qualsiasi form e/o modulo presenti nel programma.

Si dichiarano nella sezione “public” e si utilizzano come le private.
Puoi vedere degli esempi nel programmino allegato a questo modulo del corso o scaricabile dal sito dell'autore.

Tipi di dati

Le variabili possono accettare dati di un determinato tipo, e solo quello che si è dichiarato con la variabile, per esempio: "MyVar:integer;" che accetterà esclusivamente valori numerici interi. Quindi se avessi bisogno di una variabile che contenesse un testo dovrei dichiararla in questo modo: "MyVar:string;", infatti le variabili di tipo string accettano solo del testo.
Esistono una grande quantità di tipi di dati, alcuni sono piuttosto semplici da usare e comprendere come appunto integer e string, altri sono un pochino più specifici e li vedremo più avanti.

Un tipo di dati fondamentale è il boolean che abbiamo già visto: è una variabile che accetta solo due valori, false o true (vero o falso).
Nessun altra cosa potrà essere memorizzata in una variabile booleana.

Esiste anche la variabile variant che è in grado di contenere molti tipi di dato (ma non proprio tutti). In ogni caso si ricorre a questo tipo di dati molto raramente perché rallenta molto l’esecuzione del programma ed è anche un modo sgraziato di scrivere il codice. Qualora sia indispensabile è comunque consentito usarla.

Approfondiamo le variabili

Ora, se hai avuto voglia di sperimentare l’uso di queste variabili, hai senza dubbio notato che alcune di loro hanno un limite, per esempio, usando solo variabili integer non è possibile dividere tra loro due numeri che diano un risultato che contenga una virgola, per esempio volendo dividere due numeri contenuti in una variabile e ottenere un risultato faremo come segue:

  procedure TForm1.Button10Click(Sender: TObject);
    var
      Dividendo:integer;
      Divisore:integer;
      Risultato:integer;
    begin
      Dividendo:=100;
      Divisore:=3;
      Risultato:=Dividendo / Divisore;
      showmessage('Il risultato è: ' + FloatToStr(Risultato));
    end;

N.B.
Eseguendo questo codice otterremo un errore: il debugger blocca l’esecuzione del codice e ci informa che non è possibile inserire il risultato di una divisione in una variabile di tipo intero. Questo perché il risultato potrebbe contenere una virgola.
Dovremo tirare in ballo un altro tipo di dati che ci consenta di farlo: il tipo double, o il tipo single


La differenza tra double e single, che possono gestire i calcoli con la virgola, è la precisione del risultato che andremo ad ottenere: tanto maggiore sarà la precisione che richiediamo al calcolo, tanto maggiore sarà la quantità di risorse che dovremo spremere dal nostro computer.

Colgo l’occasione per dirti che Lazarus usa un linguaggio fortemente tipizzato (lo vedremo più avanti) e questo fatto, che crea un pochino di disagio al programmatore in erba, si traduce in software più prestanti ed affidabili! Quindi porta pazienza e vedrai che ben presto ti sarà tutto chiaro!

In questo esempio di codice, che è quello sopra con la dovuta correzione, vediamo le differenze relative a questi tipi di dato:

  procedure TForm1.Button1 0Click(Sender: TObject);
    Var
      Dividendo:integer;
      Divisore:integer;
      Risultato:double; //abbiamo corretto questa linea
    begin
      Dividendo:=100;
      Divisore:=3;
      Risultato:=Dividendo/Divisore;
      showmessage('Il risultato è: ' + FloatToStr(Risultato));
    end;

N.B.
Abbiamo usato il double e otteniamo questo risultato: 33.3333333333333
Se invece avessimo usato il single, avremo ottenuto questo: 33.33333206


Come vedi il risultato del single viene troncato (prova a indovinare perché esista una variabile che tronca i risultati).
In questo caso, sebbene sia un errore di forma, si potrebbe anche usare la variabile variant, che ci restituirebbe il medesimo risultato del tipo single.
Il variant potrebbe contenere anche il tipo double, tuttavia, per risparmiare risorse e velocizzare il calcolo, sceglie automaticamente di usare, tra i tipi di dati più adatti al contenuto, quello più “economico” in termini di risorse.

Spirito di osservazione
Sperimentando e rileggendo il testo qui sopra, potresti aver notato che nell’esempio delle funzioni presente nella seconda lezione io abbia fatto una divisione usando solo variabili integer, ma in questa sezione ho detto che non sarebbe possibile…
Perché?
Perché nell’esempio della seconda lezione non ho fatto la divisione con l’operatore matematico "/" ma ho usato la parola chiave div: questa funzione interna di Lazarus mi permette di avere la certezza di ottenere in risposta al mio calcolo sempre un numero intero, qualunque sia il valore del dividendo e del divisore.
Ho poi ripetuto l’operazione usando la parola chiave mod: questa mi permette di avere il resto, sempre intero, dell’operazione. Infatti il risultato di 10 div 3 è uguale a 3, e 10 mod 3 è uguale ad uno, quindi il risultato è 3 con il resto di 1.

Sperimenta
Adesso è l’ora di provare per conto tuo a scrivere qualcosa usando le variabili viste fino a qui…
Buon divertimento!


Scarica il sorgente di esempio
‹ Precedente Successiva ›

Sommario

Sommario