Pemrograman Berbasis Peristiwa: Panduan Lengkap dengan Contoh

Pembaharuan Terakhir: 15 Oktober 2025
  • Model reaktif: kejadian memicu pengendali pada putaran kejadian.
  • Konsep utama: pengirim, penerima, objek peristiwa, dan pendengar.
  • Aplikasi: antarmuka, komunikasi asinkron dan waktu nyata/IoT.
  • Latihan: addEventListener, preventDefault, Node.js dan tkinter.

Ilustrasi pemrograman berbasis peristiwa

Pemrograman berbasis peristiwa merupakan gaya pengembangan di mana aplikasi bereaksi terhadap apa yang terjadi di sekitarnya, alih-alih berdasarkan daftar langkah yang kaku. Alih-alih berjalan langsung dari titik A ke titik B, perangkat lunak menunggu kejadian dan merespons Saat seseorang mengklik, data tiba atau status sistem berubah.

Jika Anda memiliki latar belakang pemrograman yang lebih berurutan, pendekatan ini membuka serangkaian kemungkinan baru untuk antarmuka yang kaya, layanan beban tinggi, dan sistem yang memproses aliran langsung. Saya mengusulkan tur lengkap konsep, arsitektur, jenis acara, kode praktis (JavaScript, Node.js dan Python/tkinter) dan praktik yang baik untuk menguasainya dengan mudah.

Apa itu pemrograman berbasis peristiwa?

Dalam paradigma ini, logika dipicu ketika sesuatu yang relevan terjadi: interaksi pengguna, pesan jaringan, sensor, pengatur waktu, atau sinyal apa pun yang ditentukan oleh pemrogram. “Sesuatu” itu disebut peristiwa dan memicu satu atau lebih pengendali. yang berisi respons yang ingin Anda jalankan.

Kuncinya adalah bahwa peristiwa dapat terjadi secara tidak sinkron, bahkan secara paralel. Program mendengarkan melalui putaran peristiwa yang mengumpulkan, mengantre, dan mendistribusikan peristiwa ke penerimanya., menjaga aplikasi tetap responsif tanpa pemblokiran.

Skema kejadian, pemancar dan penerima

Konsep penting: peristiwa, emitor, penerima, dan loop

Suatu kejadian merupakan manifestasi bahwa sesuatu telah terjadi: klik, klik ganda, penekanan tombol, selesainya pengunduhan, kedatangan paket jaringan, terbukanya jendela, dan sebagainya. Biasanya membawa data (muatan) dan konteks yang menjelaskan apa yang terjadi, yang memungkinkan keputusan dibuat dalam pengendali.

Komponen yang menghasilkan kejadian disebut emitor; komponen yang menangani kejadian disebut penerima atau pendengar. Hubungan antara keduanya dibangun dengan mekanisme berlangganan (pendengar) atau pengikatan yang menunjukkan fungsi mana yang harus dijalankan untuk setiap jenis peristiwa.

Inti dari sistem ini adalah loop peristiwa. Loop ini mengumpulkan peristiwa yang tertunda, mengurutkannya, dan mengirimkannya ke pengontrol terkait. Berkat pola ini, aplikasi dapat bereaksi terhadap banyak rangsangan tanpa memblokir antarmuka atau membuang-buang sumber daya..

Dalam lingkungan visual dan seluler, Anda juga akan membedakan antara peristiwa yang dimulai pengguna (mengklik, menyeret, mengetuk, memiringkan perangkat) dan peristiwa otomatis (membuka layar, memicu pengatur waktu, mengubah fokus). Memisahkan dua kelompok membantu Anda merancang alur interaksi yang dapat diprediksi..

Cara kerja siklus hidup acara

Kita dapat meringkas dinamikanya dalam tiga langkah yang saling terkait. Pertama, peristiwa tersebut dihasilkan (oleh orang, sistem, jaringan atau perangkat keras); peristiwa tersebut memasuki saluran umum (antrian) sementara putaran peristiwa mengawasi.

Kedua, mendengarkan terjadi. Penerima yang berlangganan pada jenis kejadian tertentu mendeteksinya. (misalnya, pendengar 'klik' atau penangan 'data' pada soket) dan siap untuk bertindak.

Akhirnya, penanganan pun dijalankan. Sebuah pengendali memproses objek kejadian, menanyakan propertinya (jenis, tujuan, nilai) dan memutuskan tindakan apa yang harus dilakukan.: Perbarui UI, validasi, sebarkan, batalkan, atau pancarkan peristiwa berjenjang baru.

Jenis kejadian yang paling sering terjadi

