문제

다음 예와 같이 괄호 없이 단일 결정과 동작을 지원하는 언어의 경우:

if (var == true)
    doSomething();

이것을 작성하는 데 선호되는 방법은 무엇입니까?대괄호는 항상 사용해야 합니까, 아니면 개별 개발자의 선호에 따라 그 사용법을 남겨 두어야 합니까?또한 이 방법은 다음 예와 같이 코드 블록의 크기에 따라 달라지나요?

if (var == 1)
    doSomething(1);
else if (var > 1 && var < 10)
    doSomething(2);
else
{
    validate(var);
    doSomething(var);
}
도움이 되었습니까?

해결책

사실 정답은 없습니다.이것이 회사 내 코딩 표준의 목적입니다.회사 전체에서 일관성을 유지할 수 있다면 읽기 쉬울 것입니다.나는 개인적으로 좋아한다

if ( a == b)    {
    doSomething();
}
else {
    doSomething();
}

그러나 이것은 성전이다.

다른 팁

나는 추천한다

if(a==b)
{
    doSomething();
}

왜냐하면 성공 조건에 두 번째 명령문을 추가할 때 중괄호를 추가하는 것을 기억하려고 노력하는 것보다 미리 수행하는 것이 훨씬 쉽다는 것을 알았기 때문입니다.

if(a==b)
    doSomething();
    doSomethingElse();

와는 매우 다르다

if(a==b)
{
    doSomething();
    doSomethingElse();
}

보다 조엘의 기사 자세한 내용은

나는 항상 교정기를 사용하는 경향이 있습니다.다음과 같이 시작한 부분에서 미묘한 버그가 발생할 수 있습니다.

if(something)
 DoOneThing();
else
  DoItDifferently();

그런 다음 다른 작업을 추가하기로 결정합니다. else 절을 작성하고 중괄호로 묶는 것을 잊어버렸습니다.

if(something)
 DoOneThing();
else
  DoItDifferently();
  AlwaysGetsCalled(); 

AlwaysGetsCalled() 항상 전화를 받을 것이고, 새벽 3시에 거기 앉아 코드가 왜 이상하게 행동하는지 궁금해한다면, 그런 일이 꽤 오랫동안 당신을 피할 수 있습니다.이런 이유로 나는 항상 교정기를 사용합니다.

내가 선호하는 것은 일관성을 유지하는 것입니다. 예를 들어 한 블록에 대괄호를 사용하는 경우 단 하나의 명령문에도 전체적으로 대괄호를 사용하십시오.

if (cond1)
{
   SomeOperation();
   Another();
}
elseif (cond2)
{
   DoSomething();
}
else
{
   DoNothing();
   DoAnother();
}

하지만 라이너가 하나만 있는 경우:

if (cond1)
    DoFirst();
elseif (cond2)
    DoSecond();
else
    DoElse();

그렇게 하면 더 깨끗해 보이지만(더미 메서드 이름이 마음에 들지 않는다면;) 그게 바로 나입니다.

이는 루프 구성 등에 적용됩니다.

foreach (var s as Something)
    if (s == someCondition)
        yield return SomeMethod(s);

또한 이는 .NET에 더 적합할 수 있는 규칙이라는 점도 고려해야 합니다(Java peepz는 if와 같은 줄에 첫 번째 중괄호를 사용하는 것을 좋아합니다).

경험이 부족해서라고 생각하지만, 제가 7년 동안 코드 몽키로 일하는 동안 절대 실제로 중괄호가 없는 블록에 코드를 추가할 때 중괄호를 추가하지 않는 실수를 하는 사람을 본 적이 있습니다.바로 그거야 타임스.

그리고 재치 있는 말을 하기 전에는, 그 이유는 "모든 사람이 항상 중괄호를 사용한다"는 것이 아니었습니다.

그래서 솔직한 질문입니다. 저는 단지 반대표 대신에 실제 답변을 받고 싶습니다.실제로 그런 일이 일어나나요?

