อ๋อคุณจะหายไปแน่นอนบางสิ่งบางอย่าง โดยทั่วไปแล้ว Gotos จะถูกใช้อย่างที่คุณพูดเพื่อทำการถ่ายโอนการควบคุมทางเดียว
อย่างไรก็ตามเหตุการณ์ไม่ทำเช่นนั้น เมื่อโค้ดเริ่มทำงานเหตุการณ์มันรู้ดีว่าเมื่อมีการเผยแพร่เหตุการณ์ (หรือประมวลผล, เข้าคิว, ถูกไล่ออก ... ฯลฯ ) การประมวลผลโค้ดจะกลับมาทำงานในบรรทัดถัดไปในโค้ดที่สร้างเหตุการณ์
การใช้ goto สร้างการเชื่อมต่ออย่างแน่นหนาระหว่างรหัสที่เรียกใช้คำสั่งนั้นและรหัสที่อยู่ในจุดสิ้นสุดการรับ นักพัฒนาจะต้องมีความรู้ที่ใกล้ชิดของทั้งสองสถานที่เพื่อใช้ข้ามไป
ในทางกลับกันโค้ดที่ใช้ไล่เหตุการณ์มักจะไม่รู้หรือสนใจว่าใครสนใจฟังเหตุการณ์นั้น มีอาจจะฟัง หรืออาจมีผู้ฟัง 100 คนหรือ 0 ผู้ฟังเหล่านั้นอาจอยู่ในรายการเดียวกับที่เหตุการณ์ถูกยิงออกไปหรือพวกเขาอาจอยู่ในแอปพลิเคชันที่แตกต่างอย่างสิ้นเชิงหรือพวกเขาอาจอยู่ในเครื่องอื่น เท่าที่สำนักพิมพ์มีความกังวลทันทีที่เขาสร้างงานของเขาเสร็จ
หากคุณอยู่กับฉันจนถึงตอนนี้สิ่งที่ฉันอธิบายไว้ข้างต้นเป็นกรณีในอุดมคติของรูปแบบผับ / ย่อย น่าเสียดายที่ในโลกแห่งความเป็นจริงนั้นไม่เหมาะเสมอไปและมีบางกรณีที่ผู้จัดพิมพ์สร้างเหตุการณ์ผู้ใช้บริการจะถูกเรียกใช้การเปลี่ยนแปลงทั้งรัฐและการประมวลผลรหัสเวลากลับสู่ผู้เผยแพร่ "โลก" ถูกพลิกคว่ำ และฉันแน่ใจว่าคุณเคยพบปัญหานี้ในอดีตเพราะเงื่อนไขนี้มักเกิดขึ้นเมื่อรูปแบบ pub / sub ถูกนำมาใช้ในแบบง่าย ๆ (เช่นผ่านการใช้ผู้ได้รับมอบหมายหรือเหตุการณ์ใน C # หรือตัวชี้ / ฟังก์ชัน / อินเตอร์เฟสใน C / C ++)
แต่ปัญหานี้ไม่จำเป็นต้องเป็นรูปแบบ pub / sub แต่เป็นการใช้งานมัน นี่คือสาเหตุที่ระบบจำนวนมากใช้คิวเพื่อให้เมื่อมีการเผยแพร่เหตุการณ์มันจะถูกจัดคิวเพื่อเรียกใช้ในภายหลังทำให้ผู้เผยแพร่มีโอกาสที่จะดำเนินการให้เสร็จสิ้นในขณะที่โลกยังไม่บุบสลาย เมื่อผู้จัดทำเสร็จแล้วก็จะใช้งานได้การวนรอบเหตุการณ์ (aka การจัดส่งวนซ้ำ) จะปรากฏขึ้นจากเหตุการณ์และเรียกสมาชิก
return
,try/catch
,break
,continue
,switch
- ผู้ที่มีทั้งหมดgoto
. ที่มีระดับต่าง ๆ ของข้อ จำกัด ในตัวไปถือว่าอันตรายเป็นอันตรายต่อความคิดเกี่ยวกับวิธีการทำงานของรหัส