Dalam praktiknya Anda akan menemukan keluarga-keluarga terkenal. Mengetahui nuansanya akan menghemat banyak sakit kepala saat melakukan debugging dan instrumentasi.:

  • Mouse atau penunjuk: klik, dblclick, mousedown, mouseup, mouseover, mouseout, mousemove, menu konteks.
  • Keyboard: keydown, keyup, keypress (untuk tombol karakter).
  • Jendela dan dokumen: memuat, kesalahan (saat memuat sumber daya), mengubah ukuran, menggulir, menyembunyikan/menampilkan halaman.
  • bentuk: masukan, ubah, kirim, fokus masuk/fokus keluar.
  • Roda/gulir: roda dengan data gulir horizontal dan vertikal.
  Claude Sonnet 4.5: Agen yang memprogram, menggunakan komputer, dan tetap pada jalurnya

Selain nama peristiwa, objek peristiwa menyediakan rincian tambahan. Pada pointer Anda akan memiliki clientX/pageX dan clientY/pageY; pada keyboard Anda akan memeriksa tombol, kode atau pengubah (shiftKey, altKey, ctrlKey); di roda, deltaX, deltaY dan deltaMode untuk mengetahui unit.

Mendengarkan dan manajemen acara dalam praktik

Ada dua cara umum di web. Salah satunya adalah mendefinisikan pengendali di HTML itu sendiri (atribut seperti onclick), berguna untuk prototipe atau kasus sederhana:

<!-- myClickHandler es la función JS que manejará el evento -->
<button onclick='myClickHandler()'>Púlsame</button>
<script>
  function myClickHandler(){
    alert('Hola');
  }
</script>

Cara lainnya, yang lebih bersih dan lebih terukur, adalah mendaftarkan pendengar dari JavaScript. addEventListener memungkinkan Anda berlangganan saat runtime dan memisahkan tampilan dari logika:

const btn = document.querySelector('button');
const onClick = (e) => {
  console.log('Destino:', e.target);
};
btn.addEventListener('click', onClick);
// Más tarde, si ya no lo necesitas:
// btn.removeEventListener('click', onClick);

Setiap pengendali menerima objek peristiwa. Di sana Anda akan menemukan e.type, e.target, e.cancelable dan metode kunci seperti e.preventDefault() atau e.stopPropagation() untuk membatalkan perilaku default atau menghentikan gelembung.

Kasus tipikal adalah menangkap nilai input tanpa menyegarkan halaman: membaca e.target.value di dalam pengendali perubahan atau masukan dan Anda akan memiliki teks langsung.

Contoh kode dalam Node.js dan Python

Node.js mengimplementasikan pola terbitkan/berlangganan yang sangat kuat dengan kelas EventEmitter. Dengan cara ini Anda dapat menentukan peristiwa bisnis Anda sendiri dan bereaksi terhadapnya.:

// Node.js (JavaScript)
const EventEmitter = require('events');
class MiBusEventos extends EventEmitter {}
const bus = new MiBusEventos();

bus.on('saludo', (nombre) => {
  console.log(`¡Hola, ${nombre}!`);
});

// Emitimos el evento con un dato asociado
bus.emit('saludo', 'mundo');

Dalam Python, jika Anda bekerja dengan antarmuka desktop, tkinter memudahkan untuk mengikat widget ke acara. Tombol, bingkai, atau jendela dapat dikaitkan dengan tindakan mouse dan keyboard:

# Python + tkinter
from tkinter import *

def on_key(event):
    print('Tecla:', repr(event.char))

def on_click(event):
    marco.focus_set()
    print('Click en:', event.x, event.y)

root = Tk()
marco = Frame(root, width=120, height=120)
marco.bind('<Key>', on_key)
marco.bind('<Button-1>', on_click)
marco.pack()
root.mainloop()

Jika Anda lebih suka contoh dasar emitor Anda sendiri dalam Python (tanpa GUI), Anda dapat mensimulasikan langganan dan pemberitahuan dengan daftar fitur:

class Emisor:
    def __init__(self):
        self._subs = {}
    def on(self, evento, fn):
        self._subs.setdefault(evento, []).append(fn)
    def emit(self, evento, *args, **kwargs):
        for fn in self._subs.get(evento, []):
            fn(*args, **kwargs)

emisor = Emisor()
emisor.on('saludo', lambda: print('¡Hola, mundo!'))
emisor.emit('saludo')

Properti dan metode dalam lingkungan visual (MIT App Inventor dan sejenisnya)

