Programing/Language/C++/CodingStyle/Naming のバックアップ(No.5)



変数名

ハンガリアン記法

  • 背景
    ハンガリー出身のプログラマ「チャールズ・シモニー」が、マイクロソフト社でExcel,Wordなどの開発に従事している際に発案した命名法。
    マイクロソフト社のWindowsの各種APIおよびMFCなどフレームワークでハンガリアン記法が採用されている。
  • 概要
    区別しにくい変数の意味を明白にして混同を避けるために、変数名に接頭辞として変数の型/種類に関する情報を付与する手法。
    間違えたコードを間違えて見えるようにすることが目的。
    大別して、システムハンガリアンと、アプリケーションハンガリアンの2種類が存在する。
    当初シモニーが想定していた使用方法はアプリケーションハンガリアンであり、マイクロソフト社で使用されるうちにシステムハンガリアンが多用されるようになった。
    このうちシステムハンガリアンに関して、批判がある。
    • システムハンガリアン
      変数の型の略称を接頭辞として付与する。
      1. /// Win32 APIの一例
      2. HWND CreateWindow(
      3.   LPCTSTR lpClassName , LPCTSTR lpWindowName, // lp=long pointer の接頭辞
      4.   DWORD dwStyle , // dw=double word の接頭辞
      5.   int x , int y ,
      6.   int nWidth , int nHeight , // n=integer の接頭辞
      7.   HWND hWndParent , // h=handle の接頭辞
      8.   HMENU hMenu ,
      9.   HANDLE hInstance ,
      10.   LPVOID lpParam
      11. );
      12.  
      13. DWORD dwStyle = WS_DLGFRAME;
      14. int nWidth = 300;
      15. CreateWindow("MainWindow","window",0,0,nWidth,nHeight,dwStyle,hWnd,hMenu,hInstance,NULL); // dwStyle引数指定順が間違っている
      DWORD型やint形などは両方とも実態はlong intであるが、Win32API関連で使用しているDWORD型変数にdw、通常の用途のint形にnと接頭辞を付与しておくことで15行目のような誤った変数指定に気づくことができる。
      HANDLE型などは実態がvoid*であり、他のポインタにも代入できてしまうためHANDLE型であることを明記するためにhを付与している。
    • アプリケーションハンガリアン
      型で表現できない種類の略称を接頭辞として付与する。
      1. int dollIncome; // doll=ドルの接頭辞
      2. int yenDeposit; // yen=円の接頭辞
      3. int yenAsset = dollIncome + yenDeposit;
      同じint形の変数でも異なる通貨単位が混在するに接頭辞としてdollやyenなどの単位を付与しておくことで、3行目など間違った式で間違いに気づくことができる。
  • 肯定的意見
  • 否定的意見
  • 参考

関数名