Development Tip

PHP의 GOTO가 악한가요?

yourdevel 2020. 10. 30. 21:07
반응형

PHP의 GOTO가 악한가요?


최근에 PHP 5.3이 GOTO. 모두가 그것이 무엇을하는지 압니다. 그러나 이것은 정확히 전통적인 GOTO것이 아니라 점프 레이블 일뿐입니다. 이것이 GOTO악하고 나쁜 코드를 암시 하는지 아는 것이 흥미 롭 습니까?


어셈블러에서 프로그래밍하지 않는 한 GOTO는 항상 비행기의 구명 조끼와 같은 방식으로 취급되어야합니다. 사용할 수있는 것이 좋지만 사용해야하는 경우 큰 문제가 있음을 의미합니다.


아무도 이것을 게시하지 않았다는 것을 믿을 수 없습니다 :)

xkcd-이동

물론 PHP는 컴파일되지 않았습니다 ... 랩터가 웹 사이트를 방문 할 때마다 당신을 쫓아 갈까요?


코드의 잘못된 구조는 사용하는 제어 구조에 관계없이 악합니다.

저는 개인적으로 프로그램의 흐름을 "제어 변수"로 명확하게하는 goto와 코드에서 동일한 분기를 간접적으로 유발하는 중첩 된 "if"를 선호합니다.

따라서 두 가지 버전 (GOTO 포함 및 제외)을 작성하고 어느 것이 더 이해하기 쉬운 지 확인하십시오. 그러면 선택이 쉽습니다.


나는 이것이 PHP 매뉴얼 페이지 에서 가장 중요한 부분이고 여기에 빠졌다고 생각합니다.

이것은 완전한 무제한 goto아닙니다 . 대상 레이블은 동일한 파일 및 컨텍스트 내에 있어야합니다. 즉 , 함수 또는 메서드에서 뛰어 내릴 수 없으며 . 또한 어떤 종류의 루프 나 스위치 구조로도 뛰어들 수 없습니다. 당신은 이것들에서 뛰어 내릴 수 있고, 일반적인 용도는 다단계 휴식 대신에 goto를 사용하는 것입니다.

IMHO 이것은 예전의 BASIC 스타일 gotos와 매우 다릅니다 .


저는 (현재) 소수에 속하지만 PHP의 goto 구조에 대한 제한이 매우 유익한 도구를 만든다고 생각합니다.

http://adamjonrichardson.com/2012/02/06/long-live-the-goto-statement/

저는 실제로 화살표 코드 (깊게 중첩 된 조건문)의 예를 살펴보고 한 버전에서는 표준 관행 (보호 절, 그룹화 조건, 함수 추출)을 사용하고 다른 버전에서는 goto 기반 버전을 사용하여 리팩토링합니다. goto 기반 리팩토링.


총은 사악합니까? 둘 다 선이나 악을 위해 사용할 수 있습니다. goto없이 좋은 코드를 작성하는 것이 더 쉬웠다 고 말하고 싶습니다.


주어진 상황에서 코드를 더 읽기 쉽게 만들 수있는 모든 언어 기능은 좋은 것입니다. GOTO는 그러한 상황이 거의없고 그 사이에있는 경우에도 그러한 언어 기능 중 하나입니다. 열악한 프로그래머가 관리 할 수없는 코드를 작성하는 것을 가능하게하는 구문을 금지한다면 우리의 작업은 훨씬 더 어려워 질 것입니다.


소프트웨어 엔지니어로서 저는 주로 "메인 프레임"과 "대기업 서버"에서 작업합니다 ... 그리고 일상적인 언어 (기본 코드의 95 % 중 하나를 의미)는 GOTO를 광범위하게 사용하는 Cobol입니다.

이 사용법이 코드가 나쁘다는 것을 의미하지는 않습니다. 이것은 프로그램이 작성된 순간에이 도구 (GOTO)가 올바른 도구라는 것을 의미합니다.

Kaitsuli의 질문에 답하기 위해 PHP 스크립트를 작성할 때 유용한 도구가 될 수 있다고 생각합니다. 반면에 지금까지 거의 10 년 동안 스크립트 없이도 많은 스크립트가 완성되었습니다. 또한 더 많은 객체 지향 기능으로 PHP의 진화에 어긋납니다.

IMHO, 코드가 생성되는 것은 좋은 것도 나쁜 것도 아닙니다. 좋은 프로그램은 여전히 ​​좋을 것이고 "공포 프로그램"은 더 나빠질 것입니다 ... 유일한 질문은 "왜 GOTO를 10 년 동안 추가 할 필요가 없다는 것을 증명 한 후? ".


GOTO는 구조화되지 않은 코드를 작성할 수 있기 때문에 일반적으로 악합니다. 일반적인 루프를 사용하면 구조화되어 있기 때문에 따라하기 쉬운 좋은 구조화 코드를 작성할 수 있습니다.

여기에서 저기로 점프하는 구조화되지 않은 코드가 있으면 GOTO 문에서 나오는 악을 방금 발견했습니다. 거의 항상 그것을 피하는 것이 좋습니다. 아마도 100.000 줄에 한 번씩 GOTO 문장이 A LOT를 단순화하는 곳이있을 수 있습니다. 따라서 코드가 나쁘지는 않지만 확실하지 않은 경우 GOTO를 피해야합니다.

도움이 되었기를 바랍니다.

편집 : 글쎄, 여기에 내 의견을 추가하기 위해 구조화되지 않은 코드를 만들 수 있고 내가 생각할 때 악한 것으로 간주되지 않는 다른 지침이 있습니다.

예를 들어 함수 중간에있는 반환은 끝까지 GOTO이므로 피하고 각 함수의 끝에서 하나의 반환 만 사용합니다.

Vb.Net과 같은 다른 언어 (어쩌면 다른 언어도 가능)는 Exit For, Exit While, breaks 및 코드 구조를 해제하는 이와 같은 것들을 허용하므로 피해야한다고 생각합니다.


때로는 (내 말은 0.01 %의 경우) 긴 스크립트가 있고 일부 블록을 테스트하려는 경우와 같이 유용합니다. 하지만 최종 스크립트에 보관하지 마십시오.


CLI 모드에서 작업하기위한 스크립트를 작성할 때 GOTO를 사용했습니다. 그것은 내 생명을 구합니다.

참고 URL : https://stackoverflow.com/questions/1900017/is-goto-in-php-evil

반응형