Callback
Da Wikipedia, l'enciclopedia libera.
| Questa voce sull'argomento informatica è solo un abbozzo. Contribuisci a migliorarla secondo le convenzioni di Wikipedia.
|
Callback è un termine utilizzato in informatica riferendosi, in genere, ad una funzione. Il termine viene dall' inglese e in italiano potrebbe essere reso come richiamato, o richiamata, riferendosi ad una funzione. Quindi con questo temine si intende, di solito, una fuzione che verrà richiamata da un' altra funzione o dal sistema operativo stesso. In particolare se ci si riferisce alla procedura di richiamo da un' altra funzione, il procedimento comporta il suo passaggio come parametro alla funzione chiamante. In questo modo il chiamante può realizzare un compito specifico, pur non essendo, molto spesso noto questo compito al tempo della scrittura del programma. Se poi ci si riferisce alla possibilità che la funzione sia richiamata dal sistema operativo stesso questo di norma avviene per gestire il verificarsi di un particolare evento. Questo evento può essere qualsiasi: dal premere un bottone con il mouse allo scrivere caratteri in un campo di testo.
[modifica] Esempio
Un esempio pratico di funzione che richiede una callback tra i parametri è la funzione qsort della libreria standard del C. La qsort implementa l'algoritmo di ordinamento Quicksort e può essere utilizzata per ordinare un array contenente qualsiasi tipo di dato, a patto che l'array risieda completamente in memoria.
Il seguente frammento di codice ordina una ipotetica lista di soldati per grado e per nome. In questo esempio:
- la funzione callback è la
ConfrontaSoldatiche sa come confrontare i soldati, ma non sa nulla di ordinamento - la funzione generica è la
qsortche non sa cosa sta ordinando, ma conoscendo le dimensioni dell'array e chiamando ripetutamente la funzione callback riesce a fare i giusti scambi per mettere in ordine l'array.
#include <stdlib.h> #include <string.h> #define QUANTI_SOLDATI 100 struct TSoldato { int grado; char nome[80]; } Esercito[QUANTI_SOLDATI]; int ConfrontaSoldati(const void *ptr1, const void *ptr2) { const TSoldato *s1=(const TSoldato*)ptr1; const TSoldato *s2=(const TSoldato*)ptr2; if(s1->grado!=s2->grado) return s1->grado - s2->grado; return strcmp(s1->nome, s2->nome); } void OrdinaEsercito() { qsort(Esercito, QUANTI_SOLDATI, sizeof(TSoldato), ConfrontaSoldati); }
Da notare che i parametri della qsort sono rispettivamente: la base dell'array, la quantità di elementi presenti, la dimensione di ciascun elemento e la funzione di callback.

