2009-06-03 2 views
5

나는 "스파게티"를 많이 보았으며 단지 스파게티 코드이고 무엇이 이 아니며이 아닌지에 대한 명확한 설명을 원합니다. 그냥 내가하지 않기 때문에.스파게티 PHP의 정의?

PHP에서 참조하는 것이 내가 선택한 언어이므로 도움이됩니다.

+0

복제 : http://stackoverflow.com/questions/195520/what-is-spaghetti-code –

+0

광산에서 PHP 의존적 인 예를 묻고있다. –

답변

9

"스파게티 코드"라는 용어는 PHP에만 해당되는 것이 아니며 모든 프로그래밍 언어에 적용되며 대부분의 언어 (최소한 동일한 패러다임)에서 매우 유사해야합니다. 어쩌면 당신은 이것을 이해할 것이며 PHP에서 예제를 원할 것입니다.

이 주제에 Wikipedia article

꽤 명확한 것 같다

스파게티 코드가 복잡한 을 가지고 있으며, 제어 구조를 얽힌 소스 코드, 많은 GOTOs, 예외를 사용하여 특히 하나의 스레드에 대한 경멸적인 용어 입니다 , 또는 기타 "구조화되지 않은"분기 구조. 프로그램 흐름이 은 스파게티의 그릇처럼 보이기 쉽기 때문에 이름이 지정됩니다. 즉, 뒤틀리고 꼬인 것입니다. 스파게티 코드는 전문가가 아닌 경험이 풍부한 프로그래머와 주기 동안 계속 수정 된 복잡한 프로그램이 포함 된 여러 가지 요인으로 인해 발생할 수 있습니다. 구조화 프로그래밍이 크게 스파이크의 발생을 감소 코드입니다.

이 포럼 스레드는 Top 100 Signs That I Am Writing Spaghetti Code in PHP이며 특히 PHP와 관련되어있어 유용 할 수 있습니다.

4

여기는 spaghetti code의 꽤 괜찮은 정의입니다.

과도하게 복잡하고 구조가 어려우며 따르기가 쉽지 않고 일관성이없고 부작용 (특히 전역 부작용) 또는 일부 조합에 의존하는 코드를 설명하는 데 사용되는 주관적인 용어입니다.

PHP는 대부분의 스크립트 언어와 마찬가지로 느슨하게 입력됩니다. 변수를 사용하기 전에 변수를 선언 할 필요가 없습니다. 많은 변수가 "전역"범위에서 사용되며 암시 적으로 (자동 로딩) 파일을 포함하는 규정이 있습니다. 이들 중 어느 것도 나쁜 기능이지만, 심하게 사용되어 스파게티 코드로 쉽게 이어질 수 있습니다.

+0

+1 변수 및 환경 조건. 그것은 나에게 파스타의 큰 사발처럼 항상 보인다. – person27

11

스파게티 코드는 다른 개발자가 작성한 것입니다. 귀하의 코드는 결코 스파게티 코드가 아닙니다.

+0

사실입니다. : D –

+0

정말이 답변이 어떻게 도움이되는지 모르겠습니다! – Noldorin

+4

@ Noldorin 재미 없어. –

0

스파게티 코드의 classical definition은 "구조화되지 않은 분기의 사용으로 인해 제어 흐름이 따르기 어려운 코드"입니다. PHP 이후로 1970 년대부터 발명 된 대부분의 언어가 GOTO를 지원하지 않기 때문에 이론적으로는 스파게티 코드를 작성할 수 없습니다. (업데이트 : 5.3 이후 PHP는 goto 문을 가지고 있지만 여전히 파괴적인 잠재력은 제한적입니다)

그러나 전역 변수를 자유롭게 사용하는 긴 스크립트와 함수로 좋은 근사값을 얻을 수 있습니다. 보너스 포인트가 deeply nested if/elseif/else cascades이고 형식이 잘못되었습니다. HTML을 생성하는 HTML, JavaScript, PHP, PHP, 그리고 PHP which generates JavaScript which generates HTML을 추가하여 코드를 작성한 사람조차도 누구도 코드를 이해할 수 없도록해야합니다.

+0

5.3.0 현재 PHP에는 Gotos가 포함되어 있습니다. – mjsa

+0

@mjsa : 음, 적어도 제한된 것입니다. –

0

잘 작성된 코드에서는 처음부터 끝까지뿐만 아니라 끝에서부터 시작까지 흐름을 명확하게 따라갈 수 있어야합니다 (치명적인 오류 조건이없는 경우 핸들러에 역 추적 출력이 있어야 함). 모든 기능에 대해 하나의 출입구 규칙을 따르십시오.

스파게티 코드를 피하는 한 가지 방법은 return 문이 함수에 작성한 마지막 내용이고 그보다 더 일찍 돌아올 수 없는지 확인하는 것입니다.

함수가 예기치 않은 값을 반환하면 코드를 정리하면 return 문에서 시작하여 뒤로 이동하여 값이있는 곳을 확인할 수 있습니다. 그러나 코드가 스파게티라면 약 절반의 시간 동안 함수의 중간에 묻혀있는 두 번째 return 문을 우연히 발견 할 때까지 함수가 그 값을 반환하는 방법에 대해 의아하게 시간을 낭비하게됩니다.

저는 Cletus와 Andomar의 주장에 동의하지 않습니다. 이는 모두 주관적입니다. 함수의 중간에 return 문이 명확히 스파게티 코드입니다.

0

마이클 Borgwardt, 어떤 이유로 고토를 들어 는 PHP 5.3에 추가되었습니다 http://us2.php.net/goto

나는이 추가 된 이유 좋은 이유를 보지 못했다. 나는 그것이 유용하다고 생각하지 않는다, 개인적으로

+2

나중에 답을 얻을 수 있도록 각 답변 아래에 '의견 추가'를 클릭하면 처음 응답 내용이없는 새로운 답변을 추가하는 대신 해당 답변에 특별히 답장 할 수 있습니다. –

+2

나는 시도했다. 그러나 내가 50의 평판을 말해야한다고 말했다. –

+0

나는 처음에 대답을 보았을 때와 똑같은 일을 지적했을뿐 아니라 같은 이유로 말할 수도 없었습니다. 제 생각에는 대답을 남길 수 있다는 것은 매우 어리석은 생각입니다.하지만 대답은 모두 평등 한 권한 임에도 불구하고 답을 남길 수는 없습니다. 또한 처음 시작할 때 점수를 얻는 것은 매우 어렵습니다. :) – Gerry