Visual Basicの手続き型プログラミングでは、サブプログラム(Sub、Function)の再利用を通じてコードを明確に構造化し、重複を最小限に抑え、可読性を向上させることが可能です。
VBでのプログラミングは、フォームやモジュール内で大きなコードブロックを扱うことから発展してきました。これにより、ロジックの重複とデバッグの複雑さが生じました。プロシージャや関数に分割することは、よりモジュラーなアーキテクチャへの移行と見なされます。
構造が不十分なアプリケーションは、異なる場所に同じコードを含むため、保守、バグ修正が困難になり、再利用性が低下します。
引数と値の返却を伴ったプロシージャ(Sub)と関数(Function)を使用します。繰り返しのロジックを別のメソッドに分離することが良いプラクティスであり、DRY(Don't Repeat Yourself)の原則を守ります。
コードの例:
' 再利用可能な関数を呼び出すハンドラー Sub btnCalculate_Click(sender As Object, e As EventArgs) Dim result As Double = CalculateDiscount(100, 0.2) MessageBox.Show($"割引: {result}") End Sub ' 再利用可能な関数 Function CalculateDiscount(total As Double, rate As Double) As Double Return total * (1 - rate) End Function
主な特徴:
Visual Basicで、戻り値の型が異なる場合に同名のプロシージャや関数を宣言できますか?
Visual Basicでは、プロシージャや関数の名前はそのスコープ内で一意である必要があり、戻り値の型のみによるオーバーロードは不可能です。オーバーロードは、パラメータのシグネチャにのみサポートされています。
コードの例:
' 間違い — コンパイルエラー Function GetValue() As Integer Return 1 End Function Function GetValue() As String Return "テスト" End Function
Optionalとしてパラメータを宣言する場合、デフォルト値を指定する必要がありますか?
はい、Optionalパラメータにはデフォルト値を設定する必要があります。
コードの例:
Function Sum(a As Integer, Optional b As Integer = 0) As Integer Return a + b End Function
Exit Sub/Exit Functionは、現在のプロシージャだけでなく、親プロシージャからも出ることができますか?
いいえ、Exit Sub/Exit Functionは、現在のプロシージャからのみ出ます。外部プロシージャの制御フローを管理するためには、If/Returnのような制御構造を使用する必要があります。
プロジェクトでの割引計算は、異なるフォームの複数のイベントハンドラーにおける個別のコードスニペットとして実装されています。数式を変更する際には、すべての場所で手動でコードを修正する必要があります。
利点:
欠点:
割引計算をCalculateDiscountという単独の関数に分け、必要な場所で呼び出して使用します。
利点:
欠点: