[C#] 중괄호를 생략하는 것이 왜 나쁜 습관으로 간주됩니까? [닫은]

왜 이런 식으로 코드를 작성하는 것이 나쁜 습관이라고 말합니까?

if (foo)
    Bar();

//or

for(int i = 0 i < count; i++)
    Bar(i);

중괄호를 생략하는 가장 큰 주장은 때로는 두 배가 될 수 있다는 것입니다. 예를 들어 다음은 C #에서 레이블의 광선 효과를 페인트하는 코드입니다.

using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
{
    for (int x = 0; x <= GlowAmount; x++)
    {
        for (int y = 0; y <= GlowAmount; y++)
        {
            g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));
        }
     }
 }
 //versus
using (Brush br = new SolidBrush(Color.FromArgb(15, GlowColor)))
    for (int x = 0; x <= GlowAmount; x++)
        for (int y = 0; y <= GlowAmount; y++)
            g.DrawString(Text, this.Font, br, new Point(IconOffset + x, y));

또한 usings백만 번 들여 쓰기하지 않고도 체인 연결의 추가 이점을 얻을 수 있습니다 .

using (Graphics g = Graphics.FromImage(bmp))
{
    using (Brush brush = new SolidBrush(backgroundColor))
    {
        using (Pen pen = new Pen(Color.FromArgb(penColor)))
        {
            //do lots of work
        }
    }
 }
//versus
using (Graphics g = Graphics.FromImage(bmp))
using (Brush brush = new SolidBrush(backgroundColor))
using (Pen pen = new Pen(Color.FromArgb(penColor)))
{
    //do lots of work
}

중괄호에 대한 가장 일반적인 주장은 유지 보수 프로그래밍과 원래 if 문과 의도 된 결과 사이에 코드를 삽입하여 발생하는 문제를 중심으로합니다.

if (foo)
    Bar();
    Biz();

질문 :

  1. 언어가 제공하는보다 간결한 구문을 사용하고 싶습니까? 이 언어를 디자인하는 사람들은 영리합니다. 항상 사용하기에 좋지 않은 기능을 사용한다고 상상할 수 없습니다.
  2. 가장 낮은 공통 분모를 이해하고 처리하는 데 아무런 문제가 없도록 코드를 작성해야합니까?
  3. 내가 놓친 또 다른 주장이 있습니까?


답변

실제로, 내가 정말로 물린 유일한 시간은 내가 디버깅 할 때 였고 bar ()를 주석 처리했습니다.

if(foo)
  // bar();
doSomethingElse();

그 외에는 다음을 사용하는 경향이 있습니다.

if(foo) bar();

위의 경우를 처리합니다.

편집 질문을 분명히 해 주셔서 감사합니다. 최저 공통 분모에 코드를 작성해서는 안됩니다.


답변

읽는 속도 …

이미 언급 한 것 말고는. 이 시점에서 나는 중괄호와 공백이있는 if 문을 구문 분석하도록 이미 조건화되었습니다. 그래서 나는 읽었습니다.

if (condition)
{
    DoSomething();
}

DoSomethingElse();

내가 읽는 것보다 약간 빠릅니다.

if (condition) DoSomething();

DoSomethingElse();

다음과 같은 경우 조금 느리게 읽습니다.

if (condition) DoSomething();
DoSomethingElse();

나는 이것을 이전보다 상당히 느리게 읽었습니다.

if (condition)
    DoSomething();
DoSomethingElse();

나는 도움이 될 수는 없지만 다시 사례를 읽고 저자가 의도했는지 궁금해합니다.

if (condition)
{
    DoSomething();
    DoSomethingElse();
}

일반적으로 이미 다루었지만 아래 내용 을 읽을 때 저자가 의도 한 내용을 확인하기 위해 잠시 동안 살펴볼 것입니다. 원래 저자를 찾아서 확인하기도합니다.

