유형 및 범위 접두어가 명명 규칙에 가치가 있습니까?


14

최근 소프트웨어 개발자로 첫 직장을 시작했을 때 코드에서 명명 규칙을 따를 필요가 없다는 이야기를 들었습니다. 다른 더 큰 프로젝트를 수행하는 그룹이 작성한 코드는 명명 규칙을 따랐지만 새로운 독립형 응용 프로그램을 작성하게 되었기 때문에 특히 중요하지 않다는 느낌이 들었습니다. 그것은 나의 마지막 걱정이었다. 그래서 나는 단지 그 기존의 컨벤션을 가지고 그것을 따라 갔다.

int nTickCount  
bool bConnected  
object[] m_aItems  
fSum += fWeight * fValue  
class cManager  
enum etSystemStates  
etSystemStates eState  
cManager.cs

그러나 실제로 가치가 있습니까? 이런 종류의 명명 규칙을 따르면 오류를 이해하고 감지하는 데 미치는 순 영향을 판단하기는 어렵지만 시각적으로 보기에는 추악합니다. 또한 cSomething이라는 프로젝트의 모든 클래스와 파일을 갖는 것은 꽤 어리석은 것처럼 보입니다.

나는 당신이 사용하는 알고리즘과 아키텍처와 같이 명백한 차이를 만드는 것들과 비교할 때 원격으로 큰 문제라는 환상 아래 있지 않습니다. 그러나 내가 작성한 모든 코드 줄에 영향을 미치는 모든 규칙은 올바르게 가치가있는 것처럼 보입니다.

하나를 사용해야하는 경우 가장 우아하고 효과적인 명명 규칙은 무엇입니까? 유형 및 / 또는 범위를 나타 냅니까?

답변:


28

Joel Spolsky는 헝가리어 표기법이 존재하는 이유와 질문에 대한 답변을 제공하기 위해 의도 된 내용대한 기사 를 썼습니다 .

데이터베이스 테이블의 경우 tbl, 정수의 경우 int 등의 접두어는 일반적으로 유용하지 않습니다. 이러한 경우 컨텍스트 또는 개발 도구의 내용을 해결하는 것이 쉽지 않습니다. 영국식 측정의 경우 imp와 미터법의 경우와 같은 것이 더 의미가 있습니다. 그렇지 않으면 부동 소수점 숫자라는 것을 알 수 있기 때문입니다.

area = width * height

동안 완벽하게 보인다

impArea = metWidth * impHeight

무언가 잘못되었음을 바로 보여줍니다.

개인적으로 나는 단지 설명 변수 이름을 사용합니다. $ number_of_items는 분명히 정수입니다. $ input_file_handle, $ is_active 및 $ encrypted_password는 언어 데이터 유형과 의미 유형 모두에서 명백한 유형을 갖습니다.


13

당신이 설명하는 것을 헝가리 표기법 합니다. 한 번 모범 사례로 여겨졌지만 일반적으로 지금은 눈살을 찌푸립니다.

Wikipedia 기사에는 장단점이 나와 있습니다.


13

예, 접두사 가 유용 수 있지만 몇 가지 제안이 있습니다.

팀 전체가 동일한 규칙을 사용하는 경우 훨씬 더 유용합니다. 스스로 사용하는 것은 덜 도움이됩니다.

정적으로 유형이 지정된 언어에서는 변수 유형 만 복사하지 마십시오. 예를 들어, "bSubscribed"는 IDE가 이미 어떤 유형인지 알고 있기 때문에 C # 또는 Java에서 부울 변수의 잘못된 이름입니다. 반면 부울 유형이없는 C에서는 유용한 정보가됩니다.

C # 및 Java에서는 개체가 null 일 수 있음을 나타내는 접두사를 고려할 수 있습니다. 또는 문자열이 HTML 이스케이프되었습니다. 또는 정규식 또는 sql 문을 나타냅니다. 또는 배열이 정렬되었습니다. 상상력을 발휘 해봐.

기본적으로 변수 이름으로 무엇을 말하고 싶은지 스스로에게 묻는 문제이며, 도메인과 작업중 인 언어에 따라 다릅니다.


7

명명 규칙에는 몇 가지 다른 "스타일"이 있으며 대부분은 코드를 이해하기 쉽게 만드는 데 가치가 있습니다.

더 중요한 것은 변수와 함수에 설명적인 이름을 사용하는 것입니다. "sum", "weight"및 "value"를 사용하는 예에서 "totalCost", "lumberWeight", "lumberValuePerOunce"와 같이보다 의미있는 이름을 지정할 수 있습니다 (여기서는 가정)

대부분의 현대 언어에서 유형을 나타내는 문자로 변수 이름 앞에 붙는 것과 같은 규칙을 찾습니다.


6

