Sun의 Java 코드 규칙에 따르면 연산자 앞에 줄 바꿈을 적용하는 것이 좋습니다. 명백한 장단점이 보이지 않으므로 이러한 스타일 중 하나를 다른 스타일보다 사용하면 이점이 있습니까?
String longVarName = a + b + c + d +
e + f;
vs
String longVarName = a + b + c + d
+ e + f;
Sun의 Java 코드 규칙에 따르면 연산자 앞에 줄 바꿈을 적용하는 것이 좋습니다. 명백한 장단점이 보이지 않으므로 이러한 스타일 중 하나를 다른 스타일보다 사용하면 이점이 있습니까?
String longVarName = a + b + c + d +
e + f;
vs
String longVarName = a + b + c + d
+ e + f;
답변:
한 줄로 남겨두고 의도를 밝히는 변수 이름 (및 함수) 측면에서 가독성을 생각합니다.
지저분 해지면 리팩토링 할 시간입니다 .
예
subtotal = price * (100 + tax_ratio) / 100`
vs.
tax = price * tax_ratio / 100
subtotal = price + tax
price * (100 + tax_ratio) / 100
또는 하나 여야합니다 . price * (1 + tax_ratio)
tax_ratio
가독성이 논쟁이라고 상상할 수있다
result = longidentifier +
short -
alittlelonger -
c;
대
result = longidentifier
+ short
- alittlelonger
- c;
두 번째 예에서 연산자는 잘 정렬되어 있으며 변수에 방정식에 입력되는 부호를 쉽게 확인할 수 있습니다. 나는 이것이 바이너리 연산자에도 의미가 있다고 생각하지만, 브레이싱 등을 사용하면 더 명확한 것을 수행해야합니다.
나는 일반적으로 가장 일반적으로 사용되는 스타일 지침이나 특정 코딩 표준 도구를 따릅니다. 일반적으로 사용되는 스타일을 사용하면 다른 사람들의 코드를 읽거나 스타일 가이드 라인이 설정된 오픈 소스 프로젝트에 참여할 때 이점이 있습니다.
내가 본 가장 일반적인 스타일은 질문의 두 번째 스타일입니다. 그 목록은 아래를 참조하십시오.
비 할당 연산자에서 줄이 끊어지면 기호 앞에 줄이 나타납니다.
선 코딩 컨벤션 :
운영자 전에 휴식
Checkstyle Operator Wrap check 의 기본값 은 nl입니다.
운영자는 새로운 줄에 있어야합니다
코드에서 나는 연산자 다음에 휴식을 취하는 경향이 있습니다.
foo = some_long_expression() +
some_other_long_expression();
여기서 줄 끝에 매달려있는 연산자는 코드가 계속된다는 독자의 큰 실마리입니다. 명령문 종결자가없는 언어에서 댕글 링 연산자는 코드가 계속된다는 컴파일러 / 인터프리터의 충분한 단서 역할을 할 수 있습니다 (그렇지 않으면 추악한 연속 행 구성을 사용해야 함).
그 표현을 문서화 할 때 (문서가 필요한 경우) 연산자 앞에 나누기를하는 경향이 있습니다.
나는 줄을 당신이 깰 진술의 구문 분석 트리에서 가장 높은 기호로 시작해야한다고 생각합니다. 표현식에서 가장 중요한 연산자를 강조 표시합니다. 같은 줄을 이전 줄의 끝이 아닌 줄의 시작 부분에 넣는 것과 같은 이유입니다.
다음 예제에서 왼쪽 여백을 스캔하면 명령문의 구조가 3 개의 표현식의 OR로 표시됩니다.
if (ch>='A' && ch<='Z'
|| ch>='a' && ch<='z'
|| ch>='0' && ch<='9')
{...}
아래는 || 연산자가 덜 강조 표시됩니다. 그것이 || 표현. 특히 선 길이가 다른 경우.
if (ch>='A' && ch<='Z' ||
ch>='a' && ch<='z' ||
ch>='0' && ch<='9')
{...}
그리고 참고로, 이것은 매우 잘못되었습니다. || 연산자는 전혀 강조 표시되지 않습니다.
if ( ch>='A' && ch<='Z' || ch>='a'
&& ch<='z' || ch>='0' && ch<='9')
{...}
나는 그것을 거의 보지 않더라도 줄의 시작 부분에 쉼표를 넣는 것을 좋아합니다. 공유 코드에서는 그렇게하지 않습니다.
var note:Object =
{ key: key
, type: 'P'
, text: someLongProcedureCallGettingTheUserInitials()
+ ": " + getTheTextThatWasTyped()
};
긴 산술 방정식의 경우 일반적으로 두 가지 중 하나를 수행합니다.
모든 것을 한 줄에 두십시오.
foo = bar + baz - fizz + buzz + alpha - beta;
나는 일반적으로 덧셈과 뺄셈 만 포함하는 방정식에 대해이 작업을 수행합니다. 곱셈과 나눗셈을 사용하여 연산자의 범위를 심각하게 망칠 수있는 오타를 만드는 것이 매우 쉽다는 것을 알았 습니다.
내가 사용하는 두 번째 형식은 점진적 연산자입니다.
foo = bar;
foo += baz;
foo -= fizz;
foo += buzz;
foo /= alpha - beta;
foo *= spiff;
눈에 띄게 성능을 향상시키는 것으로 입증되지 않는 한 한 줄로 줄이려는 이유는 없습니다. 또한 어디에서 무슨 일이 일어나고 있는지 모호하지 않으며 /
및 *
연산자에 대한 괄호를 잘못 놓을 가능성이 적습니다 .
표현식을 한 줄에두고 너무 길면 더 작은 표현식으로 나눕니다.
days = ((year * months_per_year) + month) * days_per_month + day
된다 :
months = year * months_per_year + month
days = months * days_per_month + day
이것이 가능하지 않다면 연산자보다 먼저 읽기 쉽고, 연산자를 이전 할당 바로 아래에서 시작하도록하십시오 (변수 아래에 넣으면 생각하고 최근에 만들어야합니다. 글을 읽기 쉽게 만드는 것입니다) :
random = years * months_per_year
+ month * days_per_month
+ day * hours_per_day
+ hour * minutes_per_hour
+ minute * seconds_per_minute
+ second