if (condition)
    DoSomething();
    DoSomethingElse();


답변

작은 것이면 다음과 같이 작성하십시오.

if(foo()) bar();

두 줄로 나눌 수있을 정도로 긴 경우 중괄호를 사용하십시오.


답변

또한 실제로 필요할 때만 중괄호를 사용하는 것이 더 좋다고 생각했습니다. 그러나 더 이상, 주된 이유는, 코드가 많을 때 더 읽기 쉽고 일관된 브레이싱 스타일이있을 때 코드를 더 빨리 파싱 할 수 있다는 것입니다.

if에 두 번째 문장을 추가하는 것 외에도 항상 중괄호를 사용하는 또 다른 좋은 이유는 다음과 같은 일이 발생할 수 있습니다.

if(a)
   if(b)
     c();
else
   d();

else 절이 실제로 “if (b)”의 절이라는 것을 알고 계셨습니까? 당신은 아마했을 것입니다,하지만 당신은이 문제에 익숙한 사람을 믿습니까?

따라서 일관성을 유지하고 다른 사람 (항상 바보 인 다른 사람)이 코드를 변경할 때 예기치 않은 일이 발생할 수있는 일을 알지 못 하기 때문에 소스 코드를 더 읽기 쉽고 빠르게 파싱하기 때문에 항상 중괄호를 넣습니다. 당신의 두뇌. 위임이 이루어 지거나 스위치와 같은 if 절이 확장되지 않을 것 같은 가장 간단한 if 문에 대해서만 중괄호를 생략합니다.


답변

이것이 항상 나쁜 습관으로 여겨지는 것은 아닙니다. 모노 프로젝트 코딩 가이드 라인 은 필요가 없습니다 중괄호를 사용하지 것이 좋습니다. GNU 코딩 표준도 마찬가지입니다 . 코딩 표준과 마찬가지로 개인적 취향의 문제라고 생각합니다.


답변

줄이 싸다. 프로세서 성능이 저렴합니다. 개발자 시간은 매우 비쌉니다.

일반적으로 절대적으로 리소스 / 속도 중요한 응용 프로그램을 개발하지 않는 한 항상 코드 작성 측면에서 실수를합니다.

(a) 다른 개발자가 내가하고있는 일을 쉽게 수행 할 수 있습니다.

(b) 필요할 수있는 코드의 특정 부분에 의견을 말하십시오.

(c) 무언가 잘못되면 쉽게 디버깅

(d) 향후에 필요할 경우 쉽게 수정할 수 있습니다 (예 : 코드 추가 / 제거)

코드의 속도 또는 학문적 우아함은 비즈니스 관점에서 이러한 요소에 부차적입니다. 이것은 내가 어색하거나 못생긴 코드를 작성하기로 설정 한 것은 아니지만 이것이 나의 우선 순위입니다.

대부분의 경우 중괄호를 생략하면 (b), (c) 및 (d)가 더 어려워집니다 (그러나 불가능하지는 않습니다). 중괄호를 사용하거나 사용하지 않아도 (a)에 영향을 미치지 않습니다.


답변

나는 중괄호가 제공하는 선명도를 선호합니다. 당신은 무엇을 의미하는지 정확히 알고 있으며 누군가가 방금 그들을 막아 냈는지 추측 할 필요가 없습니다 (버그를 도입했습니다). 내가 그들을 생략하는 유일한 경우는 if와 action을 같은 줄에 넣을 때입니다. 나도 그렇게 자주하지 않습니다. 나는 수년간의 K & R C 유사 프로그래밍에서 중괄호로 줄을 끝내는 것이 IDE가 그것을 강제하지 않으면 극복하기 위해 노력해야하는 연습이지만, 실제로 중괄호를 자체 줄에 넣음으로써 도입 된 공백을 선호합니다. 나를.

if (condition) action();  // ok by me

if (condition) // normal/standard for me
{
   action();
}