本稿では自動売買ロボットファイルのプロシージャコーディング時に留意すべき点の一つ、変数設定時における変数の宣言とネーミングについて解説しています。
コーディングの際、思いつきで設定しがちな変数ですが、変数設定の巧拙によって開発効率に大きな差異が出てしまいます。
コーディングがかなり進んだ時点で問題に気づき修正するとなるとかなりの手間がかかってしまいますしバク発生の原因にもなりかねませんので変数設定に関するルールをある程度決めてからコーディング作業に進むことをお薦めします。
変数設定時には次の2点に留意しておくとよろしいかと思います。
・変数は宣言してから使用し使用目的をコメントしておく
・変数は設定目的がある程度把握できるようネーミングする
順にみていきます。
変数は宣言してから使用し使用目的をコメントしておく
VBAの標準の仕様では変数は宣言なしでいきなり使用できます。
例えば、
RowCnt = 10
のように。
コーディングしながらこの情報は変数に入れておきたいなと思ったら変数名をパパッと考えて使用できます。
まあ、これは便利と言えば便利でステップ数の少ないプログラムでしたら使用する変数の数も少ないでしょうから問題はないことかと思います。
しかしです、大きなプログラムを作成するとなると話は全く別です。
設定しなければならない変数の数も大幅に増えますし、それぞれの変数の値が今どのような状態かを常に考えながらコーディングしていくわけですからプロシージャで使用される変数については常に頭の中で整理されていなければなりません。
効率よく開発を進めていくには何のために設定されている変数か、そして変数の内容がどのように変化していっているのかをしっかりと把握しておく必要があります。
と言っても、通常は「あれっ、この変数はなんのために設定した変数だったっけ?」などということは日常茶飯事、その度に確認作業となるわけですが、その際、プロシージャの冒頭で宣言されていないといちいち変数を探し出す作業が発生し、かつコードを追いながら使用目的を類推していくしかありません。
新規コーディング時もそうですが、デバック時やプログラムの修正時には宣言なしのコーディングでは非効率ここに極まれりでデメリットしかありません。
プログラミングの仕事をされている方以外は他人のプログラムを修正するような機会等はないかと思いますが、変数宣言なしかつコメントなしのプログラムの担当になった場合は最悪の一言です。
そのようなプログラムを前にすると修正する気力もすっかりうせてしまいます。
まあ仕事ですから、ため息をつきながら重い腰を上げてコードを追って変数を洗い出し使用目的を把握する作業に取り組んではいきますが、、、
それに比べて、
Dim RowCnt As integer ‘~の処理に使用する行数カウンター
Dim OpeStpFlg As Boolean ‘運用中止フラグ
etc.
と冒頭で使用変数が宣言され、かつ設定目的も記述されていれば、変数がどのような目的で使用されているかは一目瞭然、圧倒的に作業効率はアップしますし変数由来のバグの発生率も低下します。
ということで、多少面倒でも変数は宣言し使用目的をコメントしてから使用すべきです。
モジュールの宣言セクションでOption Explicitの指定があれば、変数の宣言が必須ということで宣言なしで変数をしようするとエラーを返してくれますが、標準では変数宣言不要となっていますのでモジュールを開いてもOption Explicitの記述はありません。
モジュールを開く度にOption Explicitを宣言するのは面倒ですから、コーディング作業開始前には必ずVBEのツールタブのオプション中の「変数の宣言を強制する」項目にチェックを入れておきましょう。
以降、新規モジュールを開いた段階で宣言セクションにはOption Explicitが付加されるようになります。
コメントに関しては、変数だけでなく、その他の場所でも仕様書代わりに極力残しておいた方がベターです。
自分で作ったプログラムもしばらくたってからみてみるといろいろ忘れてしまっていますから、日本語のコメントがないと内容把握に苦痛を感じてしまいます。
いちいちコメントをつけていくことは確かに非常に面倒なことですが、もし他の人が後々このプログラムを修正しようとした時どのようなコメントがついているとわかりやすいだろうかという目線でコメントを記述しておけば、必ず自分自身が救われることになります。
変数は設定目的がある程度把握できるようネーミングする
前項の変数の使用宣言とコメント付加が厳守されていれば、かなりわかりやすいコードになるかと思いますが、できれば変数のネーミングもある程度統一しておくと一層開発効率をアップすることができるかと思います。
運営者の場合は頻繁に使われる可能性のある言葉を原則3文字の略字にしておき、都度使用目的がある程度把握できるようにその略字を連結して変数名にしています。
例えば、
コントロール:Ctr
カウンター:Cnt
フラグ:Flg
時間:Tim
価格:Prc
運用:Ope
中止:Stp
エラー:Err
ボタン:Btn
行:Row
カラム:Clm
メッセージ:Msg
買い:Buy
売り:Sel
条件:Cnd
のようにプログラムでよく使用される言葉をまず定義しておき、
行数カウンターならRowCnt
運用中止フラグならOpeStpFlg
のように組み合わせてネーミングしています。
こうしておくとある程度の変数に関してはコメントを確認しなくても使用目的が把握できますのでけっこう便利です。
わかりやすさという点では変数名を日本語にするのも一法です。
以前は日本語(2バイト)を使用するとエラーの原因になるようなこともありましたが、現在は全ての文字を2バイトで表現するユニコードが使われていますから変数名を日本語にしても全く問題はありません。
うまく使用すれば非常にわかりやすい変数名を作成できると思います。
上記の略字と組み合わせて、
例えば、
運用中止Flgのようにつけてもいいかもしれません。
ただし、日本語変換によるコーディングスピードの低下というデメリットは発生します。
まとめ
以上、変数設定時の留意点についての解説でした。
いい加減な変数設定は開発効率を低下させてしまいます。
・変数は宣言してから使用し使用目的をコメントしておく
・変数は設定目的がある程度把握できるようネーミングする
後で後悔しないためにもコーディングの際にはこの2点を厳守することをお薦めします。