うん、あなたは間違いなく何かを逃しています。あなたが言ったように、Gotosは通常、一方通行の制御を実行するために使用されます。
ただし、イベントはそれを行いません。コードがイベントを起動すると、イベントが発行(または処理、キューイング、起動など)されると、イベントを生成したコードの次の行でコードの実行が再開されることを十分に認識しています。
gotoを使用すると、そのステートメントを呼び出すコードと受信側のコードが非常に密に結合されます。開発者がgotoを使用するには、両方の場所に関する詳細な知識が必要です。
一方、イベントを発生させるコードは、通常、そのイベントをリッスンすることに興味がある人を知りませんし、気にしません。リスナーがいる可能性があります。または、100人または0人のリスナーが存在する可能性があります。これらのリスナーは、イベントが発生した同じプログラムに存在するか、まったく異なるアプリケーションに存在するか、異なるマシンに存在する可能性があります。出版社に関する限り、イベントを生成するとすぐに仕事が完了します。
これまでに私と一緒にいる場合、上記で説明したのは、pub / subパターンの理想的なケースです。残念ながら、現実の世界では物事は必ずしも理想的ではなく、パブリッシャーがイベントを生成し、サブスクライバーが呼び出され、状態の束全体を変更し、コード実行がパブリッシャーに戻るまでに「世界」が持っているように見える場合があります逆さまにされました。この状況は、pub / subパターンが非常に単純な方法で実装されている場合にしばしば発生するため(たとえば、C#のデリゲートまたはイベント、またはCの関数/インターフェイスポインターを使用して) / C ++)。
しかし、この問題は必ずしもpub / subパターンではなく、むしろその実装です。これが、多くのシステムがキューに依存しているため、イベントが発行されると、イベントがキューイングされて後で呼び出されるだけで、パブリッシャーは世界がまだ損なわれていない間に実行を終了することができます。パブリッシャーが作業を完了すると、イベントループ(ディスパッチループとも呼ばれます)がイベントをポップし、サブスクライバーを呼び出します。
return
、try/catch
、break
、continue
、switch
-それらはすべてgoto
。後藤に建てられた制限のさまざまなレベルでの有害がどのようにコードの動作についての考え方に有害であると考えました。