Evet, kesinlikle bir şey eksik . Gotos, tipik olarak, dediğin gibi, tek yönlü kontrol transferi yapmak için kullanılır.
Ancak, olaylar bunu yapmaz. Kod olayı tetiklediğinde, olay yayınlandığında (veya işlendiğinde, kuyruğa alındığında, tetiklendiğinde vb.) Kod yürütmesinin, olayı oluşturan kodun bir sonraki satırında devam edeceğini tam olarak bilir.
Goto kullanımı bu ifadeyi çağıran kod ile alıcı uçtaki kod arasında çok sıkı bir bağlantı oluşturur. Geliştirici, goto kullanmak için her iki yer hakkında da samimi bilgiye sahip olmalıdır.
Öte yandan, olayları tetikleyen kod genellikle o olayı kimin dinlemekle ilgilendiğini bilemez veya umursamaz. Orada olabilir bir dinleyici olmak. Ya da 100 dinleyici veya 0 olabilir. Bu dinleyiciler, etkinliğin tetiklendiği aynı programda olabilirler veya tamamen farklı bir uygulamada olabilirler veya farklı bir makinede olabilirler. Yayıncı söz konusu olduğunda, işini gerçekleştirdiği olayı ürettiği anda.
Şimdiye kadar benimle iseniz, yukarıda tarif ettiğim şey pub / sub modelinin ideal örneğidir. Ne yazık ki gerçek dünyada işler her zaman ideal değildir ve yayıncıların bir etkinlik oluşturduğu, bir abonenin çağrıldığı, bir grup devleti değiştirdiği ve zaman kodunun yayıncıya geri döndüğü durumlarda "dünya" baş aşağı çevrildi. Ve eminim geçmişte bu durumla karşılaştınız, çünkü bu durum genellikle pub / alt deseni çok basit bir şekilde uygulandığında ortaya çıkar (örneğin, C #'daki delegelerin veya olayların veya C'deki işlev / arabirim işaretlerinin kullanılmasıyla) / C ++).
Ancak bu sorun zorunlu olarak pub / alt kalıp değil, bunun uygulanmasından ibarettir. Bu yüzden birçok sistem kuyruklara güvenir, böylece bir olay yayınlandığında, daha sonra çağrılmak için sıraya alınır, daha sonra yayıncıya dünya hala bozulmamışken yürütmeyi bitirme şansı verir. Yayıncı işini bitirdiğinde, bir olay döngüsü (gönderme döngüsü olarak da bilinir) olayları çıkarır ve aboneleri çağırır.
return
,try/catch
,break
,continue
,switch
- olanlardır tümgoto
. Goto inşa kısıtlamanın çeşitli düzeylerde zararlı nasıl kod çalıştığı hakkında düşünme zararlıdır düşündü.