Fungsi Callback dalam C

Hai, para pemrogram yang sedang berkembang! Hari ini, kita akan melihat dunia yang menarik dari fungsi callback dalam C. Sebagai guru ilmu komputer yang ramah di lingkungan sekitar Anda, saya sangat gembira untuk mengantar Anda melalui konsep ini. Percayalah, sekali Anda menguasai callbacks, Anda akan merasa seperti Anda telah membuka superpower baru dalam pemrograman!

C - Callback Function

Apa Itu Fungsi Callback?

mari mulai dari dasar. Bayangkan Anda di pesta pizza (siapa yang tidak menyukai pizza?), dan Anda meminta teman Anda untuk menelpon Anda saat pizza tiba. Teman Anda secara esensial melakukan callback - mereka menelpon Anda kembali saat sebuah peristiwa tertentu terjadi.

Dalam pemrograman C, fungsi callback bekerja sama seperti itu. Itu adalah fungsi yang kita kirimkan sebagai argumen ke fungsi lain. Fungsi lain itu kemudian "menelpon kembali" (menjalankan) fungsi yang dikirimkan saat suatu peristiwa terjadi atau suatu tugas selesai.

Berikut adalah struktur sederhana dari fungsi callback:

void callback_function() {
// Tubuh fungsi
}

void main_function(void (*callback)()) {
// Beberapa kode
callback();  // Menelpon fungsi callback
// Kode lain
}

int main() {
main_function(callback_function);
return 0;
}

Dalam contoh ini, callback_function adalah callback kami. Kita kirimkannya ke main_function, yang kemudian menjalankannya pada suatu titik saat eksekusinya.

Contoh Fungsi Callback dalam C

mari lihat contoh yang lebih nyata. Kita akan membuat program sederhana yang menggunakan callback untuk mencetak pesan setelah perhitungan selesai.

#include <stdio.h>

// Fungsi callback kami
void print_result(int result) {
printf("Hasilnya adalah: %d\n", result);
}

// Fungsi yang melakukan perhitungan dan menelpon callback
void perform_operation(int a, int b, void (*callback)(int)) {
int sum = a + b;
callback(sum);  // Menelpon fungsi callback dengan hasil
}

int main() {
perform_operation(5, 3, print_result);
return 0;
}

Dalam contoh ini:

  1. Kita mendefinisikan fungsi callback print_result yang mengambil integer dan mencetaknya.
  2. Fungsi perform_operation mengambil dua integer dan sebuah pointer fungsi sebagai argumen.
  3. Dalam perform_operation, kita menghitung jumlah dan kemudian menelpon fungsi callback dengan jumlah ini.
  4. Di main, kita memanggil perform_operation dengan nomor kita dan callback print_result.

Saat Anda menjalankan program ini, itu akan mengeluarkan: "Hasilnya adalah: 8"

Fungsi Callback Dengan Argumen

Callbacks juga dapat mengambil beberapa argumen. Mari memperluas contoh sebelumnya untuk mencakup operasi lain:

#include <stdio.h>

// Fungsi callback dengan beberapa argumen
void print_operation(char operation, int a, int b, int result) {
printf("%d %c %d = %d\n", a, operation, b, result);
}

// Fungsi yang melakukan perhitungan dan menelpon callback
void perform_operation(int a, int b, char op, void (*callback)(char, int, int, int)) {
int result;
switch(op) {
case '+': result = a + b; break;
case '-': result = a - b; break;
case '*': result = a * b; break;
case '/': result = a / b; break;
default: printf("Operasitidak valid\n"); return;
}
callback(op, a, b, result);
}

int main() {
perform_operation(5, 3, '+', print_operation);
perform_operation(10, 4, '-', print_operation);
perform_operation(7, 2, '*', print_operation);
perform_operation(20, 5, '/', print_operation);
return 0;
}

Program ini akan mengeluarkan:

5 + 3 = 8
10 - 4 = 6
7 * 2 = 14
20 / 5 = 4

Di sini, callback print_operation mengambil empat argumen: operasi, dua operan, dan hasil. Hal ini memungkinkan kita untuk membuat output yang lebih fleksibel dan informatif.

Jenis Callback dalam C

Dalam C, kita dapat mengekategorikan callbacks menjadi dua jenis utama:

  1. Callbacks Synchronous: Ini dieksekusi segera oleh fungsi yang mereka kirimkan ke. Contoh kami di atas adalah callbacks synchronous.

  2. Callbacks Asynchronous: Ini dijadwalkan untuk dieksekusi kemudian, biasanya digunakan dalam pemrograman event-driven atau saat berhubungan dengan operasi I/O.

mari lihat tabel yang menggabungkan jenis-jenis ini:

Tipe Deskripsi Kasus Penggunaan Contoh
Synchronous Dieksekusi segera Operasi sederhana, perhitungan Contoh operasi aritmatika kami
Asynchronous Dieksekusi kemudian Penanganan event, operasi I/O Callback file read/write, penanganan event GUI

Berikut adalah contoh sederhana callback asynchronous menggunakan sinyal di C:

#include <stdio.h>
#include <signal.h>
#include <unistd.h>

void callback_function(int signum) {
printf("Menerima sinyal %d\n", signum);
}

int main() {
signal(SIGALRM, callback_function);
alarm(5);  // Mengatur alarm untuk 5 detik

printf("Menunggu alarm...\n");
pause();  // Menunggu sinyal

return 0;
}

Dalam contoh ini, callback_function diatur sebagai callback asynchronous yang akan dipanggil saat sinyal SIGALRM diterima. Fungsi alarm(5) menyetel timer selama 5 detik, setelah itu sinyal SIGALRM akan dikirim, memicu callback kita.

Dan begitu juga, teman-teman! Kita telah berpergian melalui negeri fungsi callback dalam C. Ingat, callbacks adalah seperti teman yang dapat dipercaya dalam petualangan pemrograman Anda - mereka selalu ada saat Anda membutuhkan mereka, siap untuk bereaksi. Terus latihan, dan segera Anda akan menjadi ahli dalam menggunakan callbacks!

Credits: Image by storyset