if / else 또는 boolean 식을 통한 부울 할당 중 유지 관리가 더 쉬운 것은? 답변을 찾을

어느 것이 유지 보수가 용이 한 것으로 간주됩니까?

if (a == b) c = true; else c = false;

또는

 c = (a == b);

Code Complete를 살펴 보았지만 답변을 찾을 수 없습니다.

나는 첫 번째가 더 읽기 쉽다고 생각합니다 (문자 그대로 큰 소리로 읽을 수 있음). 두 번째 것은 확실히 더 의미가 있고 코드를 줄이지 만 C # 개발자가 유지할 수 있는지 확실하지 않습니다 (예 : Python 에서이 관용구를 더 많이 볼 것으로 예상됩니다).



답변

두 번째 옵션이 더 좋습니다.

코드의 의도를 모호하게하여 유지 관리 성을 손상시키는 영리한 프로그래밍 바로 가기에주의해야 할 확실한 이유가 있습니다. 그래서 나는 그 질문을한다고 당신을 비난하지 않습니다.

그러나 나는 c = (a == b);영리한 트릭의 예 라고 생각하지 않습니다 . 간단한 개념을 간단하게 표현한 것입니다. 최대한 간단합니다.

첫 번째 예제의 적절하고 “유지 가능한”형식은 누락 된 중괄호와 한 줄로 구성 하지 않고 영리한 바로 가기로 간주하여 다음 코드를 생성합니다.

if (a == b)
{
    c = true;
}
else
{
    c = false;
}

내 경험상, 이러한 오류가 발생하기 쉬운 간단한 부울 논리를 작성하는 것은 “iffy”코드의 표시입니다. 이 코드베이스에서 더 복잡한 논리를 처리하는 방법이 궁금합니다.


답변

먼저, 두 형식이 동일하지 않다는 것을 알아야합니다.

if (a == b) c = true;

ca이 같으면 true로 설정되고, 그렇지 않으면 b값이 이미있는 그대로 유지됩니다.

c = (a == b);

ca이 같으면 true로 설정되고 그렇지 않으면 bfalse로 설정됩니다.

첫 번째 양식의 스타일에서 두 번째 양식과 동등한 것을 원하면 다음과 같이 작성해야합니다.

if (a == b) {
  c = true;
} else c = false;

이제 두 가지 중 어느 것이 더 읽기 쉽고 유지 관리가 용이하며 어떤 것이 변경되면 버그가 발생할 가능성이 적습니다. 두 번째 형태를 고수하십시오.


답변

첫 번째 양식이 더 읽기 쉽다는 것에 동의하지 않습니다. 한 줄에 두 개의 문장을 갖는 것은 관용적 C #이 아니며, if중괄호를 사용하지 않고 문장을 사용하지 않는 것이 좋습니다 .

둘째, 두 번째 양식의 유지 관리가 어려워 보이지 않습니다. 유지할 것이 없습니다. 그것은 관계의 간단한 문의 ab그것은 더 이상 간단하게 표현 할 수 없습니다.

두 번째 양식을 선호하는 또 다른 이유 c는 단일 진술로 선언 하고 할당 할 수 있기 때문입니다.

bool c = (a == b);

변수를 수정하면 쉽게 오류가 발생할 수 있으므로 피해야합니다. if명령문을 사용 하려면 변수를 조건부 전에 선언 한 다음 수정해야합니다.


답변

“보다 유지 보수가 용이 한”것은 매우 주관적 일 수 있습니다.

나는 일반적으로 코드 축소보다 가독성과 의도를 선호합니다. 축소 된 형식을 사용하여 8 가지 유형의 문자를 저장한다고 생각합니다.

언어를 중심으로 언어와 문화를 취하는 것은 ‘가독성’의 특징이라고 생각합니다.

결과 바이트 코드를 최적화하기 위해 코드를 줄이면 성능이 저하 될 수 있지만 프로파일 링 후에는주의해서 수행해야합니다.


답변

두번째. 반복 횟수가 적고 (DRY) 진행 상황을 이해하기가 쉬워서 동일한 c지 아닌지의 가치 를 지니고 a있습니다 b.

IMHO, 더 나은 것

c = a == b

내가 쓰는 것처럼

  • 1 + 2 + 3 대신에 ((1 + 2) + 3)
  • 5 + 3 * 7 대신에 (5 + (3 * 7))

명백하고 사소한 불필요한 코드는 미덕이 아닙니다. 어수선합니다.


답변

다운 투표자 여러분, 수정 된 답변에 무엇이 잘못되었는지 자세히 설명해주십시오.

예, c = (a == b);읽기 어려울 수 있습니다 (아직 StyleCop은 불필요한 괄호에 대해 불평합니다).하지만 여전히의 단순함을 좋아합니다 a == b. 따라서, 여기에 내가 때 모두를 사용하려면 무엇 ab같다 :

private static bool NoPeriod
{
    get
    {
        return this.MyWaveLength == this.HerWaveLength;
    }
}

그리고 당신은 할 수 있습니다 : this.c = this.NoPeriod대신 :

this.c = this.MyWavelength == this.HerWaveLength;