Sobes.tech
Junior

Czym są funkcje zwrotne?

sobes.tech AI

Odpowiedź od AI

Funkcja przekazywana do innej funkcji jako argument. Funkcja wywołująca może następnie wykonać przekazaną funkcję w określonym momencie lub podczas wystąpienia określonego zdarzenia.

Zastosowania:

  • Obsługa zdarzeń (GUI, zdarzenia systemowe)
  • Operacje asynchroniczne
  • Strategie zachowania
  • Uogólnione algorytmy

Przykład:

C:

#include <stdio.h>

// Typ wskaźnika na funkcję przyjmującą int i zwracającą void
typedef void (*CallbackFunc)(int);

void do_something_with_callback(int value, CallbackFunc callback) {
    printf("Robię coś z wartością: %d\n", value);
    if (callback != NULL) {
        callback(value); // Wywołanie funkcji zwrotnej
    }
}

void my_callback_function(int data) {
    printf("Funkcja zwrotna wykonana z wartością: %d\n", data);
}

int main() {
    do_something_with_callback(10, my_callback_function);
    do_something_with_callback(20, NULL); // Bez funkcji zwrotnej
    return 0;
}

C++:

#include <iostream>
#include <functional> // Dla std::function

void do_something_with_callback(int value, std::function<void(int)> callback) {
    std::cout << "Robię coś z wartością: " << value << std::endl;
    if (callback) { // Sprawdzenie czy funkcja zwrotna istnieje
        callback(value); // Wywołanie funkcji zwrotnej
    }
}

void my_callback_function(int data) {
    std::cout << "Funkcja zwrotna wykonana z wartością: " << data << std::endl;
}

int main() {
    do_something_with_callback(10, my_callback_function);

    // Funkcja lambda jako funkcja zwrotna
    do_something_with_callback(20, [](int data) {
        std::cout << "Lambda jako funkcja zwrotna wykonana z wartością: " << data << std::endl;
    });

    do_something_with_callback(30, nullptr); // Bez funkcji zwrotnej

    return 0;
}