VBScript のコード記述規則
コード記述規則は、Microsoft® Visual Basic® Scripting Edition (以下 VBScript) でわかりやすいコードを記述するためのガイドラインです。コード記述規則には次のものがあります。
- オブジェクト、変数、およびプロシージャの名前付け規則
- コメントの記述規則
- テキストの書式およびインデントについてのガイドライン
コード記述規則を使用してソース コードを記述すると、スクリプトの構造とコード形式が標準化されるため、スクリプトの開発者および他の開発者がコードを参照しても、容易に理解できるソース コードを作成できます。適切なコード記述規則を使用すると、理解しやすく、他言語の規則にも矛盾しない正確かつ読みやすい無駄のないソース コードを作成できます。
定数の名前付け規則
VBScript の初期のバージョンでは、ユーザー独自の定数を定義できませんでした。定数を使用すると、変数として実行されるため、定数と変数と区別するためには、次のコード例のように大文字を使用し、アンダースコア (_) を付けて複数の単語に分割した文字列で定数名を付けていました。次にコード例を示します。
USER_LIST_MAX
NEW_LINE
これは、ユーザー独自の定数を識別するための方法として、まだ許容できる範囲にありますが、これに代わるものとして、現在では Const ステートメントを使用します。Const ステートメントを使用すると、真の意味での定数を定義できます。Const ステートメントを使用するときは、次のコード例のように定数の名前に "con" というプリフィックスを付けた形式での定数名を使用します。次にコード例を示します。
conYourOwnConstant
変数の名前付け規則
一貫性があってよりわかりやすいコードを作成するには、変数の名前に規則が必要です。VBScript のコードでは、変数の内容を表す名前の前にプリフィックスを付けます。
内部処理形式 | プリフィックス | 使用例 |
---|---|---|
ブール型 (Boolean) | bln | blnFound |
バイト型 | byt | bytRasterData |
日付 (時刻) 型 | dtm | dtmStart |
倍精度浮動小数点数型 | dbl | dblTolerance |
エラー型 | err | errOrderNum |
整数型 | int | intQuantity |
長整数型 | lng | lngDistance |
オブジェクト型 | obj | objCurrent |
単精度浮動小数点数型 | sng | sngAverage |
文字列型 | str | strFirstName |
変数の適用範囲
変数はできる限り小さな適用範囲を持つように指定する必要があります。次の表は、VBScript の変数の適用範囲です。
適用範囲 | 変数の宣言場所 | 参照可能範囲 |
---|---|---|
プロシージャ レベル | イベント プロシージャ、Function プロシージャ、または Sub プロシージャ | 宣言されたプロシージャ内で参照可能 |
スクリプト レベル | HTML ページの HEAD セクション、プロシージャの外部 | スクリプト内のどのプロシージャからも参照可能 |
変数の適用範囲を示すプリフィックス
スクリプトのサイズが大きくなると、変数の適用範囲を簡単に区別する値が必要になります。次の表に示すプリフィックスをデータ型を表すプリフィックスの前に適用範囲を示すプリフィックスとして付けると、変数の適用範囲を区別できます。
適用範囲 | プリフィックス | 使用例 |
---|---|---|
プロシージャ レベル | なし | dblVelocity |
スクリプト レベル | s | sblnCalcInProgress |
内容を表す変数とプロシージャの名前
変数またはプロシージャの名前の本体部分には、大文字と小文字を使用して必要事項を記述する必要があります。さらに、プロシージャ名は InitNameArray または CloseDialog のように動詞で始める必要があります。
名前が頻繁に使用される場合、または長期間にわたって使用される場合は、標準的な省略形を使用して名前の長さを適度な長さにすることをお勧めします。一般的に、変数名は 32 文字を超えると読みにくくなります。省略形を使用する場合は、必ずスクリプト全体で統一してください。たとえば、1 つ以上のスクリプト内で Cnt と Count を混在させると混乱が生じます。
オブジェクトの名前付け規則
次の表は、各オブジェクトに対して推奨されている名前付け規則です。
オブジェクト | プリフィックス | 使用例 |
---|---|---|
3D パネル | pnl | pnlGroup |
アニメーション ボタン | ani | aniMailBox |
チェック ボックス | chk | chkReadOnly |
コンボ ボックス、ドロップダウン リスト ボックス | cbo | cboEnglish |
コマンド ボタン | cmd | cmdExit |
コモン ダイアログ | dlg | dlgFileOpen |
フレーム | fra | fraLanguage |
水平スクロール バー | hsb | hsbVolume |
イメージ | img | imgIcon |
ラベル | lbl | lblHelpMessage |
ライン | lin | linVertical |
リスト ボックス | lst | lstPolicyCodes |
スピン | spn | spnPages |
テキスト ボックス | txt | txtLastName |
垂直スクロール バー | vsb | vsbRate |
スライダ | sld | sldScale |
コメントの記述規則
各プロシージャの先頭には、その機能を示す簡単なコメントを記述する必要があります。機能の実現方法についての詳細を記述する必要はありません。プロシージャのコードは繰り返し変更されるので、不要なコメントや間違ったコメントを削除する保守作業が必要になります。
プロシージャに渡す引数の用途が不明確な場合やプロシージャが特定の範囲内の引数を必要とする場合には、引数についてもコメントを記述する必要があります。また、関数の戻り値や引数を参照することによりプロシージャ内で変更されるその他の変数についても、プロシージャの先頭にコメントを記述します。
次の表は、プロシージャの先頭のコメントに付けるセクションの見出しです。実際の使用例は、次の「コードに書式を設定する」セクションのコード例を参照してください。
セクションの見出し | コメントの内容 |
---|---|
用途 | 何をするプロシージャか。 |
外部からの影響 | 状況によってプロシージャに影響を与える外部の変数、コントロール、およびその他の要素の一覧。 |
外部への影響 | 外部の変数、コントロール、およびその他の要素に対するプロシージャの影響の一覧。 |
受け取る値 | 不明確な各引数の説明。各引数はそれぞれ別の行にインライン コメントを付けて記述します。 |
戻り値 | 返される値の説明。 |
次のことに留意してください。
- 重要な変数を宣言する場合は、宣言した変数の用途を説明するためのインライン コメントを必ず記述します。
- 変数、コントロール、およびプロシージャにはわかりやすい名前を付けます。インライン コメントには複雑な実行についての詳細だけを記述します。
- スクリプトの先頭にオブジェクト、プロシージャ、アルゴリズム、ダイアログ ボックス、およびその他のシステム固有の情報を列挙してスクリプトの概要を記述します。アルゴリズムの説明コードが役立つこともあります。
コードに形式を設定する
論理構造およびネストがわかるようにコードの形式を整え、画面領域をできる限り節約する必要があります。次に、いくつかのガイドラインを示します。
- 通常、ネストするブロックは 4 つのスペースでインデントします。
- プロシージャの概要を示すコメントは、1 スペースだけインデントします。
- 概要を示すコメントに続く最上位のステートメントは、4 つのスペースでインデントします。ネストする各ブロックは、さらに 4 つのスペースでインデントします。
次にコード例を示します。
'*********************************************************
' Purpose:配列 UserList 内で指定したユーザーに最初に
' 該当するユーザーを検索します。
' Inputs: strUserList():検索対象のユーザーのリスト。
' strTargetUser:検索するユーザーの名前。
' Returns:配列 strUserList 内で strTargetUser に最初に
' 該当したユーザーのインデックス番号。
' 該当するユーザーが見つからない場合は、-1 を返します。
'*********************************************************
Function intFindUser (strUserList(), strTargetUser)
Dim i ' ループ カウンタ
Dim blnFound ' 対象が見つかったかどうかを示すフラグ
intFindUser = -1
i = 0 ' ループ カウンタを初期化します。
Do While i <= Ubound(strUserList) and Not blnFound
If strUserList(i) = strTargetUser Then
blnFound = True ' フラグに True を設定します。
intFindUser = i ' ループ カウンタに戻り値を設定します。
End If
i = i + 1 ' ループ カウンタの値に 1 を加算します。
Loop
End Function