Yap, Anda pasti melewatkan sesuatu . Gotos biasanya akan digunakan, seperti yang Anda katakan, untuk melakukan transfer kontrol satu arah.
Namun, acara tidak melakukan itu. Ketika kode menjalankan acara, ia mengetahui sepenuhnya bahwa sekali peristiwa diterbitkan (atau diproses, antri, dipecat ... dll) eksekusi kode akan dilanjutkan pada baris berikutnya dalam kode yang menghasilkan acara.
Penggunaan goto menciptakan hubungan yang sangat erat antara kode yang menyebut pernyataan itu dan kode yang ada di pihak penerima. Pengembang harus memiliki pengetahuan yang intim tentang kedua tempat untuk menggunakan goto.
Di sisi lain, kode yang memadamkan acara biasanya tidak tahu atau peduli siapa yang tertarik mendengarkan acara itu. Ada bisa menjadi pendengar. Atau mungkin ada 100 pendengar atau 0. Pendengar itu bisa berada di program yang sama di mana acara dipecat, atau mereka bisa berada dalam aplikasi yang sama sekali berbeda, atau mereka bisa berada di mesin yang berbeda. Sejauh menyangkut penerbit, segera setelah ia menghasilkan acara pekerjaannya selesai.
Jika Anda bersama saya sejauh ini, apa yang saya jelaskan di atas adalah kasus ideal pola pub / sub. Sayangnya di dunia nyata hal-hal yang tidak selalu ideal dan ada kasus di mana penerbit menghasilkan suatu acara, pelanggan dipanggil, mengubah sejumlah negara dan pada saat eksekusi kode waktu kembali ke penerbit "dunia" tampaknya memiliki telah terbalik. Dan saya yakin Anda pernah mengalami ini di masa lalu, karena kondisi ini sering muncul ketika pub / sub pola diimplementasikan dengan cara yang sangat sederhana (misalnya melalui penggunaan delegasi atau acara di C #, atau fungsi / pointer antarmuka di C / C ++).
Tetapi masalah ini tidak harus pub / sub pola melainkan implementasi itu. Inilah sebabnya mengapa banyak sistem bergantung pada antrian sehingga ketika sebuah acara diterbitkan, itu hanya akan di-antri untuk dipanggil kemudian memberi penerbit kesempatan untuk menyelesaikan eksekusi ketika dunia masih utuh. Ketika penerbit selesai melakukan pekerjaannya, loop acara (alias loop pengiriman) akan menghapus acara dan meminta pelanggan.
return
,try/catch
,break
,continue
,switch
- mereka adalah semuagoto
dengan berbagai tingkat pembatasan dibangun di Goto dianggap berbahaya berbahaya bagi pemikiran tentang cara kerja kode..