언어 바로 가기를 사용하여 코드를 더 간결하게 만들 수 있습니다.
예를 들어, 3 항 및 Null 병합 연산자는 코드의 양을 줄일 수 있지만 가독성을 떨어 뜨릴 수 있습니다.
C #에서 :
Person newGuy = new Person();
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
} else {
newGuy.Boss = boss;
}
기능적으로 다음과 같습니다.
Person newGuy = new Person();
newGuy.Boss = boss ?? GetDefaultBoss();
그러나 훨씬 더 장황하다.
간결함과 가독성에 관해서는 어디에서 선을 그리십니까?
답변
양자 모두.
첫 번째 예는 확실히 더 장황하고 명백하게 더 분명합니다 …하지만 한 줄 대신 다섯 줄을 스캔해야합니다. 게다가 값을에 할당하는 목적을 강조하지 않습니다 newGuy.Boss
.
null 통합 연산자에 익숙하지 않은 경우 두 번째 예제에서 시간이 조금 걸릴 수 있지만 그 목적에 대해서는 의심의 여지가 없으며 값의 소스를 찾는 더 큰 루틴을 스캔하는 경우 이걸 골라내는 것이 훨씬 쉬워졌습니다.
이제 이것을 대조하십시오 :
if (boss == null) {
newGuy.Boss = GetDefaultBoss();
newGuy.IsTemp = true;
newGuy.AddTask("orientation");
} else {
newGuy.Boss = boss;
newGuy.IsTemp = false;
}
…와:
newGuy.Boss = boss ?? GetDefaultBoss();
newGuy.IsTemp = boss == null;
if ( boss == null ) newGuy.AddTask("orientation");
후자의 예는 다시 짧아졌지만 이제는 동일한 테스트에 의해 트리거 된 작업을 별개의 것으로 보이게하여 목적을 모호하게합니다. 여기서 나는 전자의 장황함이 정당하다고 생각한다.
답변
둘 다 좋은 목표이지만, 하나를 선택해야 할 때 항상 가독성 이 있습니다.
나는 당신의 모범이 가독성 과 간결성을 향상 시킨다고 주장합니다 . 그러나 다음을 고려하십시오.
if( a > b )
{
foo = bar
}
else
{
if( c.isThing() ){
foo = somethingElse;
}
else{
foo = someFurtherThing.GetFoo();
}
}
반대로
foo = a > b ? bar ?? whatever.something : c.isThing() ? somethingElse : someFurtherThing.GetFoo();
후자는 간결하지만 읽기가 어렵습니다. 전자는 장황하지만 논리의 흐름은 분명합니다.
궁극적으로 간결함은 화면에 더 잘 맞는 기능 이외의 많은 목적을 제공하지 않습니다. 가독성으로 인해 디버깅이 쉬워 지므로 일반적으로 선호됩니다.
답변
나는 일반적으로 간결함으로 인해 가독성을 희생하지 말고 다른 프로그래머가 그 주제에 대한 지식이 부족하다고 판단하여 가독성을 판단하지는 않는다.
간결함과 가독성은 반대가 아닙니다. 이 답변과 같이 때로는 더 짧을수록 더 읽기 쉽습니다.
답변
간결한 코드 사용을 의미하지만 가독성을 선호한다고 말하고 싶습니다. (즉, 더 큰 조건부 블록 내에서 비교적 간단한 조건부의 경우 3 원입니다.)
불필요하게 이해하기 어려운 경우에는 기본적으로하지 마십시오.
답변
코드는 처음에 작성된 것보다 자주 수정되므로 가독성이 간결함과 충돌 할 때 가장 먼저 나타납니다. 반면에 :
-
구문 노이즈 및 상용구 코드는 의도를 불명확하게하여 가독성을 떨어 뜨립니다. 간결한 코드가 더 읽기 쉽습니다. 예를 들어 람다 함수 또는 델리게이트 / 퍼스트 클래스 함수 대 단일 메소드 인터페이스를 구현하는 단일 메소드 클래스를 생각해보십시오.
-
가독성은 언어와 그 고유 / 고급 기능을 잘 알고있는 합리적으로 숙련 된 프로그래머가 코드를 얼마나 쉽게 읽을 수 있는지를 기준으로 평가해야합니다.
답변
내가 생각하지 않은 한 가지 측면은 아직 언급되지 않았습니다. 당신의 목표는 무엇입니까?
당신이 신경 쓰는 것이 직업 안전이라면, 다른 모든 것보다 간결하고 간결하게하십시오. 코드 주석 처리도 생략하십시오.
멋진 새 프로젝트를 진행하는 동안 코드를 다른 사람에게 쉽게 전달하려면 가독성, 명확성 및 수많은 주석이 필요합니다.
참고 : 위의 내용은 개인에 관한 것이 아닙니다. @Damovisa; 두 위치 중 하나를 선택하는 사람을위한 것입니다.
답변
자세한 버전은 장점이 있습니다.
더 많은 라인을 가지고 있으며 대부분의 디버거는 라인 지향입니다 ! 표현식 중간에 중단 점을 설정하는 것은 매우 어렵지만 일반적으로 블록 명령문 내에 중단 점을 설정하는 것은 간단합니다.
다시 말해, 디버거가 언제 시작되도록하려면 편집기에서 어떤 것을보고 싶 boss == null
습니까?
(저는 연산자를 좋아한다고 말했습니다)