変数や定数に、型を表すプリフィクスを付加する表現方法である。
〔例 アンダーバーは使わないパターン〕
Dim iCnt As Integer ' i がプリフィクス
Dim lRecCnt As Long ' l がプリフィクス
Dim shtFrom As Worksheet ' sht がプリフィクス
〔例 アンダーバーを使うパターン〕
Dim i_Cnt As Integer ' i がプリフィクス
Dim l_RecCnt As Long ' l がプリフィクス
Dim sht_From As Worksheet ' sht がプリフィクス
よくVBAではプリフィクスを3桁としている表記をよく見かける。いろいろ意見はあるだろうが、IntegerやLongのような、基本的で頻出する型については1桁でよいだろう。
上記の例で、Worksheet を sht としているが、Worksheet、Form、TextBoxなどのオブジェクトは3桁くらいないと分かりにくいように思う。また、通貨型など、頻繁に使うものでないとか、他の言語にあまりないものは3桁くらいあった方が分かりやすいようだ。また、プリフィクスと変数の間を _ (アンダーバー)でつなぐのもよいだろう。
このあたりは経験と分かりやすさで選ぶとよい。
開発プロジェクトでは経験してきた現場や言語により個人個人の常識が違う。なるだけ早期に確立しておくことが必要である。 ハンガリアン記法で享受できるコーディングやテスト時のミスを若干減らせること、保守時に理解が早くなることなどのメリットは捨てがたいからだ。
最近はクラスを独自に作ることもあり、ハンガリアン記法を使わないことも見かける。まあ、それはクラス用の表記を決めるように決めればよいように思う。
なお、ここまで「システムハンガリアン」ということについて書いている。
ハンガリアン記法には、システムハンガリアン以外に、アプリケーションハンガリアン、という概念があるそうだ。
アプリケーションハンガリアンは「変数の意味を変数名とすることで、間違ったコードが間違って見える」ことを目的としている。
もう少し言及すれば、変数の使い回しのようなことをせず、例えば行を表すなら lRow などとし、行を表す以外の用途には使わない。列を表す表現に、iCol_A、iCol_Bのような、汎用的に使うようなモノを作らない、など、となるであろう。
アプリケーションハンガリアンの概念も重要であるので、規約として定めた方がいいだろう。できれば変数の辞書や命名規約を作る、などができるのが望ましいだろう。
なお、上記に関係する部分でもあるが、
・型の略し方
・大文字小文字の混ぜ方
・Const値の表記方法
・スコープがPublic、モジュール/クラス内でのPrivate、Private のプリフィクスの付記方法
・型による限界値(例:Integerのとりうる範囲、など。C言語やDBMSではIntegerと書いても桁数が違う場合もあるので。)の把握
・型がデータベースのどの型と一致するか
あたりも決めておき、文書にして、共有しておくとよいだろう。
〔例 アンダーバーは使わないパターン〕
Dim iCnt As Integer ' i がプリフィクス
Dim lRecCnt As Long ' l がプリフィクス
Dim shtFrom As Worksheet ' sht がプリフィクス
〔例 アンダーバーを使うパターン〕
Dim i_Cnt As Integer ' i がプリフィクス
Dim l_RecCnt As Long ' l がプリフィクス
Dim sht_From As Worksheet ' sht がプリフィクス
よくVBAではプリフィクスを3桁としている表記をよく見かける。いろいろ意見はあるだろうが、IntegerやLongのような、基本的で頻出する型については1桁でよいだろう。
上記の例で、Worksheet を sht としているが、Worksheet、Form、TextBoxなどのオブジェクトは3桁くらいないと分かりにくいように思う。また、通貨型など、頻繁に使うものでないとか、他の言語にあまりないものは3桁くらいあった方が分かりやすいようだ。また、プリフィクスと変数の間を _ (アンダーバー)でつなぐのもよいだろう。
このあたりは経験と分かりやすさで選ぶとよい。
開発プロジェクトでは経験してきた現場や言語により個人個人の常識が違う。なるだけ早期に確立しておくことが必要である。 ハンガリアン記法で享受できるコーディングやテスト時のミスを若干減らせること、保守時に理解が早くなることなどのメリットは捨てがたいからだ。
最近はクラスを独自に作ることもあり、ハンガリアン記法を使わないことも見かける。まあ、それはクラス用の表記を決めるように決めればよいように思う。
なお、ここまで「システムハンガリアン」ということについて書いている。
ハンガリアン記法には、システムハンガリアン以外に、アプリケーションハンガリアン、という概念があるそうだ。
アプリケーションハンガリアンは「変数の意味を変数名とすることで、間違ったコードが間違って見える」ことを目的としている。
もう少し言及すれば、変数の使い回しのようなことをせず、例えば行を表すなら lRow などとし、行を表す以外の用途には使わない。列を表す表現に、iCol_A、iCol_Bのような、汎用的に使うようなモノを作らない、など、となるであろう。
アプリケーションハンガリアンの概念も重要であるので、規約として定めた方がいいだろう。できれば変数の辞書や命名規約を作る、などができるのが望ましいだろう。
なお、上記に関係する部分でもあるが、
・型の略し方
・大文字小文字の混ぜ方
・Const値の表記方法
・スコープがPublic、モジュール/クラス内でのPrivate、Private のプリフィクスの付記方法
・型による限界値(例:Integerのとりうる範囲、など。C言語やDBMSではIntegerと書いても桁数が違う場合もあるので。)の把握
・型がデータベースのどの型と一致するか
あたりも決めておき、文書にして、共有しておくとよいだろう。