お知らせ

構造化コーディング規則

MSDN ライブラリ Visual Studio 6.0

名前付け基準に加えて、コードのコメント付けやインデントの統一などの構造化コーディング規則を設定すると、コードがさらに読みやすくなります。

コードのコメント付け規則

プロシージャと関数の先頭には、それぞれの機能 (何をするプロシージャか) を説明する簡単なコメントを記述します。このコメントでは、その機能を実際にどうやって実現するかについては詳しく記述しません。これは、後で実現方法を変更したときに、不要なコメント保守作業が発生するからです。保守を行わないと、コメントが誤ったものになります。実現方法については、コードそのものと、必要に応じたインライン コメントで記述します。

プロシージャに引き渡す引数の機能がわかりにくい場合や、引数の値が特定の範囲にあることをプロシージャが要求している場合は、引数について記述する必要があります。また、関数の戻り値やグローバル変数をプロシージャによって変更する場合、特に引数が参照渡しの場合は、各プロシージャの先頭に説明を書く必要があります。

プロシージャのヘッダー コメント ブロックには、次のセクション ヘッダーを記述します。例については後の「コードの形式」を参照してください。

セクション ヘッダーコメントの内容
目的プロシージャの機能 (実現方法は記述しない) を記述します。
前提条件外部変数、コントロール、オープンするファイル、その他わかりにくい要素の一覧を記述します。
結果変更する可能性のある外部変数、コントロール、ファイルの一覧、および変更の結果 (わかりにくい場合) を記述します。
入力引数わかりにくい引数を記述します。引数は別の行にインライン コメントとして記述します。
戻り値関数の戻り値を説明します。

以下の点に注意します。

  • 重要な変数の宣言では、宣言する変数の使い方をインライン コメントで記述します。

  • 変数、コントロール、およびプロシージャにはわかりやすい名前を付け、インライン コメントでは実現方法についての詳細な説明を書くようにします。

  • Visual Basic プロジェクトの汎用的な定数定義プロジェクトを含む .bas モジュールでは、先頭にアプリケーションの概要を記述します。ここでは、主要なデータ オブジェクト、プロシージャ、アルゴリズム、ダイアログ ボックス、データベース、およびシステムの従属関係を列記します。アルゴリズムを説明した擬似コードを書いておくと便利な場合もあります。

コードの形式

現在でも VGA ディスプレイを使用しているプログラマが多いので、できるだけ画面のスペースを考慮し、同時にロジックの構造やネストのインデントを反映したコードの形式を使用できるようにする必要があります。以下に、参考となる項目を示します。

  • 標準のタブをベースにしたネスト ブロックでは、4 スペース分インデントします (既定値)。

  • プロシージャの機能概要のコメントでは、1 スペース分インデントします。このコメントに続く最上位の文は、1 タブ分インデントします。ネスト ブロックでは、さらに 1 タブ分インデントします。次に例を挙げます。
'*****************************************************
' 目的説明:      strUserList 配列を検索して最初に見つかった
'            目的のユーザーを特定します。
' 入力引数:
'   strUserList():   検索するユーザーの一覧。
'   strTargetUser:   検索するユーザーの名前。
' 戻り値:   strUserList 配列で最初に見つかった
'            strTargetUser のインデックス。
'            目的のユーザーが見つからなければ、-1 を返します。
'*****************************************************

Function intFindUser(strUserList() As String, strTargetUser As _
   String) As Integer
   Dim i As Integer            ' ループ カウンタ
   Dim blnFound As Integer      ' 目的データの発見フラグ
   intFindUser = -1
   i = 0
   While i <= Ubound(strUserList) And Not blnFound
      If strUserList(i) = strTargetUser Then
         blnFound = True
         intFindUser = i
      End If
      i=i+1
   Wend
End Function

定数のグループ化

変数とユーザー定義定数は、別個の領域やファイルに散在させずに、機能別にグループ化します。Visual Basic の汎用的な定数は、グループ化して 1 つのモジュールに記述し、アプリケーション固有の宣言と分離します。

& 演算子と + 演算子

文字列を連結するときは & 演算子を使用し、数値を加算するときは + 演算子を使用します。文字列連結に + 演算子を使用すると、2 つのバリアント型データを操作するときに問題が起きる可能性があります。次に例を挙げます。

vntVar1 = "10.01"
vntVar2 = 11
vntResult = vntVar1 + vntVar2    'vntResult = 21.01
vntResult = vntVar1 & vntVar2   'vntResult = 10.0111

MsgBox、InputBox、および SQL クエリーの文字列の作成

長い文字列を作成するには、アンダースコア (_) を行継続文字として使用します。こうすると、複数行に渡るコードの文字列が読みやすくなり、デバッグしやすくなります。この技法は、メッセージ ボックス (MsgBox) や入力ボックス (InputBox) にメッセージを表示するとき、および SQL 文字列を作成するときに特に便利です。次に例を挙げます。

Dim Msg As String
Msg = "これは、メッセージ ボックスに " _
& "表示される段落です。" _
& " ソース コード内のコードを" _
& " 数行に分けて書くと、読みやすくなり、" _
& " デバッグしやすくなります。"
MsgBox Msg

Dim QRY As String
QRY = "SELECT *" _
& " FROM Titles" _
& " WHERE [Year Published] > 1988"
TitlesQry.SQL = QRY

コメント