Callback (προγραμματισμός)

Από τη Βικιπαίδεια, την ελεύθερη εγκυκλοπαίδεια
Μετάβαση σε: πλοήγηση, αναζήτηση

Στον προγραμματισμό Η/Υ ένας callback είναι ένα κομμάτι εκτελέσιμου κώδικα που περνάει ως παράμετρος σε ένα άλλο μέρος του προγράμματος και αναμένεται να κάνει την εκτέλεση αυτού (call back) κάποια στιγμή. Η εκτέλεση όταν γίνεται αμέσως αυτό τότε ονομάζεται συγχρονισμένο callback και όταν γίνεται αργότερα λέγεται ασυγχρόνιστο callback. Η γενική ιδέα είναι να ορίσουμε μια συνάρτηση ή μια υπορουτίνα ως μια οντότητα την οποία την περνάμε ως παράμετρο σε κάποιο άλλο σημείο του προγράμματος.

Ο τρόπος που μπορεί να οριστεί ένα callback εξαρτάται από την γλώσσα προγραμματισμού. Στην C αυτό μπορεί να γίνει με ένα δείκτη συνάρτησης, στην C++11 μπορεί να ενσωματώνεται σε μια λάμδα έκφραση ενώ στην Ruby μπορεί να είναι ένα μπλοκ κώδικα. Επίσης στην C++ στην βιβλιοθήκη STL υπάρχει η δυνατότητα υλοποίησης callback με χρήση functors. [1]

Παράδειγμα C[Επεξεργασία | επεξεργασία κώδικα]

#include <stdio.h>
#include <stdlib.h>
 
/* Η συνάρτηση παίρνει ως παράμετρο ένα δείκτη συνάρτησης / callback. */
void PrintTwoNumbers(int (*numberSource)(void)) {
    printf("%d and %d\n", numberSource(), numberSource());
}
 
/* Μια συνάρτηση callback */
int overNineThousand(void) {
    return (rand() % 1000) + 9001;
}
 
/* Μια δεύτερη συνάρτηση callback. */
int meaningOfLife(void) {
    return 42;
}
 
/* Καλούμε την PrintTwoNumbers() με τρία διαφορετικά callbacks. */
int main(void) {
    PrintTwoNumbers(&rand);
    PrintTwoNumbers(&overNineThousand);
    PrintTwoNumbers(&meaningOfLife);
    return 0;
}

Η έξοδος του προγράμματος είναι περίπου (εξαρτάται από την συνάρτηση δημιουργίας τυχαίων αριθμών rand):

125185 and 89187225
 9084 and 9441
 42 and 42

Παραπομπές[Επεξεργασία | επεξεργασία κώδικα]

  1. Josuttis, David Vandevoorde; Nicolai M. (2004). C++ templates : the complete guide (5. print έκδοση). Boston, MA [u.a.]: Addison-Wesley. σελ. 417. ISBN 0-201-73484-2. http://books.google.gr/books?id=yQU-NlmQb_UC&pg=PA417#v=onepage&q&f=false. 
Στο λήμμα αυτό έχει ενσωματωθεί κείμενο από το λήμμα Callback (computer programming) της Αγγλικής Βικιπαίδειας, η οποία διανέμεται υπό την GNU FDL και την CC-BY-SA 3.0. (ιστορικό/συντάκτες).