2010-04-29 6 views
1

실행할 일련의 기능이 있습니다. 사례 A : 서로 의존하지 않습니다. 어느 것이 더 낫습니까?이것들 중 더 나은 방법은 무엇입니까?

function main() { 
    a(); 
    b(); 
    c(); 
} 

또는

function main() { 
    a(); 
} 

function a() { 
    ... 
    b(); 
} 

function b() { 
    ... 
    c(); 
} 

사례 B : 그들은 이전의 성공적인 완료에 따라 않습니다.

function main() { 
    if (a()) 
    if (b()) 
     c(); 
} 

또는

function main() { 
    if (!a()) return false; 
    if (!b()) return false; 
    c(); 
} 

또는

function main() { 
    a(); 
} 

function a() { 
    ... // maybe return false 
    b(); 
} 

function b() { 
    ... // maybe return false 
    c(); 
} 

향상은 물론, 더 유지 보수 및 따라하기 쉬운 것을 의미한다.

+0

나는 대답으로 여러 가지 이상의 의견을 얻을 수 있다고 생각하지 않습니다. – danben

+0

나는 자신을위한 결정을 내릴 수 있도록 정당화 된 의견을 원합니다. 지금 나는 모순된다. –

답변

14

사례 A : 1.
추론 : 함수 중 어느 것도 서로 의존하지 않으므로 main에서 순서대로 호출하면 논리적 인 일련의 이벤트가 표시됩니다. 각 함수의 끝에서 다음 함수를 호출하는 대안은 스파게티 코드처럼 보이며, 프로그램을 읽는 누군가가 따르기 어렵습니다.

사례 B : 위의 어느 것도 없습니다.

function main() { 
    return a() && b() && c(); 
} 

추론 : 그것은 당신이 정말 당신이 단지 기능 중 하나가 특정 값을 반환하는 경우 일찍 헤어지고 싶어, 반환 값에 대한 상관 없어 보인다. 이 모든 함수의 "anded"결과를 반환 할 수 있으며,이 중 하나라도 false를 반환하면 코드가 일찍 나옵니다. 따라서 false가 반환되면 실행되지 않습니다. 모두 한 줄에 배치하는 것은 읽기 쉽고 간결하게 서로 의존적이라는 것을 보여줍니다.

+1

+1 우아함 –

0

사례 A : 첫 번째 옵션

사례 B : 두 번째 옵션

2

사례 A : 두 번째 옵션을 사용하는 경우

, 당신은 훨씬 더 어려운 때문에 다시 사용할 수 있도록 첫 번째 옵션 당신은 b와 c를 자동으로 잡아 당깁니다.

사례 b : 의존성 - a, b 및 c는 부울 값을 자연스럽게 반환합니까, 아니면 다른 값을 반환합니까? 나는 여전히 b와 b를 호출하지 않을 것이다. 왜냐하면 불필요한 의존성을 소개하기 때문이다. 반환 값이 의미가있는 경우 옵션 2로 기울어집니다. 중첩을 줄이는 것이 좋습니다.

1

우선 대답은 코드가있는 컨텍스트의 여러 측면에 따라 달라집니다. 아무도 없습니다. 오른쪽 대답은 '다릅니다'입니다.

그러나 액면 복용 사례 A :

옵션 1 알고리즘의 상부 레벨도를 나타낸다.

옵션 2가 숨기고 B & C에 대한 호출이 숨겨집니다. C가 호출 된 것을 발견하는 것은 많은 작업 일 수 있습니다. 또한 추가 방법을 호출하는 경우 A & B를 격리하여 테스트하는 것이 더 어렵습니다. Main은 A, B, C가 조롱 될 수있는 경우 항상 테스트 할 수 있습니다.

사례 B : 메소드에서 이탈 점 1 개와 종료점 2 개 이상인 인수를 갖는 것이 일반적입니다. 때로는 여러 개의 종료점으로 코드를 단순하게 만들 수있어 유지 관리가 쉽고, 어떤 영향이 어떤 영향을 미치는지, 반환이 발생하는지 여부가 명확하지 않아서 유지 관리가 어려울 수 있습니다.

옵션 1은 알고리즘을 명시 적으로 보여 주지만 여러 중첩 된 경우 신속하게 처리 할 수 ​​없습니다. 이런 종류의 경우, 나는 분명히 옵션 2 또는 영리한 부울 변형 (yes, corey)을 가졌을 것입니다.

옵션 3은 단순히 나에게 무딘 것처럼 보입니다.

관련 문제