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