(편집하다:나는 조금 더 명확히 하기 위해 아웃소싱에 대한 공포 이야기를 충분히 들었습니다.실제로 그런 일이 일어난 적이 있나요? 유능한 프로그래머?)

일관성을 유지하는 한 실제로는 중요하지 않습니다.

단일 진술 내에서 동일성을 요구하는 경향이 있는 것 같습니다.한 가지에 대괄호가 있으면 모든 곳에 대괄호가 있습니다.Linux 커널 코딩 표준에서는 이를 의무화합니다.

강력하게 옹호하겠습니다 언제나 선택 사항인 경우에도 중괄호를 사용합니다.왜?다음 C++ 코드 덩어리를 살펴보세요.

if (var == 1)
  doSomething();
doSomethingElse();

이제 실제로 충분히 주의를 기울이지 않고 (var == 1)인 경우 추가 작업이 필요하다고 판단하는 누군가가 와서 다음과 같이 합니다.

if (var == 1)
  doSomething();
  doSomethingExtra();
doSomethingElse();

모두 여전히 아름답게 들여쓰기되어 있지만 의도한 대로 작동하지 않습니다.

항상 중괄호를 사용하면 이런 종류의 버그를 피할 가능성이 더 높습니다.

나는 개인적으로 Code Complete의 McConnell의 설명에 동의합니다.

가능할 때마다 사용하십시오.코드의 가독성을 높이고 발생할 수 있는 혼란을 거의 제거합니다.

하지만 더 중요한 것이 하나 있습니다....일관성.어떤 스타일을 사용하든 항상 같은 방식으로 사용하세요.

다음과 같은 글을 쓰기 시작하세요:


If A == true
   FunctA();

If B == "Test"
{
   FunctB();
}

당신은 컴파일러가 당신이 하려는 일을 이해하지 못하고 찾기 어려운 이상한 버그를 찾게 될 것입니다.

기본적으로 매번 쓰기 편한 것을 찾아서 고수하세요.나는 가능한 한 블록 구분 기호('{', '}')를 사용하는 것이 좋다고 믿습니다.

나는 다른 질문을 시작하고 싶지 않지만, 당신의 정신적 주스가 흐르도록 언급하고 싶은 것과 관련된 것이 있습니다.하나는 브래킷을 사용하기로 결정한 것입니다.오프닝 브라켓은 어디에 두나요?진술과 같은 줄 또는 그 아래.들여쓰기된 괄호인지 아닌지?


If A == false {
  //calls and whatnot
}
//or
If B == "BlaBla"
{
  //calls and whatnot
}
//or
If C == B
  {
  //calls and whatnot
  }

이것은 새로운 질문이므로 대답하지 마십시오.이에 관심이 있으면 귀하의 의견에 새로운 질문을 열겠습니다.

C에서 필요한 것처럼 변수를 해제하기 전에 NULL인지 확인하는 경우를 제외하고는 항상 대괄호를 사용했습니다.

이 경우 다음과 같이 모든 내용을 한 줄에 유지하여 단일 명령문임을 분명히 합니다.

if (aString) free(aString);

위의 진술을 작성하는 데에는 옳고 그른 방법이 없습니다.허용되는 코딩이 많이 있습니다. 스타일.그러나 저는 전체 프로젝트에 걸쳐 코딩 스타일을 일관성 있게 유지하는 것을 선호합니다.즉.프로젝트가 K&R 스타일을 사용하는 경우 K&R을 사용해야 합니다.

Ruby는 토론에서 한 가지 문제를 훌륭하게 제거했습니다.단일 라이너의 표준은 다음과 같습니다.

do_something if (a == b)

여러 줄의 경우:

if (a == b)
  do_something
  do_something_else
end

이렇게 하면 한 줄로 된 명령문을 간결하게 작성할 수 있지만 한 줄에서 여러 줄로 이동하는 경우 명령문을 재구성해야 합니다.

이것은 (아직) Java나 다른 많은 언어인 AFAIK에서는 사용할 수 없습니다.

다른 사람들이 언급했듯이 중괄호 없이 두 줄로 if 문을 사용하면 혼란을 초래할 수 있습니다.

