CodeBlanks Logo Icon CodeBlanks

Callback desenleri

  • C kursu
  • Orta seviye
  • Ders 27/116
  • 5 dk

Callback desenlerini ve kullanımını öğrenirsin.

Callback deseni

Callback, bir fonksiyona parametre olarak geçilen başka bir fonksiyondur. Çağıran fonksiyon, callback'i uygun zamanda çağırır. Bu, higher-order fonksiyonların temelidir.

Örnek: void forEach(int *arr, int n, void (*cb)(int)). Bu fonksiyon, dizinin her elemanı için cb(arr[i]) çağırır. Çağıran taraf, hangi işlemin yapılacağını cb ile seçer. Bu desen, olay işleme (event handling), ağ akışları ve dizi işlemede standarttır. qsort da aslında bir callback deseni kullanır; karşılaştırıcı bir callback'tir.

forEach ile higher-order

forEach, dizinin her elemanı için verilen callback'i çağırır. Callback, ne yapılacağını belirler; forEach ise nasıl dolaşılacağını.

Örnek: void forEach(int *arr, int n, void (*cb)(int)) { for (int i = 0; i < n; i++) cb(arr[i]); }. Bu fonksiyon, cb'yi her eleman için çağırır. Çağıran, cb olarak print_double verirse her elemanı iki katıyla yazdırır; print_squared verirse karesini yazdırır. Aynı forEach, farklı callback'lerle tamamen farklı davranır. Bu, kod tekrarını önler.

Uygulama forEach ve callback yaz

void print_double(int x) yaz; printf("%d\n", x * 2) çağrısı yapsın. void forEach(int *arr, int n, void (*cb)(int)) tanımla; for (int i = 0; i < n; i++) cb(arr[i]); yapsın. main içinde int arr[3] = {1, 2, 3}; tanımla, forEach(arr, 3, print_double); çağır.

Başlangıç kodu

main.c
#include <stdio.h>

// print_double fonksiyonunu yaz
// forEach fonksiyonunu tanımla
// main içinde forEach'i çağır

int main(void) {
    return 0;
}

Örnek çözüm

main.c
#include <stdio.h>

void print_double(int x) {
    printf("%d\n", x * 2);
}

void forEach(int *arr, int n, void (*cb)(int)) {
    for (int i = 0; i < n; i++) cb(arr[i]);
}

int main(void) {
    int arr[3] = {1, 2, 3};
    forEach(arr, 3, print_double);
    return 0;
}

Beklenen çıktı

2
4
6

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Callback nedir?

  • Fonksiyona geçilen fonksiyon Doğru cevap
  • Bir döngü
  • Bir sayaç
  • Bir veri türü

Açıklama: Callback, fonksiyona parametre olarak geçilen fonksiyondur.

2 Callback kullanımlarını eşle

Kavram Anlamı
qsort Karşılaştırıcı callback
forEach Eleman callback
event handler Olay callback
comparator Sıralama yönü

3 forEach çağrısını tamamla

Soru
int arr[3] = {1, 2, 3};
____(arr, 3, print_double);
Cevap
int arr[3] = {1, 2, 3};
forEach(arr, 3, print_double);

Açıklama: forEach, diziyi dolaşıp callback'i çağırır.

Orta seviye bölümündeki tüm dersler