답변
플랫폼에서 채택한 명명 규칙을 사용해야한다고 생각합니다. C # 코드에서는 underscore_case가 이상하게 보입니다. Ruby의 camelCase =)
Comments
- 일관성이 핵심입니다. 지역 대회에 동의하든 그렇지 않든 일관성을 유지함으로써 자신의 시간을 더 쉽게 (및 다른 모든 사람 ' s) 만들 수 있습니다. (로컬 관례 자체가 불일치하지 않는 한) 또한 가독성은 대부분 잘못된 주장입니다. 코드를 충분히 읽으면 ' 읽을 수 없다고 결정하지 않는 한 차이가 거의 없다는 것을 알게됩니다.
- 전적으로 동의합니다. 예를 들어 팀의 새로운 사람들이 더 편하게 느낄 것이기 때문에 사용자 지정 방식 대신 플랫폼 규칙을 사용하는 것이 더 낫다고 생각합니다.
- 그러나 두 가지 규칙이있는 두 플랫폼에서 작업하는 사람들에게는 안타까운 일입니다. , 일부는 선호하고 일부는 다른 것을 선호합니다!
- 플랫폼에 2 개의 컨벤션이있는 경우 ' 모든 팀원에게 편안한 컨벤션에 투표하도록 요청합니다. =)
답변
솔직히 팀원 모두가 장기적으로 코드의 가독성이 중요하지만 모든 사람이 동일한 이름 지정 규칙을 준수하는 것이 중요하지만 기회는 둘 중 어느 하나가 더 자연스러운 것입니다.
댓글
- 당신은 완전히 옳습니다. 그러나 저는 ' 마녀에 대한 사람들의 의견을 찾으려고 노력하는 것이 더 나을 것입니다 (let '는 전체 팀에 대해 말합니다), 왜 … 어떤 사람들은 어떤 관습에 익숙해 지거나 다른 사람들은 다른 관습에 더 자연 스러울 수 있다는 것을 이해합니다.
Answer
John Isaacks의 답장에 따르면 :
“솔직히 코드를 읽기가 더 쉽습니다.”의견 또는 사실?
몇 가지 조사를하기로 결정했고 이 문서 를 찾았습니다. 과학은 주제에 대해 무엇을 말해야합니까?
- 낙타 케이스에는 정확성 가능성이 더 높습니다. 는 밑줄보다. (확률은 51.5 % 더 높음)
- 평균적으로 낙타 케이스는 0.42 초 더 오래 13.5 % 더 길어졌습니다.
- 교육은 스타일이 정확성에 영향을 미치는 방식에 통계적으로 유의미한 영향을 미치지 않습니다.
- 교육이 더 많은 사람들이 더 빨랐습니다. 카멜 케이스 스타일의 식별자.
- 한 가지 스타일로 교육하면 찾기 시간에 부정적인 영향을 미칩니다. .
내 블로그 게시물 에서 주제에 대해 검토합니다. 과학 논문을 작성하고 다음과 같은 결론을 내립니다.
낙타 케이스의 느림 만 ( 2) 은 프로그래밍과 관련이 있으며, 연구에 참여한 대부분의 camelCase 사용자와 최신 IDE로 인해 다른 점은 무관하다고 간주합니다. 토론 (설문 조사와 함께)은 블로그 게시물에서 찾을 수 있습니다.
이 기사가 의견을 어떻게 바꿀 수 있는지 궁금합니다. 🙂
댓글
- 물론 선호하는 밑줄 때문에 다른 모든 점수를 무시하고 다른 점수는 ' 사례에 도움이되지 않습니다.
- @Charles : 예, 아니오, IMHO 저는 왜 그들이 기각 될 수 있는지 좋은 주장을하고 있으며 그 중 일부는 논문 자체에서 문제가되는 것으로 논의되기도합니다. A 후속 문서는이 문서의 몇 가지 문제점을 조사하고 결과는 프로 밑줄입니다.
답변
Smartest Guys 복사
프로그래밍 언어의 경우 언어 개발자의 스타일을 복사합니다.
예를 들어 K & R에서 수행 한대로 정확하게 C를 코딩합니다.
그런 다음 누구나 지루한 코딩을 시작하려고 할 때 스타일 대화를 통해 “Dennis Ritche와 함께 이야기하고 그가 말하는 것을 알려주세요.”라고 말할 수 있습니다.
댓글
- 원본은 그렇지 않습니다. 항상 최고입니다. C에 관한 K & R 가스펠 책에는 많은 나쁜 관행이 있습니다. 이것이 화염 전쟁을 시작하기 전에 … MISRA 권장 사항 중 일부를 읽어보십시오.
- 잊지 마세요. ' K & R은 GUI-IDE가 없을 때 작성되었습니다. 대부분의 작업은 80×25 문자 터미널에서 수행되었으므로 화면 공간이 부족하여
if (...) {
를 사용하면 줄이 절약되었습니다! 요즘에는 ' 더 많은 화면 공간이 있습니다. 오늘날 고해상도 GUI IDE와 다중 모니터로 작성하면 K & R이 달라집니다. 설정? - 예,하지만 누군가가 K & R처럼 C를 코딩한다고 말하면 구식이라는 소품을 얻습니다.
- @quickly_now , Dennis Ritchie와 함께 그 내용을 알려주세요!
- MS에서 많은 형식을 채택했습니다. _internalToClassOnly, accessByGetter, PublicVariable.
Answer
일반적으로 camelCase를 선호합니다. 그러나 그것은 제 경력의 대부분이 스타일 가이드가 일반적으로 camelCase를 권장하는 언어와 환경에서 작업했기 때문입니다. (Java, ECMAScript, C ++). PHP 사용자 인 당신은 반대 선호도를 가질 가능성이 높습니다.
즉, threeOrFourWords를 넘어서거나 XmlForExample과 같은 이니셜을 사용하면 더 이상 읽기가 어렵습니다.
이것이 emacs가 안경 모드를 제공하는 이유입니다.
댓글
- 안경 모드를 발견하게 해준 +1입니다. camelCase를 사용하는 코드 파일에서 테스트 한 후 즉시 더 좋아 보이기 시작했습니다 (어셈블리 camelCase에 많은 라벨 포함).
- 알겠습니다. 안경 모드 란 무엇인가요?
- gnu.org/software/emacs/ manual / html_node / emacs / Glasses.html
답변
camelCase
이것은 가독성보다 항상”유형-가능성 “을 선택하게 될 몇 안되는 곳 중 하나입니다. CamelCase는 타이핑하기가 더 쉬우 며, 손가락을 더 잘 사용하면 약간의 가독성이 향상됩니다.
물론 프로젝트가 다른 표준의 기존 코드베이스를 기반으로 구축되지 않는다고 가정합니다.
댓글
- 동의하지 않습니다. ' 한 번만 코드를 작성하지만 나중에 여러 번 읽어야합니다.
답변
흥미로운 질문입니다. 여러 번 생각해 보았습니다. 하지만 확실한 답은 없다고 생각합니다.
“문화적”관습을 따르는 것은 좋은 선택입니다. 이 경우 “문화적”은 팀 / 회사에서 설정 한 규칙을 의미하며 기본적으로 언어 / 플랫폼 규칙도 따릅니다. 다른 사람들이 귀하의 코드를 쉽게 읽고 사용하도록 돕고 “귀하의 코드를 이해하는 데 추가 노력과 시간이 필요하지 않습니다.
허용 된 표기법을 깨는 것이 흥미로울 때도 있습니다. 저의 작은 프로젝트 중 하나입니다. (Python에서) 유틸리티 함수 / “protected”메서드에는 underscored_names
를, 메서드에는 Java 스타일의 methodNames
를 사용했습니다. 저희 팀은 만족했습니다. 그것으로 🙂
Answer
프로그래밍 언어에 따라 다릅니다.
헝가리 표기법 사용 여부에 대한 동일한 보트 :
- Python : underscore_case, 헝가리 표기법 없음
- C ++ : camelCase, 헝가리 표기법
댓글
- @Kevin Cantu : 사실 Javascript라는 이름은 camelCase가 아닌 PascalCase에 있습니다 …
- @Guffa : touch é!
- @Kevin Cantu : JavaScript :
XMLHttpRequest
<- 나는이 이름이 싫어 열정. - hypotheticalReasonsToNukeRedmond.push (XMLHttpRequest)
- @Lionel : 실제로 헝가리 표기법은 C ++에서 거의 사용되지 않습니다. C ++는 이미 유형을 확인하기 때문입니다. ' 무엇보다도 역사적인 유물입니다.
답변
둘 다!
저는 CakePHP에서 많은 개발을하고 있으며 CamelCase
또는 $underscored_vars
, 다음과 같은 방식으로 (CakePHP 프로젝트 외부에서도) :
- 파일 이름 —
/lowercased_underscored.php
일반적이지만 언급 할만한 가치가 있습니다. - 클래스 —
class CamelCase extends ParentObject
.CamelCase
를 사용할 때 초기 문자는 소문자가 아닙니다.camelCase
가 정말 이상하게 보입니다. - 변수 —
$are_variables_underscored === TRUE;
- 인스턴스를 보유하는 변수 —
$CamelCase = new CamelCase();
- 배열 키 —
$collection["underscored_keys"];
- 상수 — 제 생각에는 모든 사람은 상수가
ALL_CAPS_AND_UNDERSCORED
이어야한다는 데 동의 할 수 있습니다. - 방법 —
$CamelCase->foo_method_underscored();
- 정적 메서드 —
CamelCase::just_like_regular_methods();
댓글
- 동의해야하며 첫 번째 문자는 더 낮습니다. 사건은 나를 미치게 만든다! 나는 열정을 가진 camelCase를 싫어합니다.
- 이름이 일반적으로 camelCased 인 Java에서 클래스 이름은 실제로 대문자로 시작합니다. 이는 메소드 이름과 구별하기위한 것입니다.
답변
개인적으로는 왜냐하면 더 읽기 쉽다고 생각하지만 기존 코드베이스와의 일관성이 훨씬 더 중요하다고 지적하는 다른 답변자들의 의견에 동의합니다.
그러나 “라고 말하는 사람들에 대한 반례가 있습니다. 언어 및 해당 라이브러리의 규칙을 따르십시오. “.
과거에는 underscore_case
를 사용하여 Windows에서 C 코드를 작성했으며 Win32 함수 :
if (one_of_our_conditions_is_true()) { call_one_of_our_functions(); CallSystemFunction(); }
함수 이름과 Microsoft의 함수 이름 사이의 시각적 차이는 방해가 아니라 도움이었습니다. 코드가 “시스템 랜드”로 들어갈 때 명확하게 표시되었습니다.
또한 편집기의 구문 강조 규칙을 변경하여 다른 색상으로 표시 할 수 있었기 때문에 시도 할 때 추가 시각적 단서를 제공했습니다. 익숙하지 않은 코드 섹션 (또는 내 코드)을 이해합니다.
답변
저는 Dylan의 그냥 평범한 대시가 타이핑하기 쉽고 쉬운 것처럼 정말 마음에 듭니다 -to-read.
좋아요
result-code := write-buffer(file-stream, some-string)
하지만이 언어는 상당히 모호하므로 주제에서 벗어난 것 같습니다. .. : (
댓글
- 밑줄을 입력하기 위해 Shift 키를 누르는 것도 지쳤습니다.
- 이것은 일반적으로 불가능합니다. 변수 이름의 경우 "-"는 일반적으로 마이너스를 의미합니다.
답변
대학에서 camelCase를 사용하는 법을 배웠습니다. 지난 몇 년 동안 몇 가지 다른 규칙을 사용했지만 다른 어떤 것보다 camelCase를 선호합니다. camelCase가 실제로 읽고 이해하기 가장 쉬운 곳에서 읽은 것을 기억합니다.
댓글
- 글쎄요 ' 어딘가에서 읽었으므로 더 쉽지 않습니다. ' 첫 번째 작업은 주로 익숙해 졌기 때문입니다. 예를 들어 i ' underscore_case에 더 익숙합니다.
- i ' 연구가 완료되었으며 더 나은 것으로 확인되었음을 읽었습니다.
답변
대부분의 사람들이 언급했듯이-기존 표준을 사용하십시오.”새 프로젝트 인 경우 사용할 언어 및 프레임 워크에 대한 표준을 사용하십시오.
혼동하지 마십시오. 이것은 가독성 (주관적)에 관한 것이 아니라 일관되고 전문적인 것에 관한 것입니다. 수많은 “표준”이있는 코드베이스에서 작업 한 사람이라면 누구나 이해할 수있을 것입니다.
답변
때로는 믹스를 사용합니다. module_FunctionName. 내 모듈의 모든 (비 정적) 함수는 모듈 약어로 시작합니다.
예를 들어 I2C 버스에서 버퍼의 내용을 보내는 함수 :
i2c_BufferSend()
대체 i2c_buffer_send
는 접두사와 함수 이름을 충분히 크게 구분하지 않습니다. i2cBufferSend
는 접두사가 너무 많습니다 (이 모듈에는 상당히 많은 I2C 함수가 있습니다).
i2c_Buffer_send
가 대안 일 수도 있습니다.
제 대답은 프로젝트에 가장 적합한 방식 (언어, SW 아키텍처 등)에 적응한다는 것이며, 이러한 스타일을 혼합하는 것이 유용 할 수 있다는 점을 지적하고 싶었습니다.
myGeneralOpinionIsThatNamesAreMuchHarderToReadInCamelCase. I_respect_the_fact_that_some_could_think_otherwise_but_I_do_not_really_understand_why.
댓글
- 마지막 두 줄에 +1,하지만 명명 규칙을 결합하는 것은 권장하지 않습니다.other.
- 관례가 잘 정의되어있는 한 (접두사 + 밑줄 + PascalCase) …
- 나는 의미 상 분리 된 이름 부분을 구분하기 위해 밑줄을 사용하는 것을 좋아합니다. 특히 절반의 공통성이 중요 할 수있는 경우에 그렇습니다. 예를 들어 루틴
Motor1_Start()
,Motor2_Start()
,Motor1_Stop()
및Motor2_Stop()
관계는 밑줄없이 명확하지 않을 수 있습니다.
답변
개인 , 저는 camelCase를 선호하지만 일부 글꼴에서는 밑줄이 더 읽기 쉽다고 생각합니다.
변수 집합을 구분하기 위해 접두사를 사용해야하는 경우 네임 스페이스를 만들 수있는 언어를 사용해야합니다. 또는 그 정보를 담을 수있는 물건이나 무언가.
myName = 7 bobsName = 8 // :( me.name = 7 bob.name = 8 // :D
마찬가지로 유형을 구별해야하는 경우 유형을 허용하는 언어를 사용하지 않는 이유는 무엇입니까?
var intThingy = 7; // :( int thingy = 7; // :)
그렇게 똑바로하고 “이름을 메타 데이터로만 사용하는 것이 아니라면 이름이 충분히 길지 않습니다.” 추가 키 누르기를 선호하는지 여부는 매우 중요합니다.
댓글
- camelCase 또는 underscore_case를 사용하는 이유 중 하나는 내가 사용하지 않기 때문입니다. ' 개체 정의를 찾아야합니다.
답변
처음에는 dafmetal에 동의합니다. . 다른 프로그래밍 스타일을 혼합하지 않는 것이 가장 중요합니다. 하나의 동일한 파일에서이 작업을 수행하는 것은 IMHO를 수행 할 수있는 최악의 경우입니다. 다른 파일에 걸쳐 산만하지만 치명적이지는 않습니다.
다음으로해야 할 일은 작성하는 언어에 널리 사용되는 명명 규칙입니다. instnace를위한 내 C ++ 코드는 분명히 Python의 경우와 다르게 보입니다 (PEP8은 여기에 좋은 가이드입니다).
상수에 대해 UPPER_CASE를 사용하는 것만 큼 다른 이름 지정 규칙을 사용하여 다른 것을 참조 할 수도 있습니다. 물론 언어), 로컬 변수 이름에는 this_style을 사용할 수 있지만 인스턴스 / 멤버 변수에는 camelCase를 사용할 수 있습니다. 그러나 self
또는 this
와 같은 항목이있는 경우에는 필요하지 않을 수 있습니다.
업데이트
플랫폼 Foo 마녀가 어떤 명명 규칙도 권장하지 않고 하나를 선택하는 것이 팀 리더의 선택 인 경우를 예로 들어 보겠습니다. 당신이 바로 그 팀 리더입니다. 왜 camelCase를 선택하거나 underscore_case를 선택해야하나요?
하나의 장점은 실제로 없습니다. 이 문제는 매우 주관적이며 일단 합의되면 차이를 만들지 않습니다. 이 작은 것들에 대한 종교적 전쟁은 항상 있습니다. 그러나 어느 쪽이든 조정하면 토론이 완전히 불필요 해 보입니다.
Alex Martelli가 매우 유사한 문제에 대해 인용하려면 :
물론, 루비에서는 각 블록의 끝에 어리석은 “끝”을 입력하는 것이 지겨워집니다 (단순한 들여 쓰기가 아님). 그런 다음 똑같이 어리석은 “:”를 입력하지 않도록합니다. 파이썬은 각 블록의 시작 에 필요하므로 “거의 워시 :-)”@foo “와”self.foo “와 같은 다른 구문 차이 또는 대소 문자의 중요성이 더 높습니다. Ruby와 Python은 정말 저와는 무관합니다.
다른 사람들은 의심 할 여지없이 이러한 문제를 기반으로 프로그래밍 언어를 선택하고 가장 뜨거운 논쟁을 불러 일으 킵니다.하지만 저에게는 실행중인 Parkinson의 법칙 중 하나의 예 ( 문제에 대한 토론의 양은 문제의 실제 중요성에 반비례합니다. ).
출처
당신이 팀 리더라면, 하나만 사용하면됩니다. 하나는 다른 것보다 장점이 없기 때문에 주사위를 던지거나 더 좋아하는 것을 고를 수 있습니다.
답변
나는 몇 년 전에 “영어를 모국어로 사용하지 않는 프로그래머가 낙타 케이스를 이해하기 쉽게 밑줄 케이스를 찾는 경향이 있음을 읽었습니다. 그러나 참조를 찾을 수 없으며 그것이 사실인지 전혀 모릅니다.
Answer
Java, Python, C ++와 같이 제가 사용한 프로그래밍 언어의 경우 명확한 형식을 채택했습니다.
- ClassNamesArePascalCase
- methodNamesAreCamalCase
- variable_names_are_underscore
- CONSTANT_VARIABLES_ARE_CAPITAL_VARIABLES
이렇게하면 내가 무엇을 다루고 있는지 즉시 파악합니다.이 기능이 나 자신을 위해 유지하는 데 유용하고 코드를 읽는 다른 사람이 쉽게 따라야한다는 것을 알게되었습니다. 다른 사람들이 언급했듯이 일관성이 가장 중요하다고 생각합니다. 그래서 내 형식을 찾습니다. 유지 관리가 간단하고 이름 유형간에 명확한 구분을 제공합니다. interface_Names_Are_Like_This 및 Abstract_Classes_Are_Like_This를 가능한 확장으로 상상할 수 있지만 따라가는 것이 더 복잡하고 구분하는 데 유용하지 않은 것 같습니다.
또한 HTML 파서와 같은 PascalCase에서 HTMLParser 또는 HTMLParser 대신 HtmlParser와 같은 이름을 엄격하게 지정하는 것이 유용함을 발견했습니다. HTMLparser. 엄격한 규칙을 기억하는 것이 더 쉬우 며 단어 경계를 더 명확하게 유지하기 때문입니다 (안타깝게도 HTML이나 SQL과 같은 철자가 틀려 야합니다). 마찬가지로 camelCase와 마찬가지로 HTMLParserMethod 또는 HTMLparserMethod 대신 htmlParserMethod를 사용합니다.
업데이트 :
이후 개인 변수를 포함하도록 이러한 규칙을 확장하는 데 사용되었습니다.-_private_variable_names_are_prefixed_with_an_underscore-_PRIVATE_CONSTANT_VARIABLES_ARE_PREFIXED_WITH_AN_UNDERSCORE
자바에서는 비공개 필드가 정의에 따라 로컬 변수와 다른 네임 스페이스에 있음을 의미합니다. 즉, 비공개에서는 this.
를 건너 뛸 수 있습니다. 필드. 다른 형식에서 “m
“접두사를 보았지만 이러한 형식은 변수 이름으로 camelCase도 사용합니다.이를 통해 내부적으로 만 액세스해야하는 필드를 구분할 수도 있습니다. 클래스 별 (그리고 클래스 외부에서 발생하는 경우 super 명확하게 object._field_x
눈에 띕니다).
답변
내게 문제 였다면 강제하거나 암시하지 않을 것입니다. 특정 스타일의 사용은 프로그래머로서 IfItIsInCamelCase 또는 in_underscore_space 또는 in_SomeOtherStyle 기호를 읽을 수 있고 그 의미를 이해할 수 있기 때문입니다.
이제 관례에 대한 주된 주장은 함수 / 변수 이름의 형식이 무엇인지 미리 알고 있으며 조회 할 필요가 없다는 것입니다. 바로 LoadXMLFile, loadXMLFile입니다. , LoadXmlFi le, load_xml_file? 이제 “인텔리 센스 스타일 자동 완성을 지원하는 IDE를 구하십시오!” (항상 가능한 것은 아닙니다).
결국 컴파일러 / 인터프리터가 정말로 신경 쓰지 않기 때문에 어떤 스타일을 사용하든 상관 없습니다. 중요한 것은 이름이 유용하다는 것입니다.
NumberOfPrisonersReleasedByAccident manufacturer_name distance_EarthToMoon
세 가지 스타일이지만 각 스타일이 무엇을하는지 정확히 알고 있습니다.
댓글
- 저는 소스의 모양이 중요합니다. " 실용적인 프로그래머 " '의 깨진 창 이론을 참조하세요. 다양한 명명 규칙은 모양을 더 나쁘게 만듭니다. pragprog.com/the-pragmatic-programmer/extracts/software-entropy
- @Gauthier : ' 깨진 창 ' 아이디어, 저는 ' 기호의 대문자 사용이 깨진 창 '. Haphazardly 레이아웃 코드는 확실히 그렇습니다. 현재의 프로젝트에는 가능한 한 정리하려고 노력하는 많은 것이 있습니다.
- 동의합니다. 나는 세 가지 모두를 똑같이 잘 읽을 수 있습니다. ' 중요하지 않습니다. 나는 파일이 사용하는 것을 사용하고 언어가 제안하는 것 (python)을 사용하고 프로젝트가 가장 잘 제공 될 것이라고 생각하는 것을 사용합니다. (예전에는 gwbasic에서 프로그래밍을했는데 모두 대문자였습니다. 예전에는 좋았습니다!)
Answer
어리석은 것처럼 보일 수 있지만 밑줄이 얇고 여러 줄 텍스트로 숨겨져 서 그리워하기 때문에 밑줄을 좋아하지 않습니다. 또한 일부 (많은) 텍스트 편집기 및 / 또는 개발 환경에서 두 번 클릭하면 토큰 이름을 강조 표시하여 복사하거나 끌어서 놓으면 시스템이 전체 토큰을 강조 표시하지 않고 인접한 밑줄 사이에있는 토큰의 한 부분 만 강조 표시합니다. >
Answer
저는 대부분의 개발을 Eclipse (Java, PHP 및 JavaScript 용)에서 수행한다는 어리석은 이유 때문에 camelCase를 선호하는 경향이 있습니다. Ctrl + ← 또는 Ctrl + → 단어를 통해 실제로는 camelCase 경계에서 멈 춥니 다.
예 : myIntVariable
는 Ct rl + ← → ”
이상한 점은 알고 있지만 camelCase 이름의 중간 단어를 편집 할 수있는 것을 선호합니다.