대부분의 .NET 개발자는 Microsoft의 디자인 지침 ( http://msdn.microsoft.com/en-us/library/ms229042.aspx)을 따릅니다 . 와 매우 유사한 )을 (주된 차이점은 Microsoft가 멤버 이름으로 Pascal Case를 선호하는 반면 Java는 낙타 사례 호의).

그 외에도, 추가 한 추가 노이즈로 인해 코드 샘플을 읽기가 훨씬 어렵습니다.



5

데이터 형식 (특히 기본 데이터 형식)으로 변수 이름을 접두사로 지정하면 시각적 노이즈가 증가하고 작은 변경으로 인해 큰 이름이 바뀔 위험이 있습니다.

첫 번째 요점으로, "intStudentCount"가 "numberOfStudents"보다 더 명확합니까? "invoiceLineItems"는 최소한 "aobjItems"만큼 유익하지 않습니다. (데이터 유형은 하위 수준 표현이 아니라 문제 영역의 데이터 의미와 관련이 있어야합니다.)

두 번째 요점은 예를 들어 int의 조기 선택이 long 또는 double로 대체되면 어떻게됩니까? 더 나쁜 것은, 구체적인 클래스가 여러 구현 클래스와의 인터페이스로 리팩토링되면 어떻게됩니까? 현실적인 유지 보수 시나리오의 부담을 증가시키는 모든 관행은 나에게 의심스러워 보입니다.


4

접두사가 붙은 것과 반대로 이름 앞에 접두사가 붙는 이유에 따라 달라질 수도 있습니다 .

예를 들어, 폼의 컨트롤 이름에 1-2 자 접두사를 사용하는 경향이 있습니다. 컴파일러가 버튼에 적합한 클래스를 쉽게 찾을 수 있다는 것을 알지 못하기 때문에 (예를 들어) 먼저 큰 양식을 디자인 한 다음 나중에 대부분의 코드를 작성하는 경향이 있습니다.

버튼 에 bt 접두사가 있으면 이름이 많이 뒤섞이지 않고 나중에 올바른 버튼을 쉽게 찾을 수 있습니다.

그러나 변수 이름 지정에는 접두사를 사용하지 않으며 유형 (일반적으로 어쨌든 유용하지 않음)이나 의미, 컨텍스트 또는 단위 (헝가리어 표기법의 원래 아이디어)에는 사용하지 않습니다.


3

내 생각에, 그것은 언어와 프로젝트의 크기에 달려 있습니다. 필자는 실제로 모든 변수에 유형 접두사를 사용하지는 않았지만 명확한 방식으로 이름을 지정하려고합니다.

사용하는 언어와 같이 정적으로 유형이 지정된 언어에서 유형 시스템에 익숙해지면 헝가리어 표기법이 덜 중요해집니다. 따라서 Java 또는 C # 및 특히 Haskell에서는 해당 접두사를 추가 할 생각조차하지 않습니다. 도구에서 주어진 표현식의 유형을 알려주고 유형을 잘못 이해하여 발생하는 대부분의 실수를 잡을 수 있기 때문입니다.


1

접두사는 종종 개체에 적합합니다 (예 : 개체라고 부르는 20 개의 텍스트 상자가있는 형식) tbSomething.

그러나 대부분 가치가 있다고 생각하지 않습니다. 특히 가치 유형에 적합합니다.

예를 들어, 다음을 가지고 있다고 가정하십시오.

short shortValue = 0;
//stuff happens

몇 달 후에는 변경해야한다는 것을 알았습니다. 짧게는 충분하지 않습니다. 이제 당신은 :

int shortValue = 0;
//stuff happens

변수 이름을 변경하지 않으면 (이 경우 유형을 변경하는 것보다 코드를 깨뜨릴 위험이 더 커짐) 이제 혼동되는 코드가 생깁니다.

보유하고있는 것을 설명하는 이름을 사용하는 것이 좋습니다.

int loopCounter = 0;
//stuff happens

나중에 그것이 긴 것으로 바뀌어야한다면 : 문제 없습니다.

동적으로 유형이 지정된 언어 또는 IDE가없는 언어로 이러한 규칙에 대한 더 많은 주장이있을 수 있습니다.


0

나는 항상 변수 자체 앞의 유형에 2 ~ 4 문자 약어를 사용하는 경향이있었습니다. 때로는 지루한 것처럼 보이지만 복잡한 데이터 형식이나 상황에서 작업 할 때는 도움이됩니다. 나는 그것이 낙타 사건 범주에 속한다고 생각합니다.

위의 예를 보면 다음과 같이 약간 수정되었습니다.

int intTickCount;
bool boolConnected;
object[] aobjItems;

배열은 항상 배열을 지정하기 위해 형식 앞에 a를 갖습니다. 또한 비슷한 변수 인스턴스를 함께 그룹화 할 수 있습니다. 예를 들어, 나는 사용할 수 있습니다 ...

taStore.Fill(dtStore);

... 내 Store TableAdapter가 Store DataTable을 채우고 있음을 나타냅니다.


0

나는 항상 접두어 및 / 또는 접미사가 코드를 읽기 쉽도록 만들 때 (일반 영어와 같이) 기본 원칙을 준수하려고 노력했습니다.

덜 비밀 스러울수록 좋습니다.

왜 이런 방법이 있습니까?

public boolean connect( String h, int p );

다음과 같은 것을 가질 수있을 때 :

public boolean connect( String hostName, int port );

더욱이 오늘날 IDE에는 실제로 리팩토링 (특히 Java) 변수, 메소드 이름, 클래스 등을위한 강력한 도구가 있습니다. 문자 수가 가장 적은 최대 정보를 말하는 아이디어는 구식입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.