| Folgende Prozedur wäre ungeschickt, da aus dem Prozeduraufruf nicht ersichtlich ist, welche Parameter gewählt wurden, falls die genaue Bedeutung der Parameter der Prozedur nicht bekannt ist. Besonders bei langen Programmen, bei denen der Programmierer nicht die Möglichkeit hat, sofort die Deklarationen der Prozeduren anzusehen (etwa bei der Benutzung von Komponenten, die nicht im Quellcode vorliegen), wird es einem schwer fallen, schnell ein Verständnis für die Funktionsweise des Quellcodes zu erwerben: Call FormatText(..., True, True, False, False, True)
.
.
.
Private Function FormatText( _
ByVal Text As String, _
ByVal UpperCase As Boolean, _
ByVal TrimSpaces As Boolean, _
ByVal Reverse As Boolean, _
ByVal AddPeriod As Boolean, _
ByVal RemoveTabs As Boolean _
) As String Listing 1: Aufruf und Kopf einer Prozedur unter Verwendung mehrerer boolescher Parameter zur Optionsauswahl. Die nachstehende Lösung desselben Problems ist bedeutend einfacher zu verstehen, da man bereits aus dem Aufruf der Prozedur leicht sehen kann, welche Optionen gewählt wurden. Im Folgenden ist wiederum ein Prozeduraufruf angegeben. Hier erkennt man sofort, dass die Prozedur irgendetwas mit der Formatierung von Text zu tun hat. Ausserdem ist nur mehr ein Parameter erforderlich, bei dem die einzelnen Konstanten bitweise durch ein logisches Oder verknüpft werden. Die benötigten Konstanten können in einem Aufzählungstyp zusammengefasst werden. Der Basistyp von Aufzählungen ist der Datentyp Long: Private Enum FormatTextFlags
UpperCase = 1&
TrimSpaces = 2&
Reverse = 4&
AddPeriod = 8&
RemoveTabs = 16&
End Enum
.
.
.
Call FormatText(..., UpperCase Or TrimSpaces Or RemoveTabs)
.
.
.
Private Function FormatText( _
ByVal Text As String, _
ByVal Format As FormatTextFlags _
) As String Listing 2: Aufruf und Kopf einer Prozedur unter Verwendung eines Aufzählungstyps zur Darstellung gewählter Optionen. Nach welchem Schema die Werte der Konstanten festgelegt werden müssen und wie die Auswertung der gewählten Optionen innerhalb der Implementierung der Prozedur erfolgt, wird im Beispiel im nächsten Abschnitt erklärt. |