Introduzione alla programmazione

Uno sguardo a Turbo Pascal e Lazarus
LEZIONE 2

Lezione 2

Funzioni e procedure

Se hai buone doti di osservazione avrai certamente notato che fino ad ora abbiamo avuto a che fare con “procedure”. Quando hai inserito un pulsante sulla tua finestra e ci hai poi fatto doppio click, sei stato portato nella procedura relativa all’evento click del pulsante stesso.
Questa:

 Procedure TForm1.Buttton1Click(Sender: TObject);
  begin
    //Il tuo codice viene scritto tra le linee “begin” e “end;”: inizio e fine.
  end;

Ma cosa è una procedura? Altri linguaggi la chiamano “routine”, “sub” o “subroutine”, ma sono sempre la stessa cosa: una porzione di codice che esegue comandi specifici in risposta ad una azione compiuta dall’utente o richiamata da altre porzioni di codice.
In questo caso, il compilatore intercetta il momento in cui hai fatto click sul pulsante e inserisce quella porzione di codice nella lista delle cosa da fare. Il Click è una tua azione ma innesca un evento che il tuo programma manda in esecuzione.

Quindi le procedure servono per eseguire codice in seguito o durante il verificarsi di un evento specifico.

Sì, ma non solo!
Ipotizziamo che vi siano delle operazioni che devono essere richiamate da più eventi o in momenti e punti diversi del codice… Dovresti scrivere quei comandi in più procedure creando disordine e confusione nel tuo bellissimo codice. Ecco che invece puoi scrivere una procedura non legata ad un evento, e dargli il nome che preferisci, di solito un nome appropriato, per esempio:

 Procedure MostraNascondi (Stato:boolean);
  begin
    Button5.Visible:=Stato;
    Button6.Visible:=Stato;
    CheckBox1.Visible:=Stato;
    Edit1.Visible:=Stato;
  end;

Bene, in questo esempio ci sono solo 4 istruzioni, ma pensa che siano tantissimi gli oggetti che vadano nascosti, e che tu debba farlo da 2 o più punti diversi…

Dovresti scrivere questo elenco di istruzioni in due o più posti e poi scriverli altrettante volte per fare in modo di rendere nuovamente visibili questi oggetti! Invece ti basterà farlo qui e poi richiamare questa istruzione in questo modo:

  MostraNascondi (True); // questa chiamata imposta tutti gli oggetti listati come visibili
  //oppure
  MostraNascondi (False); // questa invece nasconde tutti gli oggetti listati

N.B.
A questo punto il tuo spirito di osservazione ti avrà fatto notare che tutto quello che si trova dopo il doppio slash ( //) viene ignorato dal compilatore ed è utile al programmatore per scrivere note e commenti e non farà parte del programma finale ma rimarrà visibile nell’editor come promemoria per te e per chi vedrà il tuo codice.


La dichiarazione della procedura contiene "(Stato:boolean)", significa che quando richiamerai questa procedura dovrai passargli un valore di tipo boleano, un tipo di dato che può essere solo “vero o falso”. La procedura darà quel valore a tutti gli oggetti che vorrai listarci dentro.

Adesso puoi richiamare quella funzione con un pulsante per nascondere alcuni oggetti e usarla altrove per mostrarli nuovamente, scrivendo solo una semplice chiamata di una sola riga di codice…
Comodo vero?

Ok, e le funzioni?
Sono praticamente la stessa cosa, ma hanno un arma in più: possono compiere operazioni come le procedure e in questo sono identiche, ma hanno la capacità di rispondere ad una richiesta. Questa cosa, in informatica, si dice “ritornare un valore”.

Un esempio semplice potrebbe essere questo:

 function Resto(A:integer; B:integer):integer; // questa funzione vuole due valori interi
  begin
     Result:=A mod B; // questa funzione restituisce il resto della divisione A:B
  end;

 function Intero(A:integer; B:integer):integer; // questa funzione vuole due valori interi
  begin
    Result:=A div B; //questa funzione restituisce il valore intero della divisione A:B
  end;

 procedure TForm1.Button9Click(Sender: TObject);
  begin
    {Da questo pulsante si richiamano le due funzioni e si ottiene la risposta a 10:3
    “il risultato è 3 con resto di 1”}
    ShowMessage('Il risultato è: ' + IntToStr(Intero(10,3)) + ' con resto di ' + IntToStr(Resto(10,3)));
  end;

N.B.
Anche il testo contenuto tra parentesi graffe ( {questo è un commento }) viene ignorato dal compilatore, è un altro modo per scrivere dei commenti o delle note (utile quando devi scrivere note su più righe).


Breve spiegazione:
A questa funzione dobbiamo dire quali numeri vogliamo elaborare, questi numeri saranno contenuti in A e in B che come dichiarato “(A:integer; B:integer)” sono dei numeri interi (quindi senza virgole).
Per dire alla funzione i due numeri da elaborare glieli passiamo come parametri in questo modo nomefunzione(numero, numero);
La funzioni stesse terminano con :integer, questo vuol dire che ci risponderanno solo con valori numerici interi.

La parola chiave ShowMessage la conosciamo già, serve per mostrare un messaggio, ma il messaggio che vogliamo mostrare contiene dei numeri e i messaggi sono testuali, dobbiamo convertire i numeri in stringhe di testo per poterli visualizzare, ecco che ci aiuta una funzione di Lazarus: IntToStr(numero), IntToStr significa da intero a stringa, ecco quindi spiegato perché la chiamata della funzione “Intero” è come segue IntToStr(Intero(10,3)).

Abbiamo chiesto alla funzione “Intero” di darci il valore dell’operazione 10:3 e a IntToStr di convertire quel valore numerico in un valore di testo così da poter essere mostrato, tramite showmessage, a chi ha cliccato sul pulsante…

Abbiamo chiesto anche, alla funzione Resto, di dirci il resto della divisione 10:3 e anche qui, IntToStr ci permetterà di usare quel valore in un messaggio di testo.

Il simbolo + è un operatore matematico quando si tratta di numeri ma è anche un operatore che giunta (in informatica si dice concatenare) più stringhe tra di loro per ottenere una sola stringa che in questo caso sarà: “Il risultato è: 3 con resto di 1”

Prova a creare una funzione che somma due numeri passati come argomento alla funzione…
Segui gli esempi che sono presenti in questa lezione!

Buona esercitazione!


Scarica il sorgente di esempio
‹ Precedente Successiva ›

Sommario

Sommario