나는이 모든 것의 젊은 whippersnappers에 동의하지 않을 것이다.
무언가 또는 방법의 중간에 반환을 사용하는 것은 아주 나쁜 관행이다. 그것은 거의 40 년 전에 Edsger W. Dijkstra가 잘 알려진 " GOTO 선언문은 유해하다고 간주되며 Dahl, Dijkstra 및 Hoare의 "Structured Programming"에서 계속됩니다.
기본 규칙은 모든 제어 구조와 모든 모듈에 정확히 하나의 항목과 하나의 exit가 있어야한다는 것입니다. 모듈 중간에 명시 적으로 반환하면 해당 규칙이 적용되지 않으므로 프로그램 상태에 대해 추론하기가 훨씬 어려워지며 프로그램이 올바른지 아닌지를 말하기가 훨씬 어려워집니다 (이는 훨씬 더 강력한 속성입니다 "그것이 효과가있는 것처럼 보이는지 아닌지"보다).
"GOTO 성명은 유해한 것으로 간주됩니다"및 "구조화 된 프로그래밍"은 1970 년대의 "구조화 된 프로그래밍"혁명을 시작했습니다.이 두 부분은 오늘날의 if-then-else, while-do 및 다른 명시 적 제어 구조가있는 이유와 고급 언어의 GOTO 문이 멸종 위기에 처한 종 목록에있는 이유입니다. (내 개인 의견으로는 멸종 종 목록에 있어야한다는 것입니다.)
첫 번째 시도에서 수락 테스트를 통과 한 첫 번째 군용 소프트웨어 인 메시지 흐름 변조기는 편차없이 사용하는 것이 중요합니다 , waivers, 또는 "그래,하지만"구어체는 GOTO 문장조차도 사용하지 않는 언어로 작성되었습니다.
Nicklaus Wirth가 Oberon 프로그래밍 언어의 최신 버전 인 Oberon-07에서 RETURN 문의 의미를 변경하여 입력 된 프로 시저 (즉, 함수) 선언의 후미 조각으로 만들었습니다. 함수의 본문에있는 실행 가능 명령문이 아닙니다. 변경에 대한 그의 설명에 따르면 이전 양식 인 WAS이 구조화 프로그래밍의 한쪽 출입 금지 원칙을 위반했기 때문에 정확하게 수행했다고합니다.
약 : 무효 DoThis() {if (isValid) DoThat(); } – Dscoduc
코드를 상상해보십시오. 왜? 바로 거기에있다! :-D – STW
이것은 좋은 질문입니다, 저는 항상 좋은 결과를 사용하는 것이 좋다고 생각합니다; 메서드 또는 함수를 종료합니다. 특히 여러 IQueryable 결과가있는 LINQ 데이터 마이닝 메서드에서 모두 서로 의존합니다. 그들 중 하나가 결과가 없다면 경고하고 종료하십시오. –
Cheung