(loop (print (eval (read))))

;;닭집을 차리기 위한 여정

네이밍에 대해서

헝가리안 표기법?

이제는 이런 표기를 안 쓸거라고 생각하지만 헝가리안 표기법이라는게 있다. 변수앞에 타입을 접두어로 붙이자는 것으로 주로 마소에서 개발해서 배포하는 vc를 쓰는 프로젝트에서 이런 표기법이 주로 보였다.

본격MSDN예제link
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include "sy.h"
extern int *rgwDic;
extern int bsyMac;
struct SY *PsySz(char sz[])
{
char *pch;
int cch;
struct SY *psy, *PsyCreate();
int *pbsy;
int cwSz;
unsigned wHash=0;
pch=sz;
while (*pch!=0
wHash=(wHash<>11+*pch++;
cch=pch-sz;
pbsy=&rgbsyHash[(wHash&077777)%cwHash];
for (; *pbsy!=0; pbsy = &psy->bsyNext)
{
char *szSy;
szSy= (psy=(struct SY*)&rgwDic[*pbsy])->sz;
pch=sz;
while (*pch==*szSy++)
{
if (*pch++==0)
return (psy);
}
}
cwSz=0;
if (cch>=2)
cwSz=(cch-2/sizeof(int)+1;
*pbsy=(int *)(psy=PsyCreate(cwSY+cwSz))-rgwDic;
Zero((int *)psy,cwSY);
bltbyte(sz, psy->sz, cch+1);
return(psy);
}

이런ㅆㅂ뭐라는거야

문제점

예제에서 나오는 변수명은 사실 상당히 짧다. 본래의미를 축약하지 않고 다 써도 상당히 짧은 편일 것이다. 헌데 그 의미마저도 괴상한 접두어 때문에 가려져서 잘 보이지 않는다. 실제 업무용 어플리케이션은 이보다 훨씬 길고 다양한 의미를 가진 변수명을 쓰게 되는데 이럴때 이 의미가 가려지는 현상 은 훨씬 심해진다. 과연 저 괴상한 접두어들이 필요한가? 예를들어 불린타입의 숫자인지 아닌지에 대한 값이 들어있는 변수를 헝가리안 표기로 나타내면 bNumber 이다. 왜 안 isNumber ? 또 스킴이나 루비같은 언어에서는 가장 좋은 컨벤션을 쓴다( number? ). 게다가 축약된 접두어를 붙이느라 길어진 변수명을 짧게/접두어와 어울리게 만드느라 변수명을 줄여쓰는 사람들이 많은데 그러자면 bNo 가 된다. 여기에 포인터를 의미한다는 p를 붙여 pbNo. 값을 얻는답시고 *pbNo.

물론 이같은 것들은 이제 없으나 요런 사상은 아직도 여기저기에 남아있다. 주로 데이터베이스에 말이지.