Programing/Language/C++/CodingStyle/Naming のバックアップソース(No.6)

#contents
----
*変数名 [#q89e65d7]
**ハンガリアン記法 [#pa143303]
-背景
ハンガリー出身のプログラマ「チャールズ・シモニー」が、マイクロソフト社でExcel,Wordなどの開発に従事している際に発案した命名法。
マイクロソフト社のWindowsの各種APIおよびMFCなどフレームワークでハンガリアン記法が採用されている。
-概要
区別しにくい変数の意味を明白にして混同を避けるために、変数名に接頭辞として変数の型/種類に関する情報を付与する手法。
間違えたコードを間違えて見えるようにすることが目的。
大別して、システムハンガリアンと、アプリケーションハンガリアンの2種類が存在する。
当初シモニーが想定していた使用方法はアプリケーションハンガリアンを意図したものであるが、マイクロソフト社で使用されるうちにシステムハンガリアンとして多用されるようになった。
現在ではシステムハンガリアンに関して否定的な意見が多くある。
--システムハンガリアン
変数の型の略称を接頭辞として付与する。
#geshi(cpp,number=on){{
/// Win32 APIの一例
HWND CreateWindow(
  LPCTSTR lpClassName , LPCTSTR lpWindowName, // lp=long pointer の接頭辞
  DWORD dwStyle , // dw=double word の接頭辞
  int x , int y ,
  int nWidth , int nHeight , // n=integer の接頭辞
  HWND hWndParent , // h=handle の接頭辞
  HMENU hMenu ,
  HANDLE hInstance ,
  LPVOID lpParam
);

DWORD dwStyle = WS_DLGFRAME;
int nWidth = 300;
CreateWindow("MainWindow","window",0,0,nWidth,nHeight,dwStyle,hWnd,hMenu,hInstance,NULL); // dwStyle引数指定順が間違っている
}}
DWORD型やint形などは両方とも実態はlong intであるが、Win32API関連で使用しているDWORD型変数にdw、通常の用途のint形にnと接頭辞を付与しておくことで混同に気づきやすくなる。
HANDLE型などは実態がvoid*であり、他のポインタにも代入できてしまうためHANDLE型であることを明記するためにhを付与している。
--アプリケーションハンガリアン
型で表現できない種類の略称を接頭辞として付与する。
#geshi(cpp,number=on){{
int dollIncome; // doll=ドルの接頭辞
int yenDeposit; // yen=円の接頭辞
int yenAsset = dollIncome + yenDeposit;
}}
同じint形の変数でも異なる通貨単位が混在するに接頭辞としてdollやyenなどの単位を付与しておくことで、3行目など間違った式で間違いに気づくことができる。
-肯定的意見
-否定的意見
-参考
--[[Wikipedia/ハンガリアン記法>https://ja.wikipedia.org/wiki/ハンガリアン記法]]
*関数名 [#g2aa126e]