Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 19 di 43
  • livello principiante
Indice lezioni

Procedure e Funzioni

Le procedure e le funzioni permettono di riutilizzare il medesimo codice in zone diverse del programma.
Le procedure e le funzioni permettono di riutilizzare il medesimo codice in zone diverse del programma.
Link copiato negli appunti

A differenza di altri linguaggi, come il C o il C++, l'Object Pascal fa distinzione tra
funzioni e procedure. Queste sono definite a livello generale come routines o subroutines.
Esse sono blocchi di codice indipendenti che vengono utilizzate per centralizzare del
codice che necessita di essere utilizzato più volte in punti diversi del programma. Ciò
permette di ridurre la quantità di codice da scrivere e riduce il numero di errori.

L'Object Pascal distingue tra funzioni, che restituiscono dei valori, e le procedure
che non restituiscono alcun valore.

Per dichiarare una funzione o una procedura è nessario indicarne in nome, ed i
parametri ed i rispettivi tipi che verranno passati ad essa, il blocco di codice che
implemeterà le funzionalità della routine. Nel caso di una funzione, occorre anche
indicare un tipo per il valore restituito. Ecco la sintassi per la dichiarazione di
funzioni e procedure

Per dichiarare un procedura si utilizza la sintassi seguente

Procedure NomeProcedura(ListaParametri);

DichiarazioniLocali;

Begin

CodiceProcedura;

End;

dove NomeProcedura è un nome valido di identificatore, ListaParametri è una lista di
parametri e relativi tipi, DichiarazioniLocali sono dichiarazioni di variabili, tipi,
altre funzioni o procedure locali alla procedura stessa e CodiceProcedura il codice
principale della procedura.

La lista dei parametri può essere formata da un elenco di identificatori separati da
virgole e dal tipo a cui appartengono; può essere un elenco di identificatori di tipo
diverso accompagnati dai rispettivi tipi, separati da punti e virgola; una combinazione
delle possibilità precedenti. Strutturalmente

Elenco di identificatori dello stesso tipo:
A, B, C : Integer

Elenco di identificatori di tipo diverso:
A : Integer; B : Real; C : String

Una combinazione dei precedenti:
A, B : Integer; C : String

I parametri passati ad una procedura possono essere di due tipi: per riferimento
o per valore.

Per passare un parametro per valore è sufficiente utilizzare la sintassi
precedentemente vista. Per passare parametri per riferimento occorre specificare la parola
chiave Var prima del nome dell'identificatore che rappresenta il
parametro da passare per riferimento.

Procedure MiaProcedura(A, B : Integer; Var C : Real);

Nell'esempio, A e B sono passate per valore, ovvero come costanti, C per riferimento. I
parametri passati per valore sono costanti e partecipano all'elaborazione in localmente
ovvero, modifiche a loro apportate non vengono trasferite all'esterno della procedura.
Questo perchè al momento della chiamata alla procedura viene allocata memoria per questi
parametri e viene liberata all'uscita della procedura provocando la perdita dei valori in
essi contenuti.

Il passaggio per riferimento, permette di trasmettere le modifiche effettuate sul
valore del parametro per riferimento all'estreno della procedura una volta terminata la
sua esecuzione. Con riferimento all'esempio precedente, si potrebbe pensare alla
MiaProcedura come una procedura che restituisca il risultato della divisione di A per B
attraverso il parametro C. In questo caso A, B sono locali alla procedura mentre C viene
restituito alla fine dell'esecuzione.

In alcuni casi, dopo la dichiarazione della procedura è necessario indicare una
direttiva che specifichi il comportamento a livello di chiamata della procedura. Ciò è
necessario ad esempio nelle librerie a collegamento dinamico, dove per permettere a
programmi scritti in linguaggi differenti dal Delphi, si utilizza la direttiva StdCall
che garantisce la compatibilità del passagio di parametri.

Per un approfondimento delle direttive si rimanda alla documentazione del linguaggio.

Le dichiarazioni di funzioni sono in tutto e pertutto uguali alle dichiarazioni di
procedure tranne per il fatto che per le prime occorre specificare il tipo del valore
restituito.

Function NomeFunzione(ListaParametri) : TipoRestituito;

DichiarazioniLocali;

Begin

CodiceFunzione;

End;

Per assegnare il valore da restituire, si possono seguire due strade: una è assegnare
il valore al nome della funzione; l'altra è utilizzare la variabile Result.

Esempio

Function Bisestile(Anno : Integer) : Boolean;

Begin

...

Bisestile := ...;

End;

oppure

Function Bisestile(Anno : Integer) : Boolean;

Begin

...

Result := ...;

End;

il risultato è lo stesso.

Ti consigliamo anche