2017-03-03 1 views
-1

P1, P2, Q1Q2이 술어라고 가정합니다. 더 간결하기 때문에 내가 처음 일을 선호이 중첩 된 조건부 분기를 명확한 방법으로 작성하는 방법은 무엇입니까?

if (P1(x) ? P2(y) : true) && (Q1(z) ? Q2(w) : true) 
    do-something 

if (P1(x) && Q1(z)) 
    if (P2(y) && Q2(w)) 
     do-something 

if (P1(x) && ! Q1(z)) 
    if (P2(y)) 
     do-something 

if (! P1(x) && Q1(z)) 
    if (Q2(w)) 
     do-something 

if (! P1(x) && ! Q1(z)) 
    do-something 

:

나는 같은 일의 두 가지 구현을 마련. 그러나 나는 무엇인가 놓치 느냐?

위의 두 가지 방법보다 나은 점이 있습니까? 술어 R1P1P2 유사하게 R2 작업 쌍 이상이있는 경우

, 첫 번째 방법은 좋은 또는 가장 좋은 방법은?

P2Q2을 기능으로 항상 구현하는 것이 더 좋습니까? 기능으로 구현되지 않으면 어떻게 될까요?

+3

** 기능 ** 코드의 순열은 [Code Review] (http://codereview.stackexchange.com/)에 더 적합하다고 생각됩니다. – Claies

답변

2

경우 ((! P1 (X) || P2 (Y)) & & (! Q1 (z) ||()) w Q2) 뭔가이 가능한 대한 질문 것으로 보인다 때문에

+0

'('. 그리고 실제로는 ** 명확한 주관적인 평가입니다. –

+0

어느 쪽이 더 맑습니까? – vadim

+0

@PeterDuniho 분명히,이 표현식을 쓰는 가장 좋은 방법은 명백합니다 ** 논리를 분명히 보여줍니다 ** if/else를 사용한 동등한 논리 '또한 받아 들일 수 있으며'P2 '를 호출 할 필요가 있다면 예를 들어'y'를 계산할 필요가 있다면 실제로는 언젠가는 필요할 수도 있습니다. 그리고 언젠가는, 그것은 목적을 디버깅 (특정 경우에 중단 점을 설정하는 것이 더 쉽습니다) 또는식이 매우 긴 경우 코드를 읽기 쉽게 만드는 데 유용 할 수 있습니다. – Phil1970

관련 문제