goto 문장의 대체 실현 방식 분석을 깊이 이해하다

2265 단어
언젠가 goto는 얼마나 소인간들에게 그들의 뛰어난 기술을 피워주었는지
얼마 지나지 않아 goto는 또 만악의 우두머리가 되었다
얼마 지나지 않아, goto는 교과서의 예시에만 나타났다
goto를 사용하지 못하게 하는 이유가 너무 많은데, 때때로 우리는 또 goto의 기능을 사용하고 싶은데 어떡하지?
try/catch/finally를 사용하면 goto와 같은 기능을 실현할 수 있다. 두 가지 예를 들어 다음과 같다.
 
  
try {
      // operation one
      if (failed) {
            throw Exception;
      }
      // operation two
      if (failed) {
            throw Exception;
      }
      // operation three
      if (failed) {
           throw Exception;
      }
} catch (Exception e) {
      // do something when cases failed
}

및:
 
  
try {
     // operation one
     if (failed) {
         return;
     }
     // operation two
     if (failed) {
         return;
     }
      // operation three
      if (failed) {
          return;
      }
} finally {
      // do something when failed
}

위의 두 단락은 모두 다음과 같습니다.
 
  
       // operation one
       if (failed) {
           goto when_failed;
       }
       // operation one
       if (failed) {
           goto when_failed;
       }
       // operation one
       if (failed) {
           goto when_failed;
       }
when_failed:
       // do something when failed

이상한 방식으로 폭력적이지만 goto와 같은 기능을 실현하는 데 정확한 도움을 줄 수 있다.리턴과finally를 사용하는 것은 폭력적이지는 않지만 통제하기 어렵다. 리턴 문장과 관련되어 있기 때문에finally 블록이 실행된 후에 실행할 수 있기 때문에 프로그램을 종료하지 않으려면 이상으로 제어하는 것이 낫다.
또한break,continue도 비교적 강한 점프 문장이다. 특히break label과continue label은 한 층의 순환이나 여러 층의 순환을 뛰어넘을 수 있다.그러나 주의해야 할 것은break는 순환문장과 switch문장에서만 사용할 수 있고,continue는 순환문장에서만 사용할 수 있다는 것이다.그래서 그것들의 한계도 크다.
이 작은 예는 goto가 단지 하나의 문장이 아니라 문제를 해결하는 사고방식과 프로그래밍 습관이다. goto에 익숙해진 사람이나 그것을 사용하고 싶은 사람은 goto를 사용하지 않아도 비슷한 goto 논리를 쓸 수 있다는 것을 설명한다.그것의 장점은 해결 방안을 찾아내는 데 더욱 쉽다는 것이다.그것의 결점도 모두가 알고 있다.그러나 우리가 피해야 할 것은 단지 하나의 goto 문장이 아니라 이런'점프식'의 해결 사고방식과 프로그래밍 습관이다.

좋은 웹페이지 즐겨찾기