[if-statement] 중괄호없이 if 문을 사용하는 것은 나쁜 습관입니까? [닫은]

다음과 같은 코드를 보았습니다.

if(statement)
    do this;
else
    do this;

그러나 나는 이것이 더 읽기 쉽다고 생각합니다.

if(statement){
    do this;
}else{
    do this;
}

두 방법이 모두 작동하기 때문에 이것이 단순히 선호하는 문제입니까, 아니면 다른 방법보다 권장되는 방법입니까?



답변

첫 번째 버전의 문제점은 중괄호를 추가하지 않고 if 또는 else 절에 두 번째 명령문을 다시 추가하면 코드가 예상치 못한 재미있는 방식으로 중단된다는 것입니다.

유지 관리 측면에서는 항상 두 번째 양식을 사용하는 것이 더 현명합니다.

편집 : Ned는 의견에서 이것을 지적하지만 여기에 링크 할 가치가 있다고 생각합니다. 이것은 단지 상아탑 가상의 헛소리가 아닙니다 : https://www.imperialviolet.org/2014/02/22/applebug.html


답변

명령문 블록을 남기지 않는 데 따른 한 가지 문제점은 else-ambiguity입니다. 그것은 C에서 영감을 얻은 언어는 들여 쓰기를 무시하므로 이것을 분리 할 방법이 없습니다.

if(one)
    if(two)
        foo();
    else
        bar();

이것으로부터:

if(one)
    if(two)
        foo();
else
    bar();


답변

내 일반적인 패턴은 한 줄에 맞으면 내가 할 것입니다.

if(true) do_something();

else 절이 있거나 실행하려는 코드 true의 길이가 상당히 길면 괄호로 묶습니다.

if(true) {
    do_something_and_pass_arguments_to_it(argument1, argument2, argument3);
}

if(false) {
    do_something();
} else {
    do_something_else();
}

궁극적으로, 그것은 주관적인 스타일과 가독성 문제로 귀결됩니다. 그러나 일반적인 프로그래밍 세계는 두 가지로 나뉘어져 있습니다 (중괄호를 사용하는 언어의 경우). 예외없이 항상 사용하거나 예외적으로 항상 사용하십시오. 나는 후자 그룹의 일부입니다.


답변

내가 사용하는 IDE의 코드 포맷터를 사용하고 있습니다. 다를 수 있지만 기본 설정 / 옵션에서 설정할 수 있습니다.

난이게 좋아:

if (statement)
{
    // comment to denote in words the case
    do this;
    // keep this block simple, if more than 10-15 lines needed, I add a function for it
}
else
{
    do this;
}


답변

내가 따르는 “규칙”은 다음과 같습니다.

“if”문이 무언가를하기 위해 테스트하는 경우 (IE 호출 함수, 변수 구성 등) 중괄호를 사용하십시오.

if($test)
{
    doSomething();
}

어떤 조건에서 어떤 함수가 호출되는지, 프로그램의 흐름이 어디로 가고 있는지 명확히해야하기 때문입니다. 프로그래머가 정확히 어떤 함수가 호출되는지와이 조건에서 어떤 변수가 설정되는지 이해하게하는 것은 프로그램이하는 일을 정확하게 이해하는 데 중요합니다.

루프 또는 함수 내에서 IE 흐름 제어를 수행하기 위해 “if”문이 테스트중인 경우 한 줄을 사용하십시오.

if($test) continue;
if($test) break;
if($test) return;

이 경우 프로그래머에게 중요한 것은 코드를 실행하지 않으려는 예외적 인 경우가 무엇인지 신속하게 발견하는 것입니다. 실행 블록이 아니라 $ test에 모두 포함되어 있습니다.


답변

첫 순간부터 중괄호를 사용하면 이것을 디버깅하지 않아도됩니다.

if (statement)
     do this;
else
     do this;
     do that;


답변

모든 if 문에 간단한 것까지 중괄호를 사용하십시오. 또는 삼항 연산자를 사용하도록 간단한 if 문을 다시 작성하십시오.

if (someFlag) {
 someVar= 'someVal1';
} else {
 someVar= 'someVal2';
}

다음과 같이 훨씬 멋지게 보입니다.

someVar= someFlag ? 'someVal1' : 'someVal2';

그러나 if / else 블록으로 갈 필요가없는 것이 확실하다면 삼항 연산자 만 사용하십시오!