Arrays - Grenzen

Unterstelle niemals untere Array Grenzen

Datenfeld Operationen sind ein weiteres Spektrum, Fehlern durch „implizites Verhalten“ die Türen zu öffnen. Nachfolgende werden einige implizite Verhaltensweisen dargestellt, die vermieden werden sollten.

Aufgrund der Standardgrenze für die untere Array Grenze (=0) läuft man Gefahr, diese untere Grenze grundsätzlich als gesetzt anzunehmen. Bereits eine globale Abweichung dieser Grenze durch eine Option Base Anweisung führt hier bereits zu potentiellen Fehlern.

Daher sollte man grundsätzlich die untere Grenze explizit setzen, worauf dann auch eine Option Base Anweisung keinen Einfluss mehr nimmt.

Option Explicit
 
Sub CountDown()
 
    Dim i           As Integer
    Dim sNums(10)   As String
 
    sNums(10) = "Zehn"
    sNums(9) = "Neun"
    sNums(8) = "Acht"
    sNums(7) = "Sieben"
    sNums(6) = "Sechs"
    sNums(5) = "Fünf"
    sNums(4) = "Vier"
    sNums(3) = "Drei"
    sNums(2) = "Zwei"
    sNums(1) = "Eins"
    sNums(0) = "Null"
 
'// Countdown von 10 bis 0
    For i = UBound(sNums) To _
            LBound(sNums) Step -1
        Debug.Print sNums(i)
    Next
 
End Sub

Dieses Beispiel funktioniert, da implizit die untere Array-Grenze auf 0 gesetzt wird.

Option Explicit
Option Base 1
 
Sub CountDown()
 
    Dim i           As Integer
    Dim sNums(10)   As String
 
    sNums(10) = "Zehn"
    sNums(9) = "Neun"
    sNums(8) = "Acht"
    sNums(7) = "Sieben"
    sNums(6) = "Sechs"
    sNums(5) = "Fünf"
    sNums(4) = "Vier"
    sNums(3) = "Drei"
    sNums(2) = "Zwei"
    sNums(1) = "Eins"
    sNums(0) = "Null"
 
'// Countdown von 10 bis 0
    For i = UBound(sNums) To _
            LBound(sNums) Step -1
        Debug.Print sNums(i)
    Next
 
End Sub

Dieses Beispiel führt zu einem Fehler, da die Anweisung Option Base 1 alle unteren Arraygrenzen grundsätzlich auf 1 stellt, sofern diese nicht explizit gesetzt werden.

Aus diesem Grund sollten untere Arraygrenzen grundsätzlich deklariert werden:

Dim sNums(0 To 10) As String