대부분의 경우 이것은 개인적인 취향이지만 고려해야 할 사항이 있습니다.
가능한 버그
이 추가 기능에 괄호를 잊고에 의한 버그 내가 한 것과, 희귀 주장 할 수 있지만 볼 것을 그들이 할 일이 가끔 (유명한 잊지하지 IOS 고토 실패 버그). 따라서 코드 스타일을 고려할 때 이것이 요인이되어야한다고 생각합니다 (일부 도구는 들여 쓰기 에 대해 경고 하므로 도구 체인에 따라 다릅니다) .
유효한 코드 ( 버그 일 수있는 것처럼 읽음 )
프로젝트가 그러한 버그로 고통받지 않는다고 가정하더라도 코드를 읽을 때 버그 가 될 수 있는 것처럼 보이는 코드 블록이 보일 수 있습니다.
우리는 시작합니다 :
if (foo)
bar();
개발자는 유용한 의견을 추가합니다.
if (foo)
// At this point we know foo is valid.
bar();
나중에 개발자가 확장합니다.
if (foo)
// At this point we know foo is valid.
// This never fails but is too slow even for debug, so keep disabled.
// assert(is_valid(foo));
bar();
또는 중첩 블록을 추가합니다.
if (foo)
while (i--) {
bar(i);
baz(i);
}
또는 매크로를 사용합니다.
if (foo)
SOME_MACRO();
"... 매크로가 여러 줄의 코드를 정의 할 수 있기 때문에 매크로가 여러 줄에 사용 do {...} while (0)
됩니까? 스타일 가이드에 포함되어 있어야하지만 경우에 따라 더 잘 검사해야합니다!"
위의 예제는 모두 유효한 코드이지만 코드 블록의 내용이 많을수록 실수가 없도록 더 많이 읽을 필요가 있습니다.
코드 스타일에 따라 여러 줄 블록에 코드가 없어도 중괄호가 필요하다고 정의 할 수 있지만 프로덕션 코드에 이러한 종류의 주석이 추가되는 것을 보았습니다. 당신이 그것을 읽을 때, 그 줄을 마지막으로 편집 한 사람이 중괄호를 잊어 버렸다는 의심의 여지가 있습니다. 때로는 다시 확인해야 할 필요성이 의도 한대로 작동한다고 생각합니다 (특히 코드 의이 영역에서 버그를 조사 할 때) .
차음 노이즈
단일 라인에 버팀대를 사용하는 실질적인 이유 중 하나는 확산 노이즈 를 줄이는 것 입니다.
즉, 변경 :
if (foo)
bar();
에:
if (foo) {
bar();
baz();
}
... 조건부 행이 변경 될 때 diff에 나타나게하므로 작지만 불필요한 오버 헤드가 추가됩니다.
- 코드 검토에서 행이 변경된 것으로 표시됩니다. diffing 도구가 단어 기반 인 경우 괄호 만 변경되었음을 쉽게 알 수 있지만 행이 변경되지 않았는지 확인하는 데 시간이 더 걸립니다.
모든 도구가 단어 기반의 diffing을 지원하는 것은 아니며 diff (svn, git, hg 등)는 멋진 도구를 사용하더라도 전체 줄이 바뀌는 것처럼 보일 것입니다. 때로는 평범한 줄을 빠르게 살펴볼 필요가 있습니다. 변경 내용을 확인하기 위해 기반 diff.
- 주석 도구 (예
git blame
:)는 행이 변경된 것으로 표시하므로 행의 원점을 추적하여 실제 변경 을 찾을 수 있습니다.
이것들은 모두 작으며, 변경된 코드 라인을 커밋하는 코드 검토 또는 추적에 소요되는 시간에 달려 있습니다.
diff에서 여분의 라인을 변경하는 데있어 실질적인 불편은 코드의 변경으로 인해 충돌이 발생하여 병합되고 수동으로 해결 해야 할 가능성이 높습니다 .
{
자체 라인 이있는 코드베이스에는 예외가 있습니다. 문제는 아닙니다.
은 diff 소음 이 스타일로 작성하는 경우 인수는 보유하지 않습니다
if (foo)
{
bar();
baz();
}
그러나 이것은 일반적인 관습이 아니기 때문에 주로 완성도에 대한 답변을 추가합니다 (프로젝트 가이 스타일을 사용해야한다고 제안하지 않음) .