Written by xinyiman Ottobre 22, 2011, 11:12:00 am22477 ViewsRating: 0 (0 Rates)Print
Fino ad ora tutto il codice che abbiamo scritto era in
un blocco solo, ovvero abbiamo scritto tutte le righe una dietro
l'altra, ma solo perché gli esempi visti erano semplici, ma capita e
anche sovente di dover scrivere pezzi di codice che serve
riutilizzare. Le motivazioni possono essere molteplici, ma sovente
conviene utilizzare le procedure e le funzioni piuttosto che scrivere
un monoblocco di codice. Ipotizziamo di dover invertire il valore di
due variabili di nome Valore1 e Valore2 e di dover effettuare questa
operazione sovente all'interno del nostro programma, per poter fare
questa operazione abbiamo bisogno anche della variabile di nome
Valore3. Vediamo ora come andrebbe scritto il codice che effettua
l'inversione dei valori:
Valore3:=Valore1;
Valore1:=Valore2;
Valore2:=Valore3;
Bene ora immaginiamo di doverlo scrivere 10, 100, 1000
volte all'interno del codice, possiamo facilmente capire che il
codice in questione diverrà molto lungo, quindi difficile da gestire
in un secondo momento, e in più il programma diverrebbe molto grosso
senza tenere conto che la variabile di nome Valore3 rimarrebbe
allocata in memoria per tutta l'esecuzione del programma. Mentre ora
immaginiamo di immettere questo codice scritto in una procedura, le
migliorie sono diverse, ad esempio quando la procedura ha finito la
sua vita la variabile Valore3 viene deallocata, il programma occupa
meno spazio e se bisogna fare manutenzione il codice diventa più
leggibile.
Bene fino ad ora abbiamo parlato di procedure e funzioni
come se fossero la stessa cosa, ma fondamentalmente c'è una
differenza tra le due cose, ovvero che le funzioni restituiscono un
valore, mentre le procedure no. Vediamo ora come si dichiara una
procedura e come si dichiara una funzione. Procedura:
procedure
NomeProcedura();
begin
.
.
.
end;
Funzione:
function
NomeFunzione(): tiporestituito;
begin
.
.
NomeFunzione:=valorerestituito;
end;
La prima cosa che bisogna notare è che sia le funzioni
che le procedure hanno un nome che le contraddistingue, per seconda
cosa bisogna notare che entrambe terminano con le parentesi e con il
punto e virgola. Ma le due cose più importanti da notare sono che la
funzione per restituire un valore deve specificare di che tipo è, e
per effettuare la restituzione bisogna attribuire il valore da
restituire al nome della funzione stessa.
Un altra cosa da apprendere quando si tratta l'argomento
procedure e funzioni è il passaggio di parametri. Per passaggio di
parametri si intende il passare delle informazioni alla procedura o
alla funzione. Vediamo un esempio concreto:
Bene come si può notare, all'interno delle parentesi
tonde subito dopo il nome della procedura, è presente la
dichiarazione di tre variabili intervallate da dei punti e virgola.
In questo modo definisco quanti parametri passare alla
funzione/procedura specificando il tipo del dato che gli passo.
I parametri possono essere passati in due modi, per
valore o per referenza. La differenza tra le due è che se sono
passati per valore, il valore stesso non può essere modificato
all'esterno della procedura, se invece il parametro è passato per
referenza allora il valore se viene modificato verrà modificato
sempre nel programma. In pratica i due tipi si differenziano grazie
alla parola riservata var all'interno delle parentesi tonde. Vediamo
un esempio di passaggio di parametri per valore:
procedure
Inverti(var Valore1: integer; var Valore2: integer);
e ricompilare. Una volta eseguite entrambe le versioni è
evidente la differenza tra le due.
N.B.: se per caso si immettesse la riga procedure
Inverti(Valore1: integer; var Valore2: integer); allora
Valore1 sarebbe passato per valore e Valore2 per referenza.
About the author
xinyiman registered at Italian community of Lazarus and Free Pascal on Ottobre 14, 2011, 10:56:28 pm and has posted 3263 posts in the boards since then. Last visit was Ottobre 11, 2024, 03:54:30 pm.
Questo blog non rappresenta una testata giornalistica poiché viene
aggiornato senza alcuna periodicità. Non può pertanto considerarsi un
prodotto editoriale ai sensi della legge n. 62/2001.
Questo sito utilizza cookie, anche di terze parti, per offriti servizi in linea con le tue preferenze. Chiudendo questo banner, scorrendo questa pagina, cliccando su un link o proseguendo la navigazione in altra maniera, acconsenti all’uso dei cookie.