2012-09-17 3 views
2

, 따라서 이전보다 읽을 수 없습니다 아직도 서면단락이 가독성

if ((last_search == NULL) || (total_results != 0))

에 해당 있고 난 누군가에 의해 이상을 사용하는 것이 좋습니다, 그러나? 또한 컴파일러가 중복 last_search != NULL을 최적화하지 않을까요?

+0

아니요, 예. 코드가 적어집니다. –

+0

사이드 노트 : 차라리 일정하게 왼쪽으로 움직일 것입니다.'(NULL == last_search) ... ', – a1ex07

+0

@ a1ex07 저는 개인적 취향이라고 알고 있습니다. (최근에 이런 추세를 보았습니다.) 왼쪽에 상수를 두는 것은 저에게 읽기가 더 어렵습니다. 나는 "NULL이 ...과 같다면 ..."이라고 읽었습니다. NULL은 상수이기 때문에 바뀌지 않습니다. "last_search가 ...와 같으면 ..."은 훨씬 자연스럽고 이해하기 쉬운 독서입니다. – twalberg

답변

10

이것은 주관적이지만 아니요, 첫 번째 변형은 더 읽을 것이 없으므로 더 읽을 수 없습니다. 가장 읽을 수있는 코드 (그리고 가장 작은 버그!)는 존재하지 않습니다. 한 번에 3 개 또는 4 개의 조건을 확인하려면 어떻게 될지 생각하십시오.

다른 반례가 있습니다. 다음과 같은 코드를 작성 하시겠습니까?

if (number < 0) { 
} 
else if(number >= 0) { 
    // why not just "else"? 
} 

컴파일러는 중복 호출을 최적화하지만 성능 저하를 취소해도 가독성 저하는 도움이되지 않습니다.

+1

+1. 'number> = 0'(예 : 매우 긴 if 블록 이후)을 강조하고 싶다면 elseif의 if 부분을 주석으로 옮깁니다. – Bergi

5

아니요. 두 번째 것은 훨씬 더 읽기 쉽습니다. 왜 컴파일러가 그것을 최적화 할 것인가에 관계없이 중복 체크를 계속할까요?

첫 번째 버전은 거기에 도착하기 때문에 last_search하지 NULL 있음을 알려줍니다,하지만 당신은 첫 번째 조건에서 그 말할 수없는 경우 (last_search == NULL 실패), 당신은 아마 가독성보다 큰 문제를 가지고있다.

+0

+1이 답변은 Jon 's 그럼에도 불구하고 그는 더 많은 기권을 가지고 있기 때문에 업보를 얻지 못했습니다. –

+1

@ H2CO3은 공평합니다. 나는 그에게 "가장 가독성있는 코드는 존재하지 않습니다."라고지었습니다. :) –

+0

@ H2CO3 : 질문에 대답하고 Jon Skeet이 같은 일을 할 때까지 기다려주세요.btw, Luchian이 처음 이었기 때문에 나는 또한 이것을 upvoted. – Jon

1

불필요한 비교를 사용한다는 사실은 읽을 수 없도록 만드는 단락 회로 평가 일뿐만 아니라 불필요한 비교를 사용하는 것도 사실입니다.

if (!last_search || total_results) 

은 제안한 것보다 훨씬 읽기 쉽습니다.

+0

이 문제는 'NULL'의 값이 '거짓'이 아닌 경우 어떻게됩니까? 'NULL'은 상수 일뿐입니다. (어쨌든 - 그렇지 않다면 더 많은 문제가 발생합니다.) 사실, 거짓으로 평가되지 않는 무언가와 실제로 일치 할 수 있습니다. "if ((last_search == NULL) || total_results)" – AJMansfield

+0

@AJMansfield'NULL'은 항상 false로 평가됩니다. 그 기본 표현이 모두 0이 아닐지라도. – Dave

+0

논리 조건을 얻기위한 포인터 값의 변환은 표준에 의해 잘 정의되어 있습니다. 포인터가 null 포인터 인 경우'false'입니다. 표준이 제공하는 도구 만 사용하면됩니다. –

관련 문제