한 줄 진술 및 모범 사례


11

나는 최근에 많은 사람들이 눈살을 찌푸리게하는 습관을 얻었지만, 결국 단일 (때로는) 반복적 인 방법의 구조가 아닌 전역 코드 구조를 주시하는 데 도움이되는 습관을 얻었습니다. 다음과 같이 한 줄로 된 문장

textBox1.Text = "Something!"; textBox2.Text = "Another thing!"; textBox3.Text = "Yet another thing!";

반대로

textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";

나는 반복적 인 작업을 위해 전반적인 코드 "아름다움"을 유지하고 프로그램 구조를 쉽게 추적하는 데 도움이되지만, 좋은 습관이 아닐 수도 있음을 인정합니다. 나는 실제로 그것을 많이 사용하므로, 이것에 대한 당신의 생각이 무엇인지 알고 싶습니다. 또한 내 코드를 유지 관리 해야하는 사람 이이 접근법에 문제가 있다고 생각하십니까?



1
유지해야한다면 문제가 생길 것입니다. 가장 먼저 할 일은 ";"에 대해 CTRL + F를하는 것입니다. 줄 바꿈을하십시오. 그러나 그것은 단지 나입니다 :-). 예를 들어 기본값이 false 인 몇 개의 텍스트 상자의 활성화 된 속성을 초기화하는 이유가 하나의 줄을 좋아합니다. textBox1.Enabled = textBox2.Enabled = false;
Arun

2
코딩 스타일 질문을하는 경우 언어를 지정하면 도움이됩니다.
Caleb

3
주어진 예제에서 발생하지 않을 수도 있지만 두 번째 또는 세 번째 또는 ...에 중단 점을 모두 한 줄에 배치하면 어떻게 중단합니까?
Marjan Venema

1
또한 코드가 균일하게 보이는 자동 서식 (자바)에 익숙합니다.
Kwebble

답변:


22

나는 가독성이 당신과 분명히 코드를 읽는 다른 사람 모두에게 큰 고통을 줄 것이라고 생각합니다. 당신이 그것을 마음에 적극적으로 쓰기 때문에 당신이 처음 쓸 때 그것은 모두 의미가 있습니다. 코드를 스캔 할 때 변수와 함수가 어디에 있는지 확인하기 위해 다릅니다 ... 자신의 코드를 스캔하는 자신의 능력을 파괴하고 있습니다. 그것은 엄청나게 큰 일이며, 다른 사람 당신의 코드를 읽어야 한다면 나쁘지 않습니다 .

또한 코드를 읽는 방법에 대해 생각하십시오. 항상 아래로 스크롤하고 아래로 스크롤합니다. 당신의 방법은 이것과 맞지 않으며, 코드 판독에서 가장 추악한 문제 중 하나를 소개합니다. 가로로 스크롤 . 그것이 코드를 읽는 것이 얼마나 어려운지를 과소 평가하지 마십시오. 당신은 가로로 스크롤하지 않으며, 사람들이 가로로 스크롤하지 않도록합니다. 거의 모든 상황에서 매우 부자연 스럽습니다.

또한 문제가 반복적 인 코드 입력 인 경우 Ctrl-C를 잊지 마십시오. 예제 코드에서 수동으로 입력하는 것이 더 효율적 일 수 있지만 여러 줄을 여러 번 복사 해야하는 경우 한 줄과 새 줄을 복사하는 것이 효율적 인 것처럼 보입니다. x 번 변경하고 오타가 발생할 가능성이 줄어 듭니다.

아, 오타! 코드의 가독성을 높이면 잘못 설정 한 50 개의 변수 선언을 찾는 것이 악몽이 될 수 있습니다. 대부분의 컴파일러는 이제 행 및 열 번호에 오류를 표시하지만 행에서 오류를 찾는 것이 열을 찾는 것보다 훨씬 쉽습니다.


2
a) 코드 읽기 / 스캔-코드를 스캔 할 때 대부분의 사람들은 줄의 처음 몇 문자를 읽은 다음 "관심이없는"경우가 아니라면 몇 개 더 읽습니다. 컴파일러 오류 : 대부분의 경우 컴파일러 오류를 "<< >> 문제"로 해석합니다. 내가 즉시 해결할 수없는 경우에만 (드문), 실제로 오류를 읽습니다.
mattnz

19

한 줄에 한 문장으로 나란히 차이점이 무엇인지 쉽게 확인할 수 있습니다.


2
누군가가 해당 코드를 병합 해야하는 경우 아마도 가장 큰 이유 일 것입니다. 거의 모든 병합 도구를 사용하면 행의 하위 문자열이 아닌 행을 쉽게 분리하고 이동할 수 있습니다.
anon

@anon 병합 도구에 대한 좋은 점; 줄당 하나의 문장은 정리할 병합 충돌이 줄어든다는 것을 의미합니다.
휴고

10

예제에서는이를 보여주지 않지만 한 줄에 여러 문을 그룹화하는 데 다른 문제가 있습니다. 한 줄에있는 5 개의 진술 중 하나에서 예외가 발생하면 어떻게합니까?

스택 추적에 "N 행의 EBlah"라고 표시됩니다. 이제 5 가지 중 어느 것이 예외를 발생 시켰는지 전혀 알 수 없습니다.

(어떤 종류의 진술이라도 지나치게 긴 경우에도 마찬가지입니다.)


2
같은 개념이 디버깅에도 적용되며, 세분성은 일반적으로 줄 번호입니다.
David Hammen

