그렇습니다, 당신은 확실히 무언가를 놓치고 있습니다 . 일반적으로 Gotos는 단방향 제어 전송을 수행하는 데 사용됩니다.
그러나 이벤트는 그렇게하지 않습니다. 코드가 이벤트를 발생 시키면 이벤트가 게시 (또는 처리, 대기, 실행 등)되면 코드 실행이 이벤트를 생성 한 코드의 다음 줄에서 다시 시작된다는 것을 잘 알고 있습니다.
goto를 사용하면 해당 명령문을 호출하는 코드와 수신 측의 코드를 매우 밀접하게 결합 할 수 있습니다. 개발자는 goto를 사용하기 위해 두 곳을 모두 잘 알고 있어야합니다.
반면, 이벤트를 발생시키는 코드는 일반적으로 해당 이벤트에 관심이있는 사람을 알거나 신경 쓰지 않습니다. 청취자 가 있을 수 있습니다. 또는 100 개의 리스너 또는 0이있을 수 있습니다. 해당 리스너는 이벤트가 발생한 동일한 프로그램에 있거나 완전히 다른 응용 프로그램에 있거나 다른 시스템에있을 수 있습니다. 출판사에 관한 한, 그가 일을 마치는 사건을 발생시키는 즉시.
지금까지 나와 함께 있다면, 위에서 설명한 것은 펍 / 서브 패턴의 이상적인 경우입니다. 불행히도 현실 세계는 항상 이상적이지는 않으며 게시자가 이벤트를 생성하고, 구독자가 호출되고, 상태가 전체적으로 변경되며, 코드 실행이 게시자에게 다시 반환되는 경우가 있습니다. 거꾸로 설정되었습니다. pub / sub 패턴이 매우 간단한 방식으로 구현 될 때 (예 : C #에서 델리게이트 또는 이벤트 사용, C에서 함수 / 인터페이스 포인터 사용) 이러한 조건이 자주 발생하기 때문에 과거에이 문제가 발생했다고 확신합니다. / C ++).
그러나이 문제는 반드시 펍 / 서브 패턴이 아니라 구현입니다. 그렇기 때문에 많은 시스템이 큐에 의존하여 이벤트가 게시 될 때 이벤트가 큐에 대기되어 나중에 호출되어 월드가 여전히 그대로있는 동안 실행을 완료 할 수있는 기회를 제공합니다. 게시자가 작업을 완료하면 이벤트 루프 (일명 디스패치 루프)가 이벤트를 발생시키고 구독자를 호출합니다.
return
,try/catch
,break
,continue
,switch
- 그는 모든goto
. 고토 내장 제한의 다양한 수준의 유해가 어떻게 코드를 작품에 대한 생각에 유해한 것으로 간주.