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


21

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

예를 들어, 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();

그러나 훨씬 더 장황하다.

간결함과 가독성에 관해서는 어디에서 선을 그리십니까?


3
이것은 주관적인 질문입니다. 무언가를 구현 한 사람은 자신의 방식이 합리적이라고 말하고, 누군가 그것을 이해하면 말이 안되며 다른 사람은 내가 이해한다고 말하지만 다른 방법을 선호합니다. 이것은 단지 선호입니다.
Chris

20
두 번째 버전이 더 읽기 쉽다고 생각합니다.
Vaibhav

2
간결함과 간결함을 혼동하고 있습니다. 간결함은 가독성을 향상시킵니다. 간결함이 그것으로부터 멀어진 다.
Ferruccio

1
@ ThorbjørnRavnAndersen : C # 코드의 대상은 일반적으로 "C # 배경을 가진 개발자"입니다. 내가 본 것에서 프로그래머에 대한 여기의 합의는 누군가가 익숙하지 않을 수 있기 때문에 유용한 언어 기능을 사용하지 말아야한다고 생각합니다. (또한 참조 : programmers.stackexchange.com/q/101513/33843. )
Heinzi

1
복제? : programmers.stackexchange.com/q/58630/15464 .. 아, 이건 더 오래된 것입니다. :)
Steven Jeuris

답변:


63

양자 모두.

첫 번째 예는 확실히 더 장황하고 명백하게 더 분명합니다 ...하지만 한 줄 대신 다섯 줄을 스캔해야합니다. 게다가 값을에 할당하는 목적을 강조하지 않습니다 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");

후자의 예는 다시 짧아졌지만 이제는 동일한 테스트에 의해 트리거 된 작업을 별개의 것으로 보이게하여 목적을 모호하게합니다. 여기서 나는 전자의 장황함이 정당하다고 생각한다.


3
훌륭한 답변! -목적에 관한 것만 큼의 자세한 설명이 아닙니다.
Damovisa

2
@Damovisa : 정확히-코드의 목표는 의사 소통이며, 가능한 한 간결하게 수행해서는 안되는 일반적인 이유는 없습니다 (그러나 더 이상은 아닙니다).
Shog9

1
Null 통합 연산자를 배우는 데는 1 초 이상이 걸리지 만이를 모르는 경우 배우십시오!
Casebash

2
아 "??" Java에서는 좋을 것입니다.

마지막 예제는 코드 측면에서 짧지 boss만 자세한 예제에서는 한 번이 아니라 실제로 3 번 평가 됩니다. 이것이 짧은 코드를 짧게 만드는 것이 나쁜 생각 인 또 다른 이유입니다. 간결함은 가독성 / 유지 보수성 (복잡한 코드의 경우) 또는 성능 (내부 루프의 중요한 섹션 등)에 관계없이 주요 목표의 두 번째 목표라고 생각합니다. 다시 말해, 1bps 연결을 통해 코드를 보내지 않는 한 간결성을 위해 순수하게 최적화하지 마십시오.)
user193130

16

둘 다 좋은 목표이지만, 하나를 선택해야 할 때 항상 가독성 이 있습니다.

나는 당신의 모범이 가독성 간결성을 향상 시킨다고 주장합니다 . 그러나 다음을 고려하십시오.

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();

후자는 간결하지만 읽기가 어렵습니다. 전자는 장황하지만 논리의 흐름은 분명합니다.

궁극적으로 간결함은 화면에 더 잘 맞는 기능 이외의 많은 목적을 제공하지 않습니다. 가독성으로 인해 디버깅이 쉬워 지므로 일반적으로 선호됩니다.


11
올바른 형식은 두 번째 예의 가독성을 쉽게 향상시킬 수 있습니다. 이것은 불공평 한 비교입니다. 이와 같이 포맷 할 때 , 그것이 그렇게 나쁘지는 않습니다.
Steven Jeuris

코드 샘플은 동일하지 않습니다. 첫 번째 샘플이 없습니다 ?? whatever.something.
John B. Lambe 17 년

11

나는 일반적으로 간결함으로 인해 가독성을 희생하지 말고 다른 프로그래머가 그 주제에 대한 지식이 부족하다고 판단하여 가독성을 판단하지는 않는다.

간결함과 가독성은 반대가 아닙니다. 이 답변과 같이 때로는 더 짧을수록 더 읽기 쉽습니다.


4
다른 프로그래머의 지식 부족을 가정하지 않은 +1. 주어진 예에서, 두 번째 옵션은 널 병합 연산자에 익숙하지 않은 경우 읽기 어렵습니다. 동료가 언어 구문을 모른다는 가정하에 코드를 작성하지는 않습니다. 그들이 무엇을 ??의미 하는지 알지 못하더라도 , 그것을 사용하고 배우면, 우리 모두 이익을 얻었습니다. 그리고 msdn.com에서 "?? 연산자"를 입력하는 것이 어렵지 않습니다
Tim Goodman

4

간결한 코드 사용을 의미하지만 가독성을 선호한다고 말하고 싶습니다. (즉, 더 큰 조건부 블록 내에서 비교적 간단한 조건부의 경우 3 원입니다.)

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


3

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

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

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


2

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

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

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

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


즉, 유사한 소리 고용 안정 하지만 당신은 프로그래머가 되길 원한다면, 그것은 고용 안정의 잘못된 회사의이 ...;)
로이스 Mahdal

2

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

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

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

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


0

가독성은 가장 우선해야합니다. 대부분의 사람들은 기존 코드를 수정하거나 확장하는 데 많은 시간을 소비합니다. 가독성은 유지 관리의 큰 부분입니다.

간결함은 가독성에 기여할 수있는 것입니다. 예를 들어, 귀하의 질문에 두 번째 스 니펫은 더 읽기 쉽고 간결합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.