Passaggio dei parametri


imageAll'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 x in alfa e del valore di y in beta.

Il sottoprogramma B svolgerà l'operazione per la quale è stato progettato in modo parametrico, cioè in funzione dei valori assunti dai parametri formali (alfa, beta, ...) specificati dal chiamante A tramite i parametri attuali (x, y, ...)

 
imageChi non ha scritto personalmente il codice può immaginare il sottoprogramma come uno strumento del quale conosce il nome, l'elenco dei parametri formali e la funzionalità che offre

La modalità di passaggio dei parametri dipende dal linguaggio adottato
Basic
Sub XYZ(ByVal alfa As Integer, ByVal beta As Double)
Pascal
Procedure XYZ(alfa: Integer; beta: Double);
C...
void XYZ(int alfa, double beta)


Note
  1. l'elenco dei parametri attuali deve corrispondere in numero e tipo all'elenco dei parametri formali
  2. ogni parametro formale viene dichiarato e si comporta come una variabile locale inizializzata al valore specificato con il parametro attuale all'atto della chiamata
  3. i parametri attuali devono essere valori, quindi possono essere costanti (-1, +5.0), variabili (x, y), espressioni (-x, y+5.0), ...
  4. al termine dell'esecuzione del sottoprogramma le eventuali modifiche dei valori dei parametri formali scompariranno per sempre...

Passaggio per riferimento

imagePiuttosto che passare dei valori si può scegliere di passare delle variabili.

Il sottoprogramma B svolgerà l'operazione per la quale è stato progettato utilizzando x, il parametro attuale, ogni volta che nel suo codice compare alfa, il parametro formale.
Si dice che alfa è solo un reference, riferimento, per x.
Analogamente per y e beta.
 
IntestazioneChiamata
Basic
Sub XYZ(ByRef alfa As Integer, ByRef beta As Double)
Sub XYZ(alfa As Integer, beta As Double)
Call XYZ(x, y)
Pascal
Procedure XYZ(Var alfa: Integer; Var beta: Double);
XYZ(x, y);
C
void XYZ(int *alfa, double *beta)
XYZ(&x, &y);
C++
void XYZ(int &alfa, double &beta)
XYZ(x, y);


Note
  1. i parametri attuali devono essere variabili
  2. Basic applica di default la modalità ByRef
  3. C++ aggiunge una sintassi semplificata rispetto a quella adottata in C
  4. Java non prevede il passaggio dei parametri per riferimento



imageLe due modalità possono essere utilizzate contemporaneamente...
 
IntestazioneChiamata
Basic
Sub XYZ(ByVal alfa As Integer, ByRef beta As Double)
Sub XYZ(ByVal alfa As Integer, beta As Double)
Call XYZ(x, y)
Pascal
Procedure XYZ(alfa: Integer; Var beta: Double);
XYZ(x, y);
C
void XYZ(int alfa, double *beta)
XYZ(x, &y);
C++
void XYZ(int alfa, double &beta)
XYZ(x, y);

There are no comments on this page.
Valid XHTML :: Valid CSS: :: Powered by WikkaWiki