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
#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
#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
int arr[3] = {1, 2, 3};
____(arr, 3, print_double);
int arr[3] = {1, 2, 3};
forEach(arr, 3, print_double);
Açıklama: forEach, diziyi dolaşıp callback'i çağırır.