if (a == b)
    DoSomething();
    DoSomethingElse(); <-- outside if statement

그래서 가독성을 해치지 않으면서 한 줄에 배치합니다.

if (a == b) DoSomething();

그 외의 경우에는 항상 교정기를 사용합니다.

삼항 연산자는 약간 다릅니다.대부분의 경우 나는 한 줄로 작업을 수행합니다.

var c = (a == b) ? DoSomething() : DoSomethingElse();

그러나 때때로 진술은 기능 호출 또는 람다 표현식으로 한 줄 진술을 시각적으로 구문 분석하기 어렵게 만들었으므로 다음과 같은 선호합니다.

var c = (a == b)
    ? AReallyReallyLongFunctionName()
    : AnotherReallyReallyLongFunctionOrStatement();

if/else 블록보다 훨씬 더 간결하지만 무슨 일이 일어나고 있는지 쉽게 알 수 있습니다.

썬의 Java 프로그래밍 언어에 대한 코드 규칙 가지다 이것 말하다:

IF-ELSE 클래스의 진술에는 다음 양식이 있어야합니다.

if (condition) {
    statements;
}

if (condition) {
    statements;
} else {
    statements;
}

if (condition) {
    statements;
} else if (condition) {
    statements;
} else {
    statements;
}

우리 상사는 그것이 단 하나의 명령문이더라도 결정문 뒤에 { }를 붙이도록 합니다.두 줄을 추가하는 것은 정말 짜증나는 일입니다.유일한 예외는 삼항 연산자입니다.

코드 모니터를 1200x1600의 세로 방향으로 두는 것이 좋은 것 같습니다.

나는 선호한다

if (cond)
   {
   //statement
   }

단 하나의 진술만으로도.무언가를 한 번 작성하려고 했고, 그것이 작동하는지 의심하지 않았으며, 다른 코더가 해당 코드를 볼 계획이 없었다면 계속해서 원하는 형식을 사용하십시오.그러나 추가 브라케팅으로 인해 실제로 드는 비용은 얼마입니까?이 게시물을 작성하는 데 걸리는 시간보다 1년이 더 짧습니다.

예, 저는 괄호를 블록 수준까지 들여쓰는 것을 좋아합니다.

파이썬은 들여쓰기가 블록을 정의한다는 점에서 좋습니다.그런 언어에서는 문제가 문제입니다.

나는 그 기사에 관한 Joel Spolsky의 의견에 동의하는 경향이 있습니다.잘못된 코드를 잘못된 것처럼 보이게 만들기) 다음 코드 예제를 사용하면 다음과 같습니다.

if (i != 0)
bar(i);
foo(i);

Foo는 이제 무조건적입니다.정말 나쁘다!

나는 항상 결정문에 대괄호를 사용합니다.이는 코드 유지 관리에 도움이 되며 코드에 버그가 발생할 가능성이 줄어듭니다.

저는 모든 문장 주위에 중괄호를 사용합니다. 문장 중 적어도 하나가 필요할 경우에만요.

Perl에서는 간단한 테스트를 수행하는 경우 다음 형식으로 작성하게 됩니다.

do_something if condition;

do_something unless condition;

서브루틴 시작 시 인수를 확인하는 데 정말 유용할 수 있습니다.

sub test{
  my($self,@args) = @_;

  return undef unless defined $self;

  # rest of code goes here

}

황금률은 기존 프로젝트에서 작업할 때 해당 코딩 표준을 따르는 것입니다.

집에 있을 때는 두 가지 양식을 가지고 있습니다.

첫 번째는 한 줄입니다.

if (condition) doThis();

두 번째는 여러 줄에 대한 것입니다.

if (condition) {
   doThis();
}

나는 apparatchik처럼 "항상 중괄호 사용" 줄을 따르곤 했습니다.그러나 한 줄 조건식에서는 생략할 수 있도록 스타일을 수정했습니다.

if(!ok)return;

모든 다중 문 시나리오에서는 여전히 중괄호가 필수라고 생각합니다.

if(!ok){

    do();

    that();

    thing();
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top