Callback funksiyalar
Callback funksiyasi
Callback funksiyasi — boshqa funksiyaga argument sifatida uzatiladigan funksiya.
Uni qabul qilgan funksiya kerak bo‘lganda uni qayta chaqirishi (call back), ya’ni bajarishi mumkin.
Bu kodingizni moslashuvchan va qayta foydalanishga qulay qilishning kuchli usuli — asosiy mantiqni o‘zgartirmasdan qaysi funksiya bajarilishini hal qilishingiz mumkin.
C tilida callback funksiyalari odatda funksiya ko‘rsatkichlari yordamida amalga oshiriladi.
Oddiy callback misoli
Quyidagi oddiy misol bir funksiya boshqasini qanday "qayta chaqirishi" (call back) mumkinligini ko‘rsatadi:
Misol
Funksiyani boshqa funksiyaga argument sifatida uzatish:
void sayHello() {
printf("Hello from the callback!\n");
}
void runCallback(void (*callback)()) {
printf("Before calling the callback...\n");
callback();
printf("After calling the callback.\n");
}
int main() {
runCallback(sayHello);
return 0;
}
Ushbu misolda:
sayHello()— xabar chiqaradigan oddiy funksiya.runCallback()parametr sifatida funksiya ko‘rsatkichini qabul qiladi.runCallback(sayHello)bajarilganda, u o‘z ichidasayHello()funksiyasini chaqiradi.
Eslatma: "Callback" so‘zi bir funksiya o‘ziga avvalroq berilgan boshqa funksiyani "qayta chaqirishi" (calls back) sababli paydo bo‘lgan.
Parametrli callback
Parametr qabul qiladigan funksiyalarni ham uzatishingiz mumkin — faqat funksiya ko‘rsatkichining tipi mos kelishiga ishonch hosil qiling:
Misol
Parametrli funksiyani callback sifatida uzatish:
void addNumbers(int a, int b) {
printf("The sum is: %d\n", a + b);
}
void calculate(void (*callback)(int, int), int x, int y) {
callback(x, y);
}
int main() {
calculate(addNumbers, 5, 3);
return 0;
}
Bu yerda calculate() funksiya va ikkita sonni qabul qiladi, so‘ngra funksiyani (bu holda addNumbers()) shu sonlarni argument qilib chaqiradi.
Bir nechta callback
Callback funksiyalari yordamida funksiya qaysi funksiyani uzatganingizga qarab turlicha ishlashini ta’minlashingiz mumkin. Bu saralash, filtrlash va hodisalarni qayta ishlash kodida keng tarqalgan.
Misol
Turli amallarni bajarish uchun turli callback funksiyalaridan foydalanish:
void greetMorning() { printf("Good morning!\n"); }
void greetEvening() { printf("Good evening!\n"); }
void greet(void (*callback)()) {
callback();
}
int main() {
greet(greetMorning);
greet(greetEvening);
return 0;
}
Qaysi funksiya uzatilganiga qarab dastur greet() funksiyasining o‘zini o‘zgartirmasdan turli natijalar chiqaradi.
Hayotiy misol: qsort() funksiyasida callback’dan foydalanish
C standart kutubxonasining ko‘plab funksiyalari callback funksiyalaridan foydalanadi. Masalan, <stdlib.h> kutubxonasidagi qsort() funksiyasi saralash vaqtida elementlarni taqqoslash uchun callback funksiyasidan foydalanadi.
Taqqoslash funksiyasini siz taqdim etasiz, qsort() esa uni kerak bo‘lganda chaqiradi. Natijada elementlar saralanadi:
Misol
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
return (*(int*)a - *(int*)b);
}
int main() {
int numbers[] = { 5, 2, 9, 1, 7 };
int size = sizeof(numbers) / sizeof(numbers[0]);
qsort(numbers, size, sizeof(int), compare);
for (int i = 0; i < size; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
Bu yerda compare() — qsort() sonlarni qanday tartiblashni aniqlash uchun foydalanadigan callback funksiyasi.
Xulosa
- Callback funksiyasi — boshqa funksiyaga argument sifatida uzatiladigan funksiya.
- U bir funksiyaga boshqasini uning nomini oldindan bilmasdan chaqirish imkonini beradi.
- Callback funksiyalari kodni moslashuvchanroq va qayta foydalanishga qulayroq qiladi.
- Ular C standart kutubxonasida (masalan,
qsort()funksiyasida) ishlatiladi.
W3Schools Pathfinder
Yutuqlaringizni kuzating – bu bepul!
