All’atto della chiamata di un sottoprogramma è possibile specificare dei parametri.
Prima dell’esecuzione del codice del sottoprogramma B avviene un passaggio, assegnazione, del valore di a in x e del valore di b in y.
Il sottoprogramma B svolgerà l’operazione per la quale è stato progettato in modo parametrico, cioè in funzione dei valori assunti dai parametri formali (x, y, …) specificati dal sottoprogramma chiamante A tramite i parametri attuali (a, b, …)
La modalità di passaggio dei parametri dipende dal linguaggio adottato
C… |
|
Pascal |
|
Procedure B(x: Integer; y: Double); |
|
Python |
|
VISUAL
BASIC |
|
Sub B(ByVal x As Integer, ByVal y As Double) |
|
Note
- l’elenco dei parametri attuali deve corrispondere in numero e tipo all’elenco dei parametri formali
- ogni parametro formale viene dichiarato e si comporta come una variabile locale inizializzata al valore specificato con il parametro attuale all’atto della chiamata
- i parametri attuali devono essere valori, quindi possono essere costanti (-1, +5.0), variabili (a, b), espressioni (-a, b+5.0), …
- al termine dell’esecuzione del sottoprogramma le eventuali modifiche dei valori dei parametri formali scompariranno per sempre…
Passaggio per variabile
Piuttosto che passare dei valori si può scegliere di passare delle variabili (indirizzi, reference, …).
Il sottoprogramma B svolgerà l’operazione per la quale è stato progettato utilizzando a, il parametro attuale, ogni volta che nel suo codice compare x, il parametro formale.
Si dice che x è solo un reference, un riferimento, per a.
Analogamente per l’uso di b piuttosto che di y.
|
Intestazione |
Chiamata |
C |
|
void B(int *x, double *y) |
|
|
C++ |
|
void B(int &x, double &y) |
|
|
Pascal |
|
Procedure B(Var x: Integer; Var y: Double); |
|
|
Python |
|
|
VISUAL
BASIC |
|
Sub B(ByRef x As Integer, ByRef y As Double) Sub B(x As Integer, y As Double) |
|
|
Note
- gli effetti dell’esecuzione del sottoprogramma B si manifestano nei valori contenuti nelle variabili utilizzate come parametri attuali all’atto della chiamata
- i parametri attuali devono essere variabili
- Basic applica di default la modalità ByRef (by reference)
- C++ aggiunge una sintassi semplificata rispetto a quella adottata in C
- Java non prevede il passaggio dei parametri per riferimento
Le due modalità di passaggio dei parametri (per valore, per riferimento) possono essere utilizzate contemporaneamente…
Alla fine dell’esecuzione del sottoprogramma B il valore di a, nel sottoprogramma A, dipenderà dalle operazioni che sono state eseguite su x in B
|
Intestazione |
Chiamata |
C |
|
|
C++ |
|
|
Pascal |
|
Procedure B(Var x: Integer; y: Double); |
|
|
Python |
|
|
VISUAL
BASIC |
|
Sub B(ByRef x As Integer, ByVal y As Double) Sub B(x As Integer, ByVal y As Double) |
|
|