네이밍 컨벤션 가이드 라인에 관심이 있습니까?


13

.Net 규칙을 사용하여 변수 이름을 지정합니다.

  • 변수와 필드에 대한 camelCase (클래스의 개인 필드에 _camelCase를 사용하는 경향이 있습니다)
  • 메소드, 프로퍼티 및 클래스를위한 PascalCase

내가 벗어난 유일한 곳은 상수와 열거 형에있어서 실제로 Java SCREAMING_CAPS 스타일을 선호합니다.

우리 회사의 코드베이스는 VB6 및 VBScript의 의사 헝가리어 표기법 스타일로 가득 차 있습니다.

  • 문자열의 경우 s 또는 str
  • Int의 경우 i 또는 int
  • 소수점 이하 d (또는 때때로 두 배)
  • 모든 종류의 객체에 대해 o 또는 obj

다른 사람의 코드에 사용 된 코드 스타일 (레거시 크루프뿐만 아니라 그린 필드 코드에서도)을 볼 때마다 나는 그 스타일을 직접 사용하기를 거부합니다. 나는 과거에 .Net 명명 규칙에 대한 표준화를 가져 왔으며 무시되었습니다. 헝가리 표기법으로 쓰는 사람들은 계속 그렇게합니다. 나를 좋아하지 않는 사람들은 우리 자신의 스타일을 계속 사용합니다. 우리 표준화 한다면 (내가 계속 추진하고 있지만 다른 사람은 신경 쓰지 않는 것 같습니다), 헝가리어 표기법에 따르고 권장되는 방법은 아니며 그런 코드를 작성해야합니다. .

이것과 관련하여 두더지에서 산을 만들고 있습니까? 코드가 중복 식별자와 설명이 아닌 이름으로 흩어져 있는지 걱정하지 않고 내 방식을 계속 사용하고 표준이되도록 추진해야합니까?


2
좋은 질문. 명명 규칙은 방해하지 않고 도움을주기 위해 있습니다. 그들이 원래의 목적이 더 이상 관련이 없기 때문에 그들이 방해 할 때 그들을 버린다.
게리 로우

답변:


7

당신이 신경 써야 할 것은 사람들이 물건을 조금 청소하는 것에 신경 쓰지 않는 팀에서 일하고 있다는 것입니다. 매우 슬프다.

당신이하는 일을하고, 현대적인 스타일을 계속 사용하고 사람들을 초대하십시오 (강제하지는 마십시오). 물론 시간이 걸릴 것입니다. 시간이 지나면 어디로 가고 있는지와 다음에 무엇을하고 있는지 알 수 있습니다.

추신 :이 이슈에 관한 회의를 주선하고 관련된 모든 사람을 초대하십시오. 그럼 당신은 그들의 모든 관심을 얻고 문제를 표시하고 당신의 접근 방식을 제시합니다. 그것은 그들에게 생각할 무언가를 줄 것입니다. 아마도 지역의 시도에서 그들은 당신을 매우 진지하게 받아들이지 않을 것입니다.


+1 요즘 리 팩터 리 네임 (Refactor Rename Rename)은 매우 효율적이므로 변경에 따른 영향을 거의 느끼지 못할 것입니다.
게리 로우

2
슬프게도 우리 팀의 사람들은 그것을 사용하지 않습니다. 그들은 이름이 잘못되어도 이름을 바꾸는 것을 두려워합니다. 예를 들어 SendNewCustomerEmail, 새로운 고객 이메일뿐만 아니라 모든 종류의 이메일을 보내는 데 사용되는 메소드 가 있습니다. 현재 개발자의 의견에 "이 이름은 오해의 소지가 있습니다"라는 의견이 있지만 아무도 더 일반적이고 유용한 것으로 이름을 바꾸는 것을 고려한 사람은 없습니다. 그렇다면 관리자에게 요청하는 이유는 무엇입니까? '값을 추가하는 대신 변경할 필요가없는 코드를 변경하고 있습니다.
Wayne Molina

3

헝가리어 표기법이 개인의 출력 / 품질에 영향을 미치는지 아닌지, 아니면 자아를 더 손상시키는 지 여부를 스스로에게 물어봐야 할 수도 있습니다. 자아, 나는 일이 일반적으로 잘 작동한다는 것을 의미하지만, 외부에서 존경하는 누군가가 부끄러운 구식 코드를 보길 원하지 않을 것입니다. 우려 사항에는 고유 한 장점이 있다고 생각하지만 전환해야하는 모든 사람이 겪게 될 품질 / 생산성 적중과 비교해야합니다.

