Pertanyaan Apa itu metode callback?


Saya seorang noob pemrograman dan tidak begitu mengerti konsep di balik metode callback. Mencoba membaca tentang hal itu di wiki dan itu melampaui kepalaku. Bisakah seseorang menjelaskan ini dengan istilah sederhana?


22
2017-12-01 11:52


asal


Jawaban:


Callback adalah sesuatu yang Anda berikan kepada suatu fungsi, yang memberitahukannya apa yang seharusnya dipanggil pada suatu titik dalam operasinya. Kode dalam fungsi memutuskan kapan harus memanggil fungsi (dan argumen apa yang harus dilewati). Biasanya, cara Anda melakukan ini adalah lulus fungsi itu sendiri sebagai 'callback', dalam bahasa di mana fungsi adalah objek. Dalam bahasa lain, Anda mungkin harus melewati beberapa jenis hal khusus yang disebut "function pointer" (atau yang serupa); atau Anda mungkin harus meneruskan nama fungsi (yang kemudian mendongak saat runtime).

Contoh sepele, dengan Python:

void call_something_three_times(what_to_call, what_to_pass_it):
    for i in xrange(3): what_to_call(what_to_pass_it)

# Write "Hi mom" three times, using a callback.
call_something_three_times(sys.stdout.write, "Hi mom\n")

Contoh ini memungkinkan kita memisahkan tugas mengulangi panggilan fungsi, dari tugas untuk benar-benar memanggil fungsi. Itu tidak terlalu berguna, tetapi ini menunjukkan konsepnya.

Di dunia nyata, callback digunakan banyak untuk hal-hal seperti threading libraries, di mana Anda memanggil beberapa fungsi thread-creation dengan callback yang menggambarkan pekerjaan yang akan dilakukan oleh thread. Fungsi thread-creation melakukan pekerjaan yang diperlukan untuk mengatur sebuah thread, dan kemudian mengatur fungsi callback untuk dipanggil oleh thread baru.


20
2017-12-01 12:00



Wiki mengatakan:

Dalam pemrograman komputer, panggilan balik adalah   referensi ke kode yang dapat dijalankan, atau a   sepotong kode yang bisa dieksekusi, itu   lulus sebagai argumen ke kode lain.   Ini memungkinkan perangkat lunak tingkat rendah   layer untuk memanggil subrutin (atau   fungsi) didefinisikan dalam tingkat yang lebih tinggi   lapisan.

Dalam istilah umum adalah mekanisme untuk memberi tahu sepotong kode yaitu metode, bagian kode mana yang dijalankan, yaitu metode lain, ketika diperlukan.
Callback terkait dengan fakta bahwa klien dari fungsi panggilan menentukan fungsi yang dimiliki tanggung jawab kode klien untuk fungsi panggilan untuk mengeksekusi dan ini dilewatkan sebagai argumen.
Contohnya ada di GUI. Anda lulus sebagai argumen fungsi yang akan dipanggil setelah suatu peristiwa terjadi (misalnya tombol ditekan) dan setelah kejadian terjadi fungsi ini disebut.
Fungsi ini biasanya diimplementasikan oleh objek yang aslinya terdaftar untuk acara tersebut


11
2017-12-01 12:11



Fungsi callback adalah fungsi yang dipanggil melalui pointer fungsi. Jika Anda meneruskan pointer (alamat) dari suatu fungsi sebagai argumen ke argumen lain, ketika pointer itu digunakan untuk memanggil fungsi yang ditunjuknya maka dikatakan bahwa panggilan balik dilakukan.

Mengapa Anda Harus Menggunakan Fungsi Callback?

Callback dapat digunakan untuk notifikasi. Misalnya, Anda perlu mengatur timer di aplikasi Anda. Setiap kali timer kedaluwarsa, aplikasi Anda harus diberitahu. Namun, pelaksana mekanisme waktu tidak tahu apa-apa tentang aplikasi Anda. Hanya ingin pointer ke fungsi dengan prototipe yang diberikan, dan dalam menggunakan pointer itu membuat panggilan balik, memberitahukan aplikasi Anda tentang peristiwa yang telah terjadi. Memang, SetTimer () WinAPI menggunakan fungsi callback untuk memberi tahu bahwa penghitung waktu telah kedaluwarsa (dan, jika tidak ada fungsi callback yang disediakan, itu akan mengirim pesan ke antrian aplikasi).


5
2017-12-01 11:56



Menelepon balik berarti Anda meneruskan kode sebagai parameter. Misalnya, bayangkan sebuah tombol, yang menunjukkan dialog ketika ditekan:

Button testBtn;
testBtn.setOnClickListener(new OnClickListener() {

  @Override
  public void onCLick() {
    JOptionPane.showDialog(testBtn, "Test button pressed");
  }
}

Di sini kami memberi tahu tombol apa yang harus dijalankan, kapan akan diklik. Jadi, kerangka akan mengeksekusi kode yang dilewatkan, ketika mendeteksi klik. Di dalam kerangka ada beberapa kode seperti:

void processEvent(Event e) {
  if (e.type == Event.CLICK) {
    e.getComponent().getOnClickListener().onClick();
  }
}

Jadi, beberapa kode dasar memanggil pendengar saat peristiwa yang tepat terjadi.

PS: Pseudocode di sini, gambarkan saja ide itu.


1
2017-12-01 12:00



Secara umum Anda menyediakan fungsi sebagai parameter yang dipanggil ketika sesuatu terjadi.

Dalam kode C Anda akan melewatkan sesuatu yang terlihat seperti ini:

int (callback *)(void *, long );

artinya fungsi yang mengambil dua parameter, void * dan panjang dan mengembalikan int.

Dengan bahasa berorientasi objek, sintaksnya terkadang lebih sederhana. Misalnya Anda mungkin dapat membangun mekanisme callback yang memungkinkan pengguna untuk mengirimkan objek yang terlihat seperti fungsi atau memiliki metode abstrak (sehingga membungkus fungsi) dan data konteks juga.

Bahasa modern menggunakan istilah "delegasi" untuk merujuk pada "pola" fungsi. Ini dapat digunakan sebagai callback. Beberapa bahasa juga menggunakan istilah tersebut lambda yang pada dasarnya adalah fungsi tanpa nama, sering dibuat "on the fly" dalam blok kode dan dilewatkan sebagai panggilan balik. C++11 telah memasukkan ini ke dalam standarnya.

Keuntungan menggunakan callback adalah Anda dapat memisahkan, yaitu mengurangi / memisahkan API dari apa yang memanggilnya, dan sampai batas tertentu sebaliknya, yaitu meskipun di satu tempat Anda tahu Anda memanggil API, pada titik "Pawang" itu tidak perlu tahu dari mana namanya.

Misalnya, Anda dapat memiliki API yang menghasilkan objek dan kemudian "panggil balik" saat dihasilkan.


1
2017-12-01 11:56