Utilizzo di una funzione o una procedura come parametro in un'altra funzione

A Delfi, tipi procedurali (puntatori di metodo) consentono di trattare le procedure e le funzioni come valori che possono essere assegnati a variabili o passati ad altre procedure e funzioni.

Ecco come chiamare una funzione (o procedura) come parametro di un'altra funzione (o procedura):

  1. Dichiarare la funzione (o procedura) che verrà utilizzata come parametro. Nell'esempio seguente, questo è "TFunctionParameter".
  2. Definire una funzione che accetterà un'altra funzione come parametro. Nell'esempio seguente questo è "DynamicFunction"
 genere

    TFunctionParameter = funzione(const valore: intero): corda;

...
funzione Uno(const valore: intero): corda;inizio

    risultato: = IntToStr (valore);

 fine;

funzione Due(const valore: intero): corda;inizio

    risultato: = IntToStr (valore 2 *);

 fine;

funzione DynamicFunction (f: TFunctionParameter): corda;inizio

    risultato: = f (2006);

 fine;

...
// Esempio di utilizzo:

 

 var

    s: stringa;

 inizio

    s: = DynamicFunction (One);

    ShowMessage (s); // visualizzerà "2006"

 

    s: = DynamicFunction (Two);

    ShowMessage (s); // visualizzerà "4012"fine; 

Note importanti

  • Naturalmente, decidi tu la firma del "TFunctionParameter": se si tratta di una procedura o di una funzione, di quanti parametri sono necessari, ecc..
  • Se "TFunctionParameter" è un metodo (di un oggetto istanza) è necessario aggiungere le parole dell'oggetto al nome del tipo procedurale, come in: TFunctionParameter = function (valore const: intero): stringa di oggetto;
  • Se si prevede che "zero" sia specificato come parametro "f", è necessario verificarlo utilizzando la funzione Assegnato.
  • Correzione del "Tipo incompatibile: 'puntatore al metodo e procedura normale'"