어느 것이 유지 보수가 용이 한 것으로 간주됩니까?
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;
c
a
이 같으면 true로 설정되고, 그렇지 않으면 b
값이 이미있는 그대로 유지됩니다.
c = (a == b);
c
a
이 같으면 true로 설정되고 그렇지 않으면 b
false로 설정됩니다.
첫 번째 양식의 스타일에서 두 번째 양식과 동등한 것을 원하면 다음과 같이 작성해야합니다.
if (a == b) {
c = true;
} else c = false;
이제 두 가지 중 어느 것이 더 읽기 쉽고 유지 관리가 용이하며 어떤 것이 변경되면 버그가 발생할 가능성이 적습니다. 두 번째 형태를 고수하십시오.
답변
첫 번째 양식이 더 읽기 쉽다는 것에 동의하지 않습니다. 한 줄에 두 개의 문장을 갖는 것은 관용적 C #이 아니며, if
중괄호를 사용하지 않고 문장을 사용하지 않는 것이 좋습니다 .
둘째, 두 번째 양식의 유지 관리가 어려워 보이지 않습니다. 유지할 것이 없습니다. 그것은 관계의 간단한 문의 a
및 b
그것은 더 이상 간단하게 표현 할 수 없습니다.
두 번째 양식을 선호하는 또 다른 이유 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
. 따라서, 여기에 내가 때 모두를 사용하려면 무엇 a
과 b
같다 :
private static bool NoPeriod
{
get
{
return this.MyWaveLength == this.HerWaveLength;
}
}
그리고 당신은 할 수 있습니다 : this.c = this.NoPeriod
대신 :
this.c = this.MyWavelength == this.HerWaveLength;