PROCEDURE E FUNZIONI (SOTTOPROGRAMMI)
Esistono due tipologie di sottoprogrammi:
- PROCEDURA
- una sottoparte di programma che corrisponde ad uno statement
(istruzione);
- FUNZIONE
- una sottoparte di programma che corrisponde ad una espressione di
un certo tipo.
Ogni sottoprogramma è caratterizzato da:
- NOME
- per identificare e usare, anche più volte, tale sottoparte;
- PARAMETRI (anche nessuno)
- i sottoprogrammi possono essere parametrizzati su
valori, variabili, file, altri sottoprogrammi, ...;
- BODY (CORPO)
- il testo che definisce la sottoparte vera e propria.
La struttura di un programma diventa ora
SUBPROGRAM DECLARATIONS
MAIN
- una dichiarazione di sottoprogramma ha una delle seguenti forme:
- MAIN è il programma vero e proprio (cioè la parte
principale).
I sottoprogrammi dichiarati sopra vengono usati al suo
interno attraverso il meccanismo della chiamata.
Una chiamata di procedura può apparire in
ogni punto dove potrebbe apparire uno statement, mentre una chiamata di
funzione può apparire in ogni punto dove potrebbe apparire
un'espressione del tipo corrispondente.
Una chiamata di un sottoprogramma è costituita
dal nome del
sottoprogramma e dagli elementi che istanziano i parametri (i cosidetti
parametri attuali).
Parametri
I parametri di un sottoprogramma vengono elencati nella dichiarazione del
sottoprogramma stesso (i cosidetti parametri formali) e
possono essere di diversa natura.
Le tipologie dei parametri più comuni sono:
- VALORI (di un qualche tipo di dato del linguaggio)
- la dichiarazione del parametro (parametro formale) ha la forma
generica
value IDENTIFIER : TYPE
mentre il corrispondente parametro attuale è semplicemente
un'espressione EXP di tipo TYPE.
Ogni linguaggio può poi precisare come avviene il passaggio
del parametro più dettagliatamente; per esempio
- per nome
-
ogni occorrenza di IDENTIFIER nel corpo del
sottoprogramma viene rimpiazzata dal testo di EXP
-
per copia
-
IDENTIFIER è una variabile dichiarata
implicitamente all'inizio del corpo del sottoprogramma che viene
inizializzata con il valore di EXP al momento della chiamata;
in certi linguaggi non è più
possibile assegnare un nuovo valore a tale variabile.
- VARIABILI (di un qualche tipo del linguaggio)
- la dichiarazione del parametro (parametro formale) ha la forma
generica
variable IDENTIFIER : TYPE
mentre il corrispondente parametro attuale è semplicemente
una variabile VAR di tipo TYPE;
più precisamente o una variabile di un tipo semplice o una componente
di una variabile di un tipo strutturato, cioè ogni cosa che
può essere trovata a sinistra di un'assegnazione.
Seguendo la metafora variabile=scatola, in questo caso il parametro formale è un nome
generico di scatola, mentre quello attuale è il nome di una scatola
particolare,
cioè il sottoprogramma è parametrizzato su una scatola.
- SOTTOPROGRAMMI
- Ogni linguaggio di programmazione precisa se e quali forme di sottoprogrammi
possono essere usate per parametrizzare altri sottoprogrammi
- FILE
- Ogni linguaggio di programmazione permette di parametrizzare i
sottoprogrammi con dei file; in questi casi il parametro formale è
un nome generico di un file di un certo tipo, mentre quello attuale deve
essere il nome di un file dello stesso tipo esistente.
Chiaramente all'interno dei sottoprogrammi possiamo utilizzare tutti i
costrutti del linguaggio, quindi per esempio chiamare altri sottoprogrammi
ed anche dichiarare
sottoprogrammi che saranno utilizzati solamente al loro interno.
ESERCIZIO
- Definire una forma di sottoprogrammi per il calcolatore antropomorfo,
precisando quali siano i parametri ed il modo in cui sono passati.