} 이후 코드 블록 끝에서“//…”주석-양호 또는 불량? [닫은]


18

나는 종종 그러한 주석이 사용되는 것을 보았습니다.

function foo() {
   ...
} // foo

while (...) {
   ...
} // while

if (...) {
   ...
} // if

때로는

if (condition) {
   ...
} // if (condition)

나는이 관행을 이해하지 못하여 적용하지 못했습니다. 코드가 너무 길어서이 엔딩 }이 무엇인지 알아야하는 경우 별도의 함수로 나누는 것이 좋습니다. 또한 대부분의 개발자 도구는 일치하는 대괄호로 이동할 수 있습니다. 그리고 마지막으로, 마지막으로, DRY 원칙에 대한 명백한 위반입니다. 조건을 변경하면 주석도 변경해야한다는 점을 기억해야합니다. 그렇지 않으면 관리자 나 사용자에게 지저분해질 수 있습니다.

사람들은 왜 이것을 사용합니까? 우리는 그것을 사용해야합니까, 아니면 나쁜 습관입니까?


PHP에서는 제어 구조를위한 대체 구문을 사용합니다if(condition): ... else: ... endif;
systemovich

@Geoffrey van Wyk-정말? 나는 아무도 템플릿 파일 밖에서 이것을 사용하는 것을 본 적이 없다. 그것들은 매우 비표준 적이지만, 그들 각자에게 나는 추측합니다.
Craige

4
@Craige : PHP가 기본적으로 지원하는 모든 언어 구성은 "Extremely Unstandard"이 아닙니다. PHP 인터프리터 "standard"이 무엇인지 정의합니다 .
Billy ONeal

Ada는 대부분의 구문 끝에 특정 마커를 가지고 if ... then ... end if; while ... loop ... end loop; procedure Foo is ... end Foo;있습니다. 가독성에 도움이된다는 것을 알게되었습니다 (컴파일러가 확인하지는 않습니다).
Keith Thompson

답변:


32

코드가 너무 길어서 괄호를 쉽게 따라갈 수 없다면 대부분의 언어에서 코드를 리팩토링해야합니다.

그러나 PHP와 같은 템플릿 언어에서는 조건 또는 루프 구조의 시작과 끝을 구분하는 큰 HTML 블록이있을 수 있으므로 유효 할 수 있습니다.


5
HTML과 혼합 된 PHP를 사용하는 경우 PHP에 대해 완전히 유효한 포인트입니다. 그리핀도르 1 점

3
HTML과 혼합 된 템플릿 언어로 PHP를 사용하더라도 여전히 들여 쓰기가 가능합니다. 또한 템플릿 언어로 PHP를 사용할 때 중괄호를 사용하지 말고 while(): endwhile;and 및 foreach(): endforeach;구문 등을 사용하십시오.
Htbaa

9
PHP를 리팩토링해서는 안되는 이유를 실제로 알지 못합니다. 아마 다른 언어로.
Tom Hawtin-tackline

@ Htbaa : 나는 항상 PHP를 사용하고 있다고 생각하지 못하고 그것에 대해 몰랐습니다. 감사! 들여 쓰기와 관련하여 조건부 HTML을 만드는 PHP와 일치하지 않고 페이지의 나머지 부분과 동일하게 들여 쓰기를 선호합니다.
Matt Ellen

3
@Tom : 웃었지만 죄책감을 느꼈습니다. : P

17

그것은 코드 냄새이며 일반적으로 구식 코드 스타일의 숙취입니다. 괜찮은 IDE 리팩토링이 지금보다 더 어렵고 일반적이지는 않았기 때문에 메소드가 길어졌으며 이러한 주석은 더 나은 탐색을 위해 사용되었습니다.


15

이것은 많은 요인들에 의해 쓸모없는 끔찍한 관행입니다.

  • 가장 현대적인 IDE는 캐럿이 기호 중 하나에있을 때 해당 버팀대를 강조 표시합니다.
  • 깨끗하게 코딩하는 경우 방법이 10 줄 이상인 곳은 거의 없습니다.

많은 사고 방식을 가진 많은 Java 프로그래머가 Java 코드를 더러워 보이게 만들고 코드에서 벗어나 주석에 집중합니다.