이 스타일 헝가리어는 .Net에서 "I"와의 인터페이스를 제외하고 다른 시간에 대한 인터페이스를 제외하고는 타당하지 않다는 점이 분명하지만, 이것은 일종의 기술 부채 문제 입니다. 기술 부채는 자연스럽게 사라질 때까지 살 수 있습니다 .


4
나는 "I"접두사를 신경 쓰지 않고 인터페이스 이름이 CustomerRepository있고 클래스가 CustomerRepositoryImpl비슷하거나 비슷한 Java 수수께끼를 피하기 때문에 사용합니다 .
Wayne Molina

3
+1-더 좋은 방법이 있어야합니다. 나는 때때로 "헝가리어 라이트 (Hungarian Light)"를 사용하지만 접두사는 항상 타입 관련이 아닌 비즈니스 관련입니다. 예를 들어, 회계의 모든 항목에는 AP와 AR이 있으며 종종 송장과 같은 이름을 갖습니다. ARInvoice와 APInvoice를 갖는 것은 나에게 완벽하게 합리적입니다. 헝가리어가 항상 나쁘지는 않습니다.
Morgan Herlocker

@Wayne M 당신은보고 할 수 있습니다 programmers.stackexchange.com/questions/75956/...
게리 로우에게

나는 "헝가리어 표기법"을 고려하지 않을 것입니다. 왜냐하면 당신이 말했듯이 사람들이 알고있는 잘 정의 된 약어가있는 비즈니스 의미이기 때문에 XML Xml대신 접두사를 사용하는 코드를 사용하는 것과 같은 줄을 가지고 있습니다 ExtensibleMarkupLanguage. 회계 모듈에서 나는 것 기대 같은 송장 개체를 볼 수 arInvoiceapInvoice비즈니스 컨텍스트를 전달하지만,보고 objArInvoice또는 oApInvoiceIMO 단지 바보입니다. 나는 그것이 더 나쁠 수 있다고 생각한다, 그것은 clsApInvoice실제 학급 이름을
Wayne Molina

1
@ironcode : 실제로 시스템 헝가리어 표기법 대신 Apps 헝가리어 표기법이라고 불리는 것이 훨씬 좋습니다. 대부분의 사람들은 불행히도 시스템을 사용하고 있습니다. en.wikipedia.org/wiki/…
Miki Watts

2

현대 IDE 옆에 헝가리어 표기법에 대한 가장 좋은 주장은 작은 기호와 도구 설명 텍스트가있는 색상으로 유형, 가시성 및 변수의 더 많은 것들을 보여줄 수있는 많은 방법을 가지고 있습니다.

  • (b) ool (f) loat (c) har (l) ong (s) hort (String? no : (S) tring), (v) oid와 더 많은 구별을 장려하십시오.
  • 가시성을 인코딩하도록 장려하십시오. Javaland 출신이며 .net에도 적합하기를 바랍니다. (pri) vate, (pub) blic, (pro) tected (def) ault를 사용해야합니다.
  • .net에 최종 / const가 있습니까? 접두사로 만드십시오! '휘발성'이 들립니까?
  • 왜 int와 long에 접두사가 필요하지만 다른 객체는 필요하지 않습니까? 논리적이지 않습니다. abbrev.tab을 작성하십시오. 모든 새로운 객체는 별개의 abbrev를 얻습니다.
  • null이거나 null이 아니어야하는 변수도 접두사로 사용할 수 있습니다. 영리한 사람들은 전체 DbC를 변수의 접두사에 넣습니다.

진지하게 : 리팩토링에서 변수를 int에서 long으로, String에서 char로 변경할 수 있습니다. 이름도 변경할 필요가 없습니다.

IDE에서는 측면의 상자에 이름이 정렬되는 경우가 많습니다. 쉽게 찾을 수있는 이름별로 정렬되어 있습니다. 대부분의 변수가 o 또는 i로 시작하면 눈이 이름의 중요한 부분에 도달하는 데 방해가됩니다.

추가 문자는 변수의 의미를 방해합니다. 정수 'sane'은 'i'sane'을 얻습니다.