2
오 예, 문제가 될 수 있습니다. "즐겨 찾기"는 foo.bar[grill.boo].flip.flap[flop].mickey(minnie).marshmallow(Java / C # 구문) 과 같이 널 포인터가 느슨해지는 경우 입니다. 그런 종류의 혼란을 정렬하는 것은 항상 여분의 줄 (및 임시 변수 ... 및 원래 개발자를위한 2D6 단서)로 더 좋습니다.
Donal Fellows

7

한 줄에 한 문장은 널리 사용되는 코딩 스타일입니다. 결과적으로 미래에 코드를 보는 대부분의 개발자는 한 줄에 여러 명령문을 볼 때 아마 승리 할 것입니다. 한 가지 방법으로 무언가를 보는 데 익숙해지면 다른 방법으로 보는 것이 혼란 스러울 수 있습니다.

이런 이유로 나는 드문 경우를 제외하고는 그것에 반대하는 것이 좋습니다.


4

지난 25 년 전에는 낮은 클럭 속도로 실행되는 소형 마이크로에서 해석 된 언어를 사용하여 마지막으로 수행했습니다. 여기서 모든 공간 또는 캐리지 리턴이 제거되어 성능이 향상되었습니다.

나는 그것을 생각할 때 지금 당장 승리합니다 (좋은 이유가 있었음에도 불구하고).

불행히도 이러한 코드는 읽기가 어렵고 유지 관리가 어렵습니다.


1
따라서 올바르게 작성하고 공백과 "기계 사본"에 대한 다른 준비를 제거하십시오. 요즘 자바 스크립트를 축소하는 것과 같습니다.
CaffGeek

1
예-저는 1986 년에도 소스 코드를 다시 처리하는 프로그램을 작성했습니다. 다시는 할 필요가없는 또 다른 일입니다.
quick_now

1

문법적으로는 아무런 문제가 없습니다. 팀의 코딩 스타일에 따라 다릅니다.

내가 본 대부분의 코드 (표준 c ++ 헤더 안에있는 코드 포함)가 이런 식으로 수행되므로 첫 번째 방법을 사용합니다.

textBox1.Text = "Something!";
textBox2.Text = "Another thing!";
textBox3.Text = "Yet another thing!";

0

이것은 정말 특이한 코딩 스타일입니다.

대신 빈 줄을 사용하여 코드의 논리적 부분을 구분하는 것이 좋습니다.


0

오른쪽으로 너무 멀어지면 여러 줄만큼 많은 문제가 발생할 수 있습니다.

수십 개의 필드가있는 일부 SQL 문을 처리해야했습니다. 일반적으로 한 줄에 하나씩 넣었지만 몇 가지 경우 3 또는 4를 한 줄로 묶었습니다. 여러 번 위아래로 스크롤 해야하는 개발 중에 좋은 생각처럼 보입니다.

이 코드로 돌아가는 것을 후회합니다. 여분의 행을 갖는 것만으로도 많은 문제가 발생하지 않으므로 일반적으로 정리합니다.


0

또한 내 코드를 유지 관리 해야하는 사람 이이 접근법에 문제가 있다고 생각하십니까?

1 분 동안 머리에 손을 얹은 후, 좋아하는 IDE 정규식 기능을 사용하여 읽을 수없는 모든 코드를 한 줄에 한 문장으로 자동 분리합니다.

보여준 예제를 간단히 살펴보면 두 번째 방법이 얼마나 더 읽기 쉬운 지 이해할 수 있습니다.

눈을 수평으로 영원히 움직이지 않아도 세로 페이지 흐름을 따르는 것이 훨씬 쉽습니다.

예제를 보자. 즉, 코드가 Text다른 textBox객체 의 속성에 관한 것임을 알고 있으며 문자열에는 값으로 포함되어있다. 꽤 직설적 인.


0

나는 개인적으로 그런 스타일을 사용하지 않을 것입니다. 요약

찬성

  • 스크롤 할 코드 줄이 적습니다.
  • "많은 과제물"을 표현하기 위해 의미 적으로 코드를 그룹화하는 데 사용될 수 있습니다. 그러나 너무 많은 블록을 사용하면 그러한 블록을 함수로 리팩토링 할 수 있습니다.

단점

  • 읽기 어려운, 일반적으로 수평으로 코드를 읽는 것이 더 쉽습니다 (스키밍, 눈 움직임 없음).
  • diff는 병합을 포함하여 쉽게 악몽이됩니다.
  • 변경하기가 더 어렵습니다 (복사 및 붙여 넣기, 주석 달기 등).
  • 디버깅은 개별 표현식 대신 행에서 작동하므로 많은 IDE에서 문제가 될 수 있습니다.

일부 "장단점"은 때때로 전문가 일 수 있습니다. 예를 들어, 코드 조각에 8 개의 연속 연산이 있다고 가정합니다 if (x > maxX) {x=maxX; peggedAny = true;}. 그러한 각 작업이 한 줄에 쉽게 들어가면 수십 줄보다 8 줄을 사용하여 문장을 나눕니다. 그러한 비교가 충분한 장소에서 사용된다면, 양식의 네 가지 진술 peggedAny |= pegValueMinMax(ref x, minX, maxX);이 더 나을지 모르지만 pegValueMinMax그것을 읽는 사람 은 그것이 무엇을 하는지를 읽어야 할 것입니다.
supercat

또한, 작은 라인이 변경되면, "diff"는 이것을 전체 라인에 대한 변경으로 간주 할 것이다. 라인이 기능적으로 하나의 단위로 동작해야한다면, 그것은 좋은 일입니다. 그렇지 않으면 의미 적 조작이 여러 행으로 분할 된 경우 일부 행을 변경하면 명확하지 않은 방식으로 조작에 영향을 줄 수 있습니다.
supercat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.