고인 이 사용에 대해 제안한다.


4
나는 이것을하는 동료 (자바 개발자)가 있습니다. // rof와 // fi를 사용한다면 // for와 //를 제외하고. 그것은 나를 미치게하고 그는 모든 곳에서 그것을합니다.
Jay

네, 고집 한 것이있었습니다. AAAAAGHHHHH.
Rig

2
이것은 실제로 Java 또는 Java 프로그래머와 관련이 없으며 Java로 프로그래밍 할 때 일반적이거나 사실상 표준 일이 아닙니다.
Jesper

1
"끔찍한 연습이다"는 +1,000
scunliffe

6

코드는 작성된 것보다 10 배 이상 읽습니다.

읽기가 더 쉬워지면하십시오.

또한이 작업을 수행하는 모든 사람에게 일을 더 쉽게 읽을 수있는 다른 방법을 찾아 보라고 제안합니다. 다른 사람들이 언급 한 리팩토링 기술, 다른 라인의 괄호 등은 모두 좋습니다. 코드가 자체 주석 처리되도록 여러 기능, 메소드 또는 클래스로 분할하는 것도 좋습니다. 대부분의 "ifs"를 제거하고 "for"루프를 명백한 위치에 배치하는 방법도 있으므로이 중 어느 것도 필요하지 않습니다.

그러나 때때로 사람들은 배우고 있습니다. 이것이 그들이하는 일이라면 실제로 코드를 더 읽기 쉽게 만들고 격려하고 다른 관행을 장려합니다. 배우는 사람들은 시작하는 방법에 관계없이 격려를받을 자격이 있으며 격려를받을 것입니다. "이것이 나쁘다"라고 말하는 것이 "이것이 더 낫다"고 말하는 것만 큼 유용하지 않습니다.


6
이것은 이다 나쁘다. 초보자 수준의 교과서조차도 이러한 난관을하지 않습니다. "코드는 작성된 것보다 10 배 이상 읽습니다."...이 코드 균열로 독자의 시간을 낭비하지 않는 더 많은 이유.
Thomas Eding

@trinithis 스위치가 20 개인 경우? 때로는 20 개의 서로 다른 옵션을 지원해야하므로 여러 수준의 의사 결정 체계에 "리팩토링"하는 것보다 한 곳에서 수집하는 것이 좋습니다.
quant_dev

나는 이것이 다른 사람들이 코드를 읽을만큼 똑똑하지 않다고 동료를 과소 평가하는 코더들에 의한 관행이라고 생각합니다. 일반적으로 나는이 연습에 위배되지만 누군가가 그것을 이해하지 못하면 거의 읽을 수 없게 만드는 정글이 있습니다. 어쨌든 나는 그것을하지 않습니다!
WinW

1
@trinithis 그것은 나쁜지 여부에 관한 것이 아니라 사람들이 더 나아지도록 도와주는 효과적인 방법에 관한 것입니다. 효과적이다> 옳다. 예를 들어, 더 엉망인 레거시 코드를 리팩토링하는 경우 수행하는 것이 합리적입니다. 때로는 나쁜 일이 더 나은 중간 단계를 만들어 그보다 더 나은 결과를 낳을 수 있습니다.
Lunivore

1
@trinithis 죄송합니다. 한 줄에 올랐을 때 무슨 뜻인지 알 수 없습니다. 필자는 이것을 수행하는 개발자가 배울 수있는 코드를 리팩토링하는 다른 방법도 있다고 언급했습니다.
Lunivore

4

이런 종류의 것들로 가득 찬 큰 (C ++) 코드베이스가 있습니다.

int Class::AccessorMethod(void)
{
    return privateValue;
}//end AccessorMethod

이 작은 것의 경우, 이것이 "코드 냄새"를 넘어서 "코드 악취"로 넘어 간다고 말하고 싶습니다. 특히 닫는 괄호를 키 입력과 일치시켜 여는 괄호를 찾을 수있는 IDE에서. 더 긴 방법이 주어지면 여전히 터미널 주석에 중괄호 일치를 사용합니다. 그러한 의견은 나를 산만하게하며, 나는 그것들을 소음으로 생각하는 경향이 있습니다.


