Baru-baru ini saya mendengar istilah "hook" ketika berbicara dengan beberapa orang tentang program yang saya tulis. Saya tidak yakin persis apa arti istilah ini meskipun saya menyimpulkan dari percakapan bahwa hook adalah jenis fungsi. Saya mencari definisi tetapi tidak dapat menemukan jawaban yang bagus. Apakah seseorang dapat memberi saya gambaran tentang apa arti istilah ini secara umum dan mungkin contoh kecil untuk menggambarkan definisi tersebut?
248
Jawaban:
Pada dasarnya itu adalah tempat dalam kode yang memungkinkan Anda untuk memanfaatkan modul untuk memberikan perilaku yang berbeda atau bereaksi ketika sesuatu terjadi.
sumber
Hook adalah fungsionalitas yang disediakan oleh perangkat lunak bagi pengguna perangkat lunak tersebut untuk memiliki kode mereka sendiri yang dipanggil dalam keadaan tertentu. Kode itu dapat menambah atau mengganti kode saat ini.
Di masa lalu ketika komputer benar-benar pribadi dan virus kurang lazim (saya berbicara tahun 80-an), itu sesederhana menambal perangkat lunak sistem operasi itu sendiri untuk memanggil kode Anda. Saya ingat menulis ekstensi ke bahasa BASIC Applesoft di Apple II yang hanya mengaitkan kode saya ke juru bahasa BASIC dengan menyuntikkan panggilan ke kode saya sebelum salah satu baris diproses.
Beberapa komputer memiliki kait yang telah dirancang sebelumnya, salah satu contohnya adalah aliran I / O pada Apple II. Itu menggunakan pengait seperti itu untuk menyuntikkan seluruh sub-sistem disk (ROM Apple II pada awalnya dibangun pada hari-hari di mana kaset adalah media penyimpanan utama untuk PC). Anda mengendalikan disk dengan mencetak kode ASCII 4 (
CTRL-D
) diikuti oleh perintah yang ingin Anda jalankan kemudian aCR
, dan itu dicegat oleh sub-sistem disk, yang telah mengaitkan dirinya ke dalam rutinitas print ROM Apple.Jadi misalnya, baris:
akan daftar isi disk kemudian menginisialisasi ulang mesin. Ini memungkinkan trik seperti melindungi program BASIC Anda dengan menetapkan baris pertama sebagai:
lalu gunakan
POKE
untuk memasukkanCTRL-D
karakter di tempatX
itu. Kemudian, siapa pun yang mencoba membuat daftar sumber Anda akan mengirimkan urutan inisialisasi ulang melalui rutinitas keluaran tempat sub-sistem disk akan mendeteksinya.Itu sering kali merupakan tipu daya yang harus kita pilih, untuk mendapatkan perilaku yang kita inginkan.
Saat ini, dengan sistem operasi yang lebih aman, ia menyediakan fasilitas untuk kait itu sendiri, karena Anda tidak lagi harus memodifikasi sistem operasi "dalam penerbangan" atau pada disk.
Mereka sudah ada sejak lama. Mainframe memilikinya (disebut pintu keluar) dan banyak perangkat lunak mainframe menggunakan fasilitas itu bahkan sekarang. Sebagai contoh, sistem kontrol kode sumber gratis yang datang dengan z / OS (disebut SCLM) memungkinkan Anda untuk sepenuhnya menggantikan subsistem keamanan dengan hanya menempatkan kode Anda sendiri di pintu keluar.
sumber
Dalam arti umum, "kait" adalah sesuatu yang akan membuat Anda, seorang programmer, melihat dan / atau berinteraksi dengan dan / atau mengubah sesuatu yang sudah terjadi dalam suatu sistem / program.
Misalnya, CMS Drupal memberi para pengembang kait yang memungkinkan mereka mengambil tindakan tambahan setelah "simpul konten" dibuat. Jika pengembang tidak menerapkan pengait, simpul dibuat normal. Jika pengembang mengimplementasikan pengait, mereka dapat menjalankan beberapa kode tambahan setiap kali sebuah simpul dibuat. Kode ini dapat melakukan apa saja, termasuk memutar mundur dan / atau mengubah tindakan asli. Itu juga bisa melakukan sesuatu yang tidak terkait dengan pembuatan simpul sepenuhnya.
Callback dapat dianggap sebagai jenis pengait yang spesifik. Dengan menerapkan fungsi panggilan balik ke dalam suatu sistem, sistem itu memungkinkan Anda memanggil beberapa kode tambahan setelah suatu tindakan selesai. Namun, pengait (sebagai istilah umum) tidak terbatas pada panggilan balik.
Contoh lain. Terkadang Pengembang Web akan merujuk pada nama kelas dan / atau ID pada elemen sebagai pengait. Itu karena dengan menempatkan ID / nama kelas pada suatu elemen, mereka kemudian dapat menggunakan Javascript untuk memodifikasi elemen itu, atau "menghubungkan" ke dokumen halaman. (Ini memperluas makna, tetapi ini biasanya digunakan dan layak disebutkan)
sumber
Kata sederhana:
Hook adalah cara mengeksekusi kode khusus (fungsi) baik sebelum, sesudah, atau alih-alih kode yang ada. Misalnya, suatu fungsi dapat ditulis untuk "menghubungkan" ke dalam proses login untuk menjalankan fungsi Captcha sebelum melanjutkan ke proses login normal.
sumber
Hooking dalam pemrograman adalah teknik yang menggunakan apa yang disebut hooks untuk membuat rantai prosedur sebagai event handler.
sumber
Hooks adalah kategori fungsi yang memungkinkan kode dasar untuk memanggil kode ekstensi. Ini dapat berguna dalam situasi di mana pengembang inti ingin menawarkan ekstensibilitas tanpa memaparkan kode mereka.
Salah satu penggunaan kait adalah dalam pengembangan mod video game. Gim mungkin tidak memungkinkan pengembang mod untuk memperluas fungsionalitas basis, tetapi kait dapat ditambahkan oleh pengembang pustaka inti. Dengan kait ini, pengembang independen dapat meminta kode khusus mereka dipanggil untuk setiap acara yang diinginkan, seperti pemuatan game, pembaruan inventaris, interaksi entitas, dll.
Metode implementasi yang umum adalah memberi fungsi daftar kosong callback, lalu memaparkan kemampuan untuk memperpanjang daftar callback. Kode dasar akan selalu memanggil fungsi pada waktu yang sama dan tepat tetapi, dengan daftar panggilan balik kosong, fungsi tidak melakukan apa-apa. Ini dengan desain.
Pihak ketiga, kemudian, memiliki kesempatan untuk menulis kode tambahan dan menambahkan panggilan balik baru mereka ke daftar panggilan balik hook. Dengan tidak lebih dari referensi kait yang tersedia, mereka telah memperluas fungsionalitas dengan risiko minimal ke sistem pangkalan.
Hooks tidak memungkinkan pengembang untuk melakukan apa pun yang tidak dapat dilakukan dengan struktur dan antarmuka lainnya. Mereka adalah pilihan yang harus dibuat dengan mempertimbangkan tugas dan pengguna (pengembang pihak ketiga).
Untuk klarifikasi: sebuah kait memungkinkan ekstensi dan dapat diimplementasikan menggunakan panggilan balik. Callback umumnya tidak lebih dari penunjuk fungsi; alamat yang dihitung dari suatu fungsi. Tampaknya ada kebingungan dalam jawaban / komentar lain.
sumber
Hook menunjukkan tempat dalam kode tempat Anda mengirim suatu peristiwa dengan tipe tertentu, dan jika acara ini didaftarkan sebelumnya dengan fungsi yang tepat untuk menelepon kembali, maka itu akan ditangani oleh fungsi terdaftar ini, jika tidak, tidak ada yang terjadi.
sumber
kait dapat dieksekusi ketika beberapa kondisi ditemukan. misalnya beberapa perubahan variabel atau beberapa tindakan disebut atau beberapa peristiwa terjadi. kait dapat masuk dalam proses dan mengubah sesuatu atau bereaksi terhadap perubahan.
sumber
Seringkali hooking mengacu pada hooking pesan Win32 atau yang setara dengan Linux / OSX, tetapi hooking yang lebih umum hanya memberitahukan objek / jendela / program / dll yang ingin Anda beri tahu ketika tindakan tertentu terjadi. Sebagai contoh: Memiliki semua jendela pada sistem memberitahu Anda ketika mereka akan ditutup.
Sebagai aturan umum, mengaitkan agak berbahaya karena melakukannya tanpa memahami bagaimana pengaruhnya terhadap sistem dapat menyebabkan ketidakstabilan atau perilaku yang sangat tidak terduga. Ini juga bisa SANGAT berguna dalam keadaan tertentu, pikir. Sebagai contoh: FRAPS menggunakannya untuk menentukan pada windows mana ia harus menunjukkan penghitung FPS-nya.
sumber
Chain of hooks adalah serangkaian fungsi di mana masing-masing fungsi memanggil fungsi berikutnya. Apa yang penting tentang rantai pengait adalah bahwa seorang programmer dapat menambahkan fungsi lain ke rantai pada saat dijalankan. Salah satu cara untuk melakukan ini adalah dengan mencari lokasi yang diketahui di mana alamat fungsi pertama dalam rantai disimpan. Anda kemudian menyimpan nilai pointer fungsi itu dan menimpa nilai di alamat awal dengan alamat fungsi yang ingin Anda masukkan ke dalam rantai kait. Fungsi kemudian dipanggil, melakukan bisnisnya dan memanggil fungsi berikutnya dalam rantai (kecuali Anda memutuskan sebaliknya). Secara alami, ada sejumlah cara lain untuk membuat rantai pengait, dari menulis langsung ke memori hingga menggunakan fasilitas pemrograman bahasa seperti Ruby atau Python.
Contoh rantai pengait adalah cara aplikasi MS Windows memproses pesan. Setiap fungsi dalam rantai pemrosesan baik memproses pesan atau mengirimnya ke fungsi berikutnya dalam rantai.
sumber
Dalam sistem manajemen konten Drupal, 'hook' memiliki makna yang relatif spesifik. Ketika acara internal terjadi (seperti pembuatan konten atau login pengguna, misalnya), modul dapat merespons acara dengan menerapkan fungsi "kait" khusus. Ini dilakukan melalui konvensi penamaan - [nama-plugin-Anda] _user_login () untuk acara Login Pengguna, misalnya.
Karena konvensi ini, peristiwa yang mendasarinya disebut sebagai "kait" dan muncul dengan nama seperti "hook_user_login" dan "hook_user_authenticate ()" dalam dokumentasi API Drupal.
sumber
Dalam SANGAT singkat, Anda dapat mengubah kode panggilan API seperti
MessageBox
ke tempat fungsi berbeda diedit oleh Anda (secara global akan bekerja dengan sistem yang luas, secara lokal akan bekerja dengan proses yang luas).sumber