헝가리어 표기법은 유형 시스템이없는 언어에서 도움이되었습니다. 컴파일러가 특정 유형을 시행하는 경우 필요하지 않습니다. 헝가리어 표기법에 대해 라멘토를 공감적인 '예, 장로 프로그래머에게는 예전에는 사용하는 것이 합리적이었습니다!'로 라멘토를 꾸미면, 그 장로 프로그래머는 헛된 것이며 오래된 것으로 식별되지 않는 것을 선호합니다.

그러나 기술이 작동하려면 조심해야합니다. '고급 프로그래머'에 대해 이야기 할 때, 목소리를 내고, 느끼게하고, 얼마나주의를 기울이고, 얼마나 돌봐야하는지 목소리를 낮출 수 있습니다. 그래서 방의 세 번째 사람이 당신이 무언가를 숨기려고 노력하고 있음을 인식하고, 물론 그의 호기심을 높일 것입니다.


슬프게도 나는 또한 eSomeEnum장소 에서도 사용되는 것을 보았다 . 고맙게도 자주는 아닙니다.
웨인 몰리나

2

Framework Design Guidlines 사본을 구입 하여 관리자 (또는 코딩 스타일을 관리하는 사람) 책상에 놓으십시오. 일관성의 중요성을 강조하는 서두를 눈에 띄게 게시하는 메모를 게시하십시오. 포인트를 집으로 더 몰아 가려면 Clean Code 의 사본을 얻고 코딩 규칙에 관한 섹션에 책갈피를 넣으십시오.


1

어떤면에서 이것은 주관적인 문제이며, 내가 잠시 동안 즐거워했던 프로그래밍 미누 타 (철자법) 논쟁 중 하나입니다. 헝가리어 표기법이 추방되어야 할 죄라고 생각하지만 일관성이 더 중요하다고 생각합니다.

그런 맥락에서 팀이 유형 기반 명명 규칙 대신 도메인 중심 변수 명명을 사용하도록 설득하기 위해 최선을 다할 것입니다. 공통 코드베이스.

나는 표준 그룹에 의해 부과 된 일반적으로 위임 된 표준에 찬성하지 않지만, 소프트웨어 팀은 자체 표준을 개발하고, 더 중요하게는 표준을 고수합니다.


1

resharper를 사용하면 이름을 바꾸는 변수가 너무 빠르므로 명명 규칙을 너무 빨리 고려하여 취소 할 수 있으므로 오래되고 잘못된 제목 규칙을 그대로 두지 않아도됩니다.

리팩토링 도구가 없다면 코드베이스의 기존 규칙을 따르도록 제안한 다른 주석 작성자에게도 동의합니다. (한 시점까지, 변수 이름 지정 규칙이있어 버그 생성기로 바꾸면됩니다.)


0

귀하의 우려는 대부분 유효하며 새로운 개발자와 아마도 당신의 정신을 편하게 해 줄 것입니다. 모두 채택해야 할 규칙은 설명적인 이름입니다. 스타일이 얼마나 나쁜지에 따라 스타일을 크게 바꾸지 않고도 이에 대한 합의를 얻을 수 있어야합니다. 그 밖의 모든 것에는 책임이있을 때까지 기다리거나 현재 회원을 생각하고 느끼는 새로운 개발자로 교체하십시오.


0

내 편차 :

  • _PublicPropertyBacker
  • _private_property_backer
  • _privateMember
  • CONSTANT_MEMBER
  • private 함수
  • param_
  • 개인 버튼 okBU; //기타. 3 자 이내
  • struct SOMESTRUCT // pinvoke 구조체 용

일반 코드 영역 및 파일 레이아웃 :

  • 회원
    • (개인 | 내부 | 보호 | 공개) X [정적] X [계속 / 읽기 전용]
  • 속성
    • (개인 | 내부 | 보호 | 공개) X [정적] X [읽기 전용]
  • 생성자
    • (개인 | 내부 | 공개 |) [정적]
  • 명령 // void return 또는 status return이있는 항목
    • (공개 | 보호 | 내부) X [정적]
  • 이벤트 처리기 / private /
    • (제어 | 원격 | 서비스 | 기타) 이벤트
  • 함수 // 상태를 쿼리하며 부작용이 없어야합니다.
    • (공개 | 보호 | 내부) X [정적]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.