Montag, 9. Juni 2014

TM-SmartString: IsNull

Eine der lästigen Dinge, auf die man beim Programmieren achten muss, ist die Verwendung von Null. Schnell kommt es zu einem Laufzeitfehler, wenn man nicht explizit Vorkehrungen für die Behandlung von Null in seinem Code getroffen hat. Mit diesem Beitrag wird die Klasse TM-SmartString für den Umgang mit Null optimiert. Außerdem kommt eine weitere Property hinzu: IsNull.

Die Klasse soll um folgende Funktionalität erweitert werden: Man kann einen Null-Wert zuweisen, ohne dass es zu einem Fehler kommt. Außerdem gibt es eine Property, mit der man abfragen kann, ob der aktuelle Wert Null ist.

Implementierung
Als erstes fügen wir auf Modulebene eine private Variable ein. In dieser Variable wird gespeichert, ob der Wert aktuell Null ist oder nicht:
1:  ' Section: Deklarationen  
2:  Private m_IsNull As Boolean  
Als nächstes erstellen wir eine öffentliche Property, mit der man diese Variable abfragen kann:
1:  Public Property Get IsNull() As Boolean  
2:    IsNull = m_IsNull  
3:  End Property  
Der Code für die Initialisierung unserer Klasse wird angepasst. Hier wird die Variable m_IsNull mit False initialisiert:
1:  Private Sub Class_Initialize()  
2:    m_IsNull = False  
3:  End Sub  
In der Methode Clear muss der Zustand unserer Variablen ebenfalls zurückgesetzt werden:
1:  Public Function Clear()  
2:    m_String = vbNullString  
3:    m_IsNull = False  
4:  End Function  
Am Schluss fehlt noch das Wesentliche. Bei der Zuweisung eines Wertes an unsere Klasse wird auf Null geprüft und die Variable m_IsNull entsprechend gesetzt:
1:  Public Property Let Value(ByVal Text As Variant)  
2:    If (VBA.IsNull(Text) = True) Then  
3:      m_String = vbNullString  
4:      m_IsNull = True  
5:    Else  
6:      m_String = Text  
7:      m_IsNull = False  
8:    End If  
9:  End Property  
Wichtig bei diesem Code ist der Aufruf der Methode IsNull in der Zeile 2. Hier wird der Name der zu verwendenden Bibliothek vorangestellt. Ohne diese kleine Ergänzung käme es zu einem Fehler, da VBA die IsNull-Property aus unserer Klasse ausführen würde.

Bisheriger Code
Bisher war folgender Code notwendig um zu verhindern, dass es bei der Zuweisung von Null an einen String zu einem Fehler kommt:
1:  Dim myString As String  
2:  myString = Nz(Null, vbNullString)  
3:  MsgBox myString  
In Zeile zwei wird die Nz-Funktion verwendet, um den Fehler bei einem potentiellen Null-Wert zu vermeiden und einen Ersatzwert an den String zuzuweisen.

Künftiger Code
Künftig braucht man sich keine Gedanken mehr um die potentielle Zuweisung eines Null-Wertes zu machen.
1:  Dim myString As TM_SmartString  
2:  Set myString = New TM_SmartString  
3:  myString = Null  
4:  MsgBox myString  
5:  MsgBox myString.IsNull  
In der dritten Zeile wird ein Null-Wert zugewiesen. Der Code läuft ohne Fehlermeldung durch. In der fünften Zeile wird die Property IsNull abgefragt.

Diese Erweiterung der Klasse macht wieder einmal deutlich, welches Potential in der Erstellung eigener Klassen steckt. Wir können uns die Klasse so gestalten, wie wir es uns wünschen.
Die Tatsache, dass die Klassen jetzt mit Null-Werte umgehen kann, macht ihren Einsatz noch attraktiver.

Die neue Version 1.6.02 steht (wie immer) auf meiner Webseite zum Download bereit.

Keine Kommentare: