코드에서 간결함이나 가독성을 선호합니까? [닫은]

언어 바로 가기를 사용하여 코드를 더 간결하게 만들 수 있습니다.

예를 들어, 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 원입니다.)

불필요하게 이해하기 어려운 경우에는 기본적으로하지 마십시오.


답변

코드는 처음에 작성된 것보다 자주 수정되므로 가독성이 간결함과 충돌 할 때 가장 먼저 나타납니다. 반면에 :

  1. 구문 노이즈 및 상용구 코드는 의도를 불명확하게하여 가독성을 떨어 뜨립니다. 간결한 코드가 더 읽기 쉽습니다. 예를 들어 람다 함수 또는 델리게이트 / 퍼스트 클래스 함수 대 단일 메소드 인터페이스를 구현하는 단일 메소드 클래스를 생각해보십시오.

  2. 가독성은 언어와 그 고유 / 고급 기능을 잘 알고있는 합리적으로 숙련 된 프로그래머가 코드를 얼마나 쉽게 읽을 수 있는지를 기준으로 평가해야합니다.


답변

내가 생각하지 않은 한 가지 측면은 아직 언급되지 않았습니다. 당신의 목표는 무엇입니까?

당신이 신경 쓰는 것이 직업 안전이라면, 다른 모든 것보다 간결하고 간결하게하십시오. 코드 주석 처리도 생략하십시오.

멋진 새 프로젝트를 진행하는 동안 코드를 다른 사람에게 쉽게 전달하려면 가독성, 명확성 및 수많은 주석이 필요합니다.

참고 : 위의 내용은 개인에 관한 것이 아닙니다. @Damovisa; 두 위치 중 하나를 선택하는 사람을위한 것입니다.


답변

자세한 버전은 장점이 있습니다.

더 많은 라인을 가지고 있으며 대부분의 디버거는 라인 지향입니다 ! 표현식 중간에 중단 점을 설정하는 것은 매우 어렵지만 일반적으로 블록 명령문 내에 중단 점을 설정하는 것은 간단합니다.

다시 말해, 디버거가 언제 시작되도록하려면 편집기에서 어떤 것을보고 싶 boss == null습니까?

(저는 연산자를 좋아한다고 말했습니다)