이진 연산자 앞뒤에 개행을 넣어야합니까? [닫은]


11

Python 또는 Javascript 를 사용하는 경우 줄 바꿈이 코드를 조기에 종료하지 못하도록 항상 이진 연산자를 이전 줄 의 끝에 두어야합니다. 오류를 잡는 데 도움이됩니다.

그러나 C 또는 C ++에서는 이것이 문제가되지 않으므로 궁금합니다.

두 번째 버전을 첫 번째 버전보다 선호하는 이유가 있습니까?

return lots_of_text
       + 1;

return lots_of_text +
       1;

(예를 들어, 이들 중 하나가 다른 종류의 오류를 방지하는 데 도움이됩니까? 아니면 더 읽기 쉬운 것으로 간주됩니까?)


파이썬에서는 그렇게해서는 안됩니다. 주로 주장하는 효과가 없기 때문입니다. 후행 연산자는 줄 연속을 일으키지 않습니다. 백 슬래시 또는 닫히지 않은 괄호, 대괄호 또는 중괄호가 있습니다.

@ delnan : 나는 (매우 신중하게) 줄 연속 이 발생 한다고 말한 적이 없습니다 . 여전히 그룹화 문자를 묶어야한다는 것을 알고 있습니다. 나는 그것이 당신에게 오류를 주어 줄이 너무 일찍 끝나는 실수를 예방하는 데 도움이된다고 말했다.
user541686

나도 알지만 그렇게하지 않습니다. 적어도 나는 그것이 일어난 것을 보지 못했고 (그리고 연산자 뒤에 개행을 넣는 것에 대한 PEP 8의 규칙을 엄격히 따랐습니다) 연산자 앞에 개행에 유효하지만 연산자 뒤에는 유효하지 않은 코드를 상상할 수 없습니다. 예를 들어 첫 번째 스 니펫과 같은 코드도 오류로 인해 오류가 발생합니다. 라인을 분할 할 때 들여 쓰기를 추가하지 않는 사람이 있습니까?

@delnan : 실제로 대량 편집 또는 사각형 선택을 할 때 텍스트 편집기를 사용하여 실수로 들여 쓰기를 만드는 것이 매우 쉽습니다. 그리고 유지 보수 중에 발생하는 경우 첫 번째 경우 오류가 발생하지 않고 자동으로 미끄러지지 만 두 번째 경우에는 좋은 오류가 발생합니다.
user541686

4
이것이 왜 다운 보트인지 확실하지 않습니다. 합리적인 코딩 스타일 질문처럼 보입니다.
스튜어트 마크

답변:


18

답변에서 볼 수 있듯이이 문제에 대한 합의는 없습니다. 당신이 팀에서 작동하지 않는 것을 사용 하면 더 편안합니다.


나는 운영자 전에 줄 바꿈을 삽입 선호합니다.

줄을 끊어야 할 때마다 보통 한 줄에 같은 "수준"이라는 용어를 하나만 넣습니다.

파이썬에서 뉴턴의 중력의 법칙 :

force = (
    gravitational_constant
    * mass_1
    * mass_2
    / (distance * distance)
)

이것을 다음과 비교하십시오.

force = (
    gravitational_constant *
    mass_1 *
    mass_2 /
    (distance * distance)
)

내가 알고 싶은, I "분열 것으로 하여 , 나는 그"mass_2 알고 싶지 않은 거리의 제곱 " 도착 나는 수학 식의 생각 어떻게이 아니기 때문에 분할을".

또한, 나는 보통 먼저 알고 싶은 것을 내가 (운영자)를하고있는 중이 야 내가 무엇을 걱정하기 전에, 함께 일을 (피연산자).

또는이 복잡한 SQL 문을 고려하십시오.

WHERE
  a = 1
  AND b = 2
  AND c = 3
  AND ( -- or put the OR on one line together with the AND
    d = 3 
    OR e = 1)
  AND x = 5

이를 통해 다음과 같이 운영자를 찾기 위해 끝까지 모든 줄을 읽지 않아도 위에서 아래로 스키밍함으로써 개별 조건이 어떻게 쉽게 연결되는지 확인할 수 있습니다.

WHERE
  a = 1 AND
  b = 2 AND
  c = 3 AND
  ( 
    d = 3 OR
    e = 1) AND
  x = 5

나는 "이것이 X사실" 이라는 관점에서 전자에 대해 생각한다. 그리고 나는 " 그리고 이것도 사실이다" 라고 말 함으로써 다른 방식보다 나에게 더 자연스러운 느낌 을주는 것을 수정한다. 또한, 나는 시각적으로 파싱하기가 훨씬 쉽다는 것을 알게되었습니다.

또는 PHP 예 :

$text = "lorem ipsum"
      . "dolor sit amet, "
      . "consectetur adipisicing elit, "
      . "sed do eiusmod tempor";

다시 말하지만, 단순히 텍스트를 연결하고 있음을 알기 위해 세로로 훑어 볼 수 있습니다. 대부분의 시간 동안 실제로 문자열 / 조건 내부의 내용을 신경 쓰지 않는다고 생각하기 때문입니다.

물론, 나는이 스타일을 무조건 적용하지 않을 것입니다. 연산자 뒤에 개행 문자를 넣는 것이 나에게 더 합리적이라고 생각되면 그렇게 할 것이지만 지금은 예를 생각할 수 없습니다.