음,이 사이트에서 일부 서식을 얻지 못한 것 같습니다. 메서드 본문과 마찬가지로 각 괄호는 자체 줄에 있어야합니다.
PSU

C ++에서는 숨겨진 구현 항목의 상단에 익명 네임 스페이스를 종종 열 것입니다. 그런 다음 어느 시점 에서이 괄호를 닫고 여기에서 괄호가 무엇을 의미하는지 아는 것이 유용합니다.
CashCow

4

C ++에는 여전히 유용한 두 가지 보류가 있으며 "코드 분리"에 대한 조언이 필요하지 않습니다.

  1. 네임 스페이스 네임 스페이스는 전체 파일을 포함 할 수 있으며 마지막 괄호는 때때로 사람들을 버릴 수 있으므로 괄호를 나타내는 주석을 추가하면 네임 스페이스를 닫는 것이 유용합니다. 우리 회사의 특정 코딩 스타일의 경우 중요한 것은 네임 스페이스를 들여 쓰지 않기 때문에 중요합니다. 그러한 들여 쓰기는 파일의 공간을 낭비 할 뿐이라고 결정했기 때문입니다.

  2. #ifdef / #endif 쌍의 경우. 때로는 조건부 컴파일을위한 많은 코드가 있으며, 중첩으로 인해 불쾌해질 수 있으며, 자주 사용하는 편집기는 들여 쓰기를 "돕고"자주 제거하므로 주석은 빠른 개요 중에 유용합니다.


네임 스페이스 설명 및 이유는 +1입니다. 그것이 내가하는 유일한 시간이고 같은 이유로
JohnB

+ 긴 스위치 문.
quant_dev

1

나를 위해 코드는 지정한 것과 같은 주석을 추가하기가 혼란 스럽습니다.

// IF 문이라고 표시되면. 그런 다음 왜 그것이 처음에 있는지 궁금해합니다.


나는 그것이 오래된 학교 라기보다는 주석 처리 된 줄처럼 보인다//endif
StuperUser

1

버팀대가 닫히는 것을 보는 대안은 닫는 것과 같은 열에 여는 것이 있습니다. 나는 훨씬 더 명확하고 읽기 쉽습니다.

이 주석은 오래 전에 공개 되었기 때문에 추적하기 어려운 경우에 유용합니다. 일반적으로 네임 스페이스 (특히 C ++의 익명 네임 스페이스, 컴파일 단위의 구현 세부 사항에 사용되는 네임 스페이스)에 대해서만 발생합니다. 대부분의 경우 닫는 내용이 분명해야합니다.


1

이것은 특히 EVE와 같은 윈도우 편집기를 사용하는 경우 80x24 문자 터미널 창에서 작업하던 시절에 비해 오래 지속 된 것입니다. 지금도 vim을 사용하여 터미널 세션에서 대부분의 작업을 수행하고 세션을 3 개 또는 4 개의 하위 창으로 분할 할 수 있으므로 한 번에 몇 줄만 볼 수 있습니다.

즉, 두 번 이상 베이컨을 구했을지라도 나는 대회에 온난화되지 않았다. 나는 단지 그것을 소음으로 본다. 루프 또는 조건이 그렇게 커지면 리팩토링을 살펴볼 수 있습니다.


0

기본적으로 이것을 사용하지 않는 모든 유효한 이유를 제공합니다. 괜찮은 프로그래머라면 누구나 이것을 적용해야합니다. 그래서 왜 않는 사람들은 그것을 사용? 그들이 잘못하고 더 잘 알지 못하기 때문에.


음, downvote를 설명 해주세요. 나는이 답변을 발명하지 않았으며 실제 경험에서 비롯됩니다. 내 옆에 몇 발을 앉아있는 내 동료는 10 귀가 넘는 프로그래밍을 해 왔으며 설명 할 때까지 왜 이것이 잘못되었는지에 대한 단서가 없었습니다. .
stijn

아마도 그것은 일부 교과서에서 사용되어 많은 사람들이 그것을 사용하여 대학에서 나왔습니까? 소개 텍스트에 장소가있을 수 있습니다. 또한 전 처리기, 특히 # ifdef / endif에서 가드 포함
Martin Beckett
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.