はじめに

どうも、きいちろーです。

みなさんは普段名前って気にしていますか?

例えば新しくフォルダーを作った時にフォルダーに名前をつけてますか?それとも「新しいフォルダー」のままですか?

私はすごーく気にしてつけています。

なぜかというと、名前はちゃんと使えば仕組みになるのを知っているからです。

「山田 貴司」と固有名詞を作ったり、「山田 家」とグループ化することもできるのが名前です。

「なんちゃら」なんて付けられると誰?ってなります。よね?

プログラムにおいても同じことが言えるので、今日はそのことについて書きます。

例えば行番号の変数に名前を付けるとき、私がつける変数名と悪い変数名を載せます。

私の変数名: lv_Row_

悪い変数名: i

悪い変数名は昔からある悪習で、1文字なので入力が楽なのですが後先が大変になります。

この違いの良し悪しを5つのポイントに分けて説明します。

ポイント1

変数名は一目見てわかりやすいものが良いです。

lv_Row_ であれば Row ということで「行」だということが一目でわかります。

i だと何の変数なのかがわからず、判明するまで時間がかかることになります。

ポイント2

変数名は3文字以上にします。

変数名はあとでネーミングが良くないとして変更することがあります。

この時検索や置換の機能を使いますが、

lv_Row_ で検索するとこれしかヒットしないので置換も一瞬で済みます。

i で検索すると print とか line など、 i が含まれている余計なキーワードまでヒットしてしまいますので、そうすると検索したい変数にたどり着くのに時間がかかったり、一括で置換ができなくなります。

こういったことから名前は3文字以上の方がいいと思いますが、長すぎても見づらいので解読しやすい略称を多用します。

あと漢字だったら1文字でもOKです。 lv_行_ とかです。

ポイント3

名前の最後にはアンダーバーを付けます。

例えば以下のような2つの変数があったとします。

lv_Row

lv_RowList

この時 lv_Row を検索したときに lv_RowList までヒットしてしまいます。

これでは名前を変更したいときに一括で置換することができません。

しかし最後にアンダーバーを付けるとどうでしょう。

lv_Row_

lv_RowList_

ここで lv_Row_ で検索をすると lv_RowList_ はヒットされませんので検索性が良くなります。

ポイント4

変数名に属性の文字を持たせます。

プログラムでは変数のほかにもモジュール、定数、関数、ボタンなどを扱うので、それらにも必ず名前を付けることになります。

そこでそれらが一目で見分けられるような属性の文字をつけます。

変数なら v です。

lv_Row_ の v は変数という意味だったのです。

ちなみに変数 variable の頭文字です。

モジュール(module)なら m 、定数(constant)なら c 、関数(function)なら f という形で以下のようにつけていきます。

  • sm_支払処理_ 支払処理の標準モジュール
  • mc_TaxRate_ 消費税率の定数
  • mf_Is税込価格_ 税込価格かどうかをチェックする関数

ポイント5

属性に修飾文字を使って分類することです。

変数にもいろんな種類があるのでそれを使い分ける必要があります。

そこで修飾文字を使います。

例えば関数の中だけで使うなら l ( local のエル)、モジュールの中で横断的に使うのであれば m ( module のエム)という具合です。

lv_Row_ は l なので関数内で使う変数ということになります。

mv_Message_ は m なのでモジュール内にあるいろいろな関数で使える変数ということになります。

ただしモジュール内で使える変数はどこの関数で中身が変わったのかがわかるようにする仕組みが必要です。

また、VBAではモジュールが4つあり、これらにもそれぞれ修飾文字をつかって分類します。

ワークシートモジュールの w ( worksheet )、標準モジュールの s (standard)、フォームモジュールの f ( form )、クラスモジュールの c ( class ) という形です、以下例です。

wm_支払帳簿_ ワークシートモジュール

sm_支払処理_ 標準モジュール

fm_支払伝票_ フォームモジュール

cm_Table_ クラスモジュール

おわりに

以上5つのポイントを書いてみましたので以下にまとめます。

  • 変数名はわかりやすいものにすること
  • 変数名は3文字以上にすること
  • 名前の最後にはアンダーバーを付けること
  • 変数名に属性文字をつけること
  • 属性文字に修飾文字をつけること

これらはいずれも私が実践していてベストだと思った命名規則です。

賛否両論あるとは思いますが参考程度にしていただければと思います。

最後に私の使っている属性文字と修飾文字を添付します。

属性文字

*c_ 定数

*e_ enum

*f_ function関数

*p_ property

*s_ sub関数

*m_ モジュール

*t_ フォームのツール(テキストボックス、リストなど)

*v_ 変数

修飾文字

l*_ Local level

m*_ Module level

g*_ Global level

修飾文字と属性文字

lc_ 関数内で使う定数

mc_ モジュール内で使う定数

gc_ プログラム全体で使う定数

lv_ 関数内で使う変数

mv_ モジュール内で使う変数

gv_ プログラム全体で使う変数(あまり使わない)

av_ 引数として使う変数

ms_ モジュール内で使うsub関数

gs_ プログラム全体で使うsub関数

mf_ モジュール内で使うfunction関数

gf_ プログラム全体で使うfunction関数

gp_ プログラム全体で使うプロパティ

me_ モジュール内で使うenum

wm_ ワークシートモジュール

fm_ フォームのモジュール

cm_ クラスのモジュール

sm_ 標準モジュール

フォームモジュールのツール

lblt_ label ラベル

txtt_ textbox テキストボックス

tgrt_ toggle トグルボタン

optt_ option オプションボタン

chkt_ checkbox チェックボックス

cmbt_ combobox コンボボックス

lstt_ listbox リストボックス

imgt_ image イメージ

tabt_ tabstripタブストリップ

mltt_ multipage マルチページ

scrt_ scrollbarスクロールバー

spnt_ spinbuttonスピンボタン

reft_ refEdit frmt_ frame フレーム

btnt_ command button コマンドボタン