첫 번째 예에 누락 된 괄호가 추가되었습니다.
케빈 클라인

1
+1 : 정확히 맞다; 연속 선은 연산자로 시작하도록 수학은 항상 조판됩니다.
케빈 클라인

당신이 설명하는 같은 이유로 +1,하지만 PHP 예제 외모는 확실히 나에게 이상한. 그 concats는 있어야하지 .,하지 .=?
이즈 카타

@ 이즈 카타 네, 물론입니다. 감사. 케빈 : 괄호는 정확했다) 난 그냥 그들을 정렬force
phant0m

11

나는 거의 항상 이진 연산자 앞에 끊어 코드 독자에게 이것이 다음 명령문이 아니라 표현식의 연속임을 분명히하기 위해 줄을 바꿉니다. 다음 명령문이 일반적으로 들여 쓰기되는 경우에 중요합니다. 예를 들어, 복잡한 조건식이있는 if 문을 고려하십시오 .

if (first_part_of_condition &&
    second_part_of_condition) {
    statement_within_then_part;
}

조건식의 두 번째 부분은 당시 부분의 첫 번째 문장과 쉽게 혼동됩니다. 조건의 첫 부분이 길고 &&가 오른쪽으로 끝나는 경우 이는 매우 혼란 스러울 수 있습니다. 이것을 대안과 비교하십시오 :

if (first_part_of_condition
    && second_part_of_condition) {
    statement_within_then_part;
}

이것은 조금 이상하게 보이지만 조건의 두 번째 부분이 명령문의 시작이 아님을 분명히합니다.

다른 상황 에서도이 작업을 수행하지만 들여 쓰기가 모호하기 때문에 if 문이 가장 중요합니다. 물론 들여 쓰기 또는 괄호 배치를 변경할 수 있지만, 이것도 이상하게 보입니다.

tl; dr 줄의 왼쪽 끝은 빠른 독해에 더 중요하므로, 연산자를 왼쪽 끝에 두는 것이 문장이 아니라 지속적인 표현이라는 점에서 더욱 두드러집니다.


생각을 흥미로운하지만이 꽤 (함께 할 특히 혼란을 찾을 수 STIL +-도 단항 접두사 연산자로 이해 될 수있는). 연속적인 선을 돋보이게하는 일반적인 해결책은 더 많이 들여 쓰기하는 것입니다 (예 : 두 단계 씩).
Konrad Rudolph

"조건부 표현식의 두 번째 부분은 그 당시의 첫 번째 문장과 쉽게 혼동됩니다.": "{"및 "}"를 세로 (동일한 열)로 정렬하여 시작과 끝을 만드는 경우에는 발생하지 않습니다. 블록의 더 명확하게 눈에.니다.
Giorgio

8

나는 항상 첫 번째를 사용합니다. 거기에서 1로 무엇을하고 있는지 분명하게 밝히기를 원합니다. 내가 그것을 보았고 그 1 이상의 텍스트 벽이 있다면 그 1의 사용법까지 무슨 일이 있었는지 전혀 알지 못할 것입니다.

1 옆에있는 '+'는 최소한 명백한 이유없이 "나는 모두 코드 친구입니다."


seconded ...........
James

7

줄에 이진 연산자를 사용하여 문이 다음 줄에서 계속되고 있음을 나타낼 때 이해력을 엄청나게 읽는 데 도움이되며 문을 불완전하게 만듭니다. 누락 된 세미콜론으로는 즉시 그것을 이해하기에 충분하지 않습니다.

이것은 단순히 습관의 문제 일지 모르지만 세미콜론이 필요한 언어 (쉘 스크립트, makefile 및 Python과 같은 언어의 보급 성을 감안할 때 꽤 비현실적이라고 생각되는 언어)에서만 독점적으로 작업하지 않으면 아마도 습관이 없을 것입니다.

편집 : Giorgio는 주석에서 훌륭한 지적을합니다. 이 사용법 은 수학과 자연 언어 모두에서 일반적인 구두점을 반영 합니다. 당신은 쓸 것입니다

나는 가라
앉았고 수영을했다

당신은 할 수 없습니다 쓰기

나는 가라 앉고
수영을했다


3
+1 : 또한 줄 끝의 +를 피연산자 목록에서 두 항목을 분리하는 쉼표로 읽는 경향이 있습니다. 이러한 이유로 나는 쉼표로 할 때와 같이 줄 끝에 +를 넣는 것을 선호합니다 (쉼표로 줄을 시작하지는 않습니다).
Giorgio

@Giorgio이 점은 너무 뛰어나서 대답을 위해 도난당했습니다. 당신이 나를 용서할 수 있기를 바랍니다.
Konrad Rudolph

계속해서 : 나는 기분이 좋다. ;-)
조르지오

7
코드는 영어가 아니며 코딩 규칙을 정당화하는 방법으로 영어 구문 규칙을 사용하는 것은 잘못된 비유라고 생각합니다. 나는 후행 연산자 스타일을 좋아하지 않지만 Konrad는 Python과 같은 언어에 대해 좋은 점이 있음을 인정합니다.
M. Dudley

3
수학적 조판에서 줄 바꿈은 항상 연산자 앞에 있고 뒤에는 없습니다. prosaic 예제에서 연산자는 "그러므로"입니다. 영어 산문에서 쉼표는 본질적으로 호흡 표시입니다.
케빈 클라인
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.