을 goto 's로 만드는 것은 쉽습니다 (f.ex.IL에서 입증 됨). 모두 goto 문에 더 높은 수준의 표현식과 명령문 - 말하자면 - 지원되는 모든 것을 사용하십시오. Java에서.항상 고토를 제거 할 수 있습니까?
또는 원하는 경우 : 내가 찾고있는 것은 goto가 생성되는 방식에 관계없이 항상 작동하는 '다시 쓰기 규칙'입니다.
이것은 주로 이론적 인 질문으로 순수하게 관심 분야로 사용됩니다. 좋은/나쁜 습관이 아닙니다. 내 솔루션을 좋아하지 않아, 하나이 아마 작동하지만
while (true)
{
switch (state) {
case [label]: // here's where all your goto's will be
state = [label];
continue;
default:
// here's the rest of the program.
}
}
내 '공식'질문을 맞는 않습니다 : 내가 생각했습니다
확실한 해결책은 같은 것을 사용하는 것입니다 비트. 하나는, 그것은 추악한 죽은이고, 둘째, 그것은 기본적으로 goto가하는 것과 똑같은 스위치로 goto를 감 쌉니다.
그럼 더 나은 해결책이 있습니까?
업데이트 1
많은 사람들이 질문은 '너무 광범위'라고 생각하는 것 때문에
, 나는 ... 좀 더 정교하게 자바 때문입니다 제가 말씀 드린 이유를 갈거야 Java에는 'goto'문이 없습니다. 내 취미 프로젝트 중 하나로서 C# 코드를 Java로 변환하려고 시도하고있었습니다. Java에서이 제한으로 인해 부분적으로 어려운 것으로 입증되었습니다.저도 그렇게 생각했습니다. f.ex.가 있으면. 오픈 어드레싱 (참고 : http://en.wikipedia.org/wiki/Open_addressing - 참고 1 참조)에서 'remove'메소드의 구현은 예외적 인 경우에 'goto'를 사용하는 것이 편리하지만이 경우에는 'state'변수를 사용하여 다시 작성할 수 있습니다 . 이것은 하나의 예에 불과하며, 디 컴파일을 시도 할 때 톤과 톤의 goto를 생성하는 코드 생성기를 연속 코드에 구현했습니다.
이 문제에 대한 재 작성이 항상 'goto'문을 제거하고 모든 경우에 허용되는지 확실하지 않습니다. 내가 공식적인 '증거'를 찾고있는 것은 아니지만,이 문제에서 제거가 가능하다는 증거는 훌륭 할 것입니다.
그래서 '넓음'에 관해서는, 일반적인 경우를 다시 작성하는 알고리즘이나 접근 방식을 제공하기 위해 '너무 많은 답변'또는 '고토를 다시 쓰는 많은 방법'이 있다고 생각하는 모든 사람들에게 도전합니다. 지금까지 찾은 답변 만 제가 게시 한 답변입니다.
'goto'는 가장자리의 경우 성능을 향상시킬 수있는 해킹입니다 실용적인 관점에서 : 토큰 화기, IL 실행 엔진 및 커널). 어쨌든 결코 바꾸어 놓을 수없는 것은 아닙니다. –
'while ','for' 및 다른 루핑 구조가 내부적으로 goto를 사용한다는 것을 알고 있습니까? 그래서 당신은 루프를 사용하지 않기를 원합니까? switch 문을 피하려고하는 것은 의미가 없습니다. 글쎄, 당신은 다형성을 사용하는 스위치를 리팩터링 할 수 있지만 적어도 하나는 있어야합니다. –
@SriramSakthivel 점프 문을 사용하여 많은 구문을 구현하는 언어가 많이 있지만 개념 상 필요하지는 않습니다. 이러한 구조를 구현하는 다른 방법이 있지만, 주류 프로그래밍 언어에서 일반적으로 사용되지는 않습니다. – Servy