Alat pengembangan blok bangunan seperti MIT App Inventor adalah contoh sempurna dari paradigma berbasis peristiwa. Setiap komponen (tombol, label, gambar) memiliki properti, peristiwa, dan metode yang Anda manipulasi secara visual.

Properti menggambarkan bagaimana suatu komponen “terlihat” atau “berperilaku”: ukuran font, perataan, warna, visibilitas, atau teks. Mereka dapat diperbaiki dalam desain atau diubah dalam eksekusi untuk mengadaptasi antarmuka. berdasarkan interaksi atau data yang masuk.

Metode adalah tindakan yang telah ditetapkan sebelumnya yang diketahui cara melakukannya oleh suatu komponen, seperti memindahkan jendela, memfokuskan bidang, menambahkan item ke dalam daftar, atau menghapus teks. Anda tidak memprogramnya dari awal: lingkungan menawarkannya kepada Anda, siap untuk digunakan..

  Pemrograman terstruktur: Segala hal yang perlu Anda ketahui

Pada jenis platform ini, Anda juga akan membedakan antara kejadian otomatis (misalnya, saat layar dimulai) dan kejadian yang dipicu oleh pengguna (menekan tombol, menyeret, mengetuk, memiringkan ponsel). Pemisahan ini berguna untuk mengatur navigasi dan status. secara tertib.

GUI, CLI, dan Peran Sistem Operasi

Sistem operasi mengirimkan kejadian ke aplikasi yang memiliki fokus masukan. Dalam GUI, setiap jendela atau widget dapat menerima dan menangani kejadiannya sendiri. melalui putaran peristiwa aplikasi.

Bahkan dalam program baris perintah, terdapat sinyal serupa: proses mungkin menunggu pengguna mengetik dan menekan Enter untuk menganggap peristiwa “input selesai” telah terjadi. Perbedaan utamanya adalah pada CLI alurnya dianggap linier, tetapi masih ada kejadian yang menunggu..

Aplikasi bintang untuk pemrograman berbasis peristiwa

Antarmuka pengguna interaktifPerangkat web, desktop, dan seluler bereaksi secara instan terhadap setiap gestur. Pengalamannya terasa alami karena logikanya dieksekusi tepat saat pengguna memintanya.

Komunikasi asinkron: Server HTTP, WebSockets, antrean pesan, dan layanan mikro memanfaatkan model tersebut untuk memproses permintaan masuk tanpa memblokir pekerjaan lain.

Pemrosesan waktu nyata:telemetri, IoT, perdagangan, pemantauan infrastruktur atau kontrol industri meluncurkan tindakan segera saat perubahan terdeteksi oleh sensor. Peristiwa ini adalah pemicu yang sempurna untuk bereaksi terhadap kenyataan dalam hitungan milidetik.

Keuntungan dan tantangan yang perlu dipertimbangkan

Sisi baiknya, Anda mendapatkan interaktivitas, efisiensi, dan skalabilitas:Kode hanya berjalan saat dibutuhkan, utas utama tidak macet, dan Anda dapat mendistribusikan pekerjaan di antara beberapa penangan khusus.

Sebagai imbalannya, Kompleksitas tumbuh seiring dengan jumlah peristiwa, pendengar, dan aliran asinkronTanpa desain yang jelas, pemeliharaan menjadi terganggu, dan timbul masalah seperti rantai yang tidak teratur atau penanganan yang sulit diuji.

Praktik baik untuk bekerja dengan acara

Dinamakan secara konsisten Untuk pengendali (onSubmit, handleClickCancel), hindari logika sebaris dalam HTML dan pusatkan langganan dengan addEventListener atau sistem peristiwa kerangka kerja Anda.

Mencegah kebocoran: Menghapus pendengar saat komponen dihancurkan atau elemen DOM menghilang. removeEventListener di web atau mekanisme yang setara dalam kerangka kerja dan GUI asli.

Validasi dan batasan: Gunakan e.preventDefault() pada formulir jika belum lolos validasi, dan e.stopPropagation() jika Anda tidak ingin suatu peristiwa dipicu pada leluhur juga.

Melepaskan Mempublikasikan peristiwa domain (misalnya, 'order.created') dan membiarkan modul lain berlangganan. Hal ini mengurangi dependensi langsung dan memudahkan pengembangan aplikasi Anda.

Di luar bagian depan: arsitektur dan pola

Orientasi peristiwa tidak berhenti di antarmuka. Di backend Anda dapat menggunakan antrian (RabbitMQ, Kafka), broker atau bus internal dan layanan cloud seperti AWS untuk mengomunikasikan layanan mikro tanpa pemblokiran dan dengan ketahanan.

Pola yang berguna meliputi: Sumber Acara (sumber kebenaran adalah peristiwa), Peristiwa yang Dilakukan Transfer Negara (transfer status melalui peristiwa) atau kotak keluar (memastikan publikasi yang dapat diandalkan dari basis data). Mereka semua bergantung pada prinsip yang sama: bereaksi terhadap fakta..

Properti objek acara yang harus Anda hafalkan

Selain e.type dan e.target, ada beberapa bidang yang sangat berguna. Di dalam mouse: clientX/clientY (sehubungan dengan jendela) dan pageX/pageY (sehubungan dengan dokumen), yang (tombol ditekan). Di papan ketik: kunci, kode, dan pengubah seperti shiftKey, altKey, dan ctrlKey.

Untuk roda, deltaX dan deltaY menandai perpindahan dan deltaMode menunjukkan apakah unitnya berupa piksel, garis, atau halaman. Jika dikombinasikan dengan baik, keduanya memungkinkan Anda menciptakan interaksi yang presisi dan mudah diakses.

  Bahasa pemrograman yang paling banyak digunakan pada tahun 2024

Peristiwa, properti, dan metode dalam konteks

Untuk merangkum pendekatan visual: suatu komponen memiliki properti (konfigurasi), peristiwa (apa yang terjadi padanya) dan metode (apa yang diketahuinya bagaimana melakukannya)Tiga serangkai ini muncul di App Inventor, kerangka kerja web, dan SDK asli.

Mengubah properti saat runtime, misalnya ukuran font atau warna tombol setelah validasi, adalah hal yang wajar dalam model ini. Ikat perubahan ke peristiwa dan Anda akan mendapatkan UI reaktif dengan mudah..

HTML dan delegasi acara

Jika antarmuka dibangun secara dinamis, berlangganan setiap elemen baru bisa mahal. Delegasi acara mendengarkan pada wadah umum dan memfilter berdasarkan e.target, yang sangat menyederhanakan daftar atau tabel dengan baris yang muncul dan menghilang.

document.querySelector('#lista').addEventListener('click', (e) => {
  if (e.target.matches('li.removible')) {
    e.target.remove();
  }
});

Dengan demikian, satu pendengar mengelola semua elemen sekarang dan masa mendatang dalam wadah #list. Lebih sedikit langganan, lebih sedikit memori, dan lebih sedikit risiko kebocoran.

Bagaimana cara integrasinya dengan jaringan dan waktu nyata?

Di Node.js, soket dan aliran sudah bekerja berdasarkan peristiwa: 'data', 'end', 'error', 'close'… Pasang saja pengendali dan biarkan runtime mengerjakan sisanya.Di browser, WebSocket dan EventSource mengikuti prinsip yang sama.

Untuk IoT, kedatangan pengukuran dari sensor adalah pemicu alami. Alur kejadian dapat menormalkan, memvalidasi, dan menerbitkan peringatan atau dasbor yang diperbarui. tanpa intervensi manual.

Pembelajaran dan praktik terbimbing

Jika Anda ingin melangkah lebih jauh, ada baiknya berlatih dengan proyek-proyek kecil: formulir dengan validasi panas, obrolan dengan WebSocket, dasbor yang menggunakan aliran, atau aplikasi desktop dengan pengikatan. Pengulangan dalam konteks yang berbeda mengkonsolidasikan refleks dan pola.

Pilihan lainnya adalah berlatih dengan program intensif yang menggabungkan dasar-dasar, arsitektur, dan penerapan. Bootcamp yang bagus untuk aplikasi seluler atau pengembangan web modern akan membantu Anda memahami peristiwa, asinkronisitas, dan komposisi antarmuka. siap untuk produksi.

Perilaku berdasarkan peristiwa memungkinkan Anda membangun perangkat lunak yang merespons sesuai harapan orang: tidak menghalangi dan tepat waktu. Sekarang Anda memiliki konsep (peristiwa, pemancar, penerima, perulangan), jenis yang paling umum, penggunaan objek peristiwa, contoh dalam Node.js dan Python/tkinter, peran properti dan metode dalam lingkungan visual, aplikasi nyata, dan praktik yang baik.Dengan fondasi ini, berpindah dari klik ke hasil akan menjadi masalah mendengarkan dengan baik, mengelola dengan lebih baik, dan menjaga sistem tetap bersih dan terpisah.

apa itu redis
Artikel terkait:
Apa itu Redis: Panduan Lengkap tentang Kegunaan, Manfaat, dan Contoh