Dim

Mittels Dim werden Variablen dimensioniert/angelegt.

Dim Name[(Elemente)] [, NameN[(Elemente)]] as [static] Datatype [= InitialValue]

"Static"

Mit static werden die Variablen in einer Methode statisch angelegt. D.h. sie sind schon ab Beginn des Programms bzw. bei Erzeugung einer neuen Klasseninstanz im Arbeitsspeicher dimensioniert und werden beim Aufruf einer Methode (im Gegensatz zu lokalen Variablen) nicht (erneut) initialisiert. Sie behalten somit ihre Werte vom letztmaligem Ausführen der Methode. Hierbei ist jedoch zu beachten, dass man die Methode dann nicht parallel gleichzeitig ausführen darf (z.B. durch mehrere Threads), da die parallel ausgeführten Methoden dann auf den gleichen Variablenspeicher zugreifen würden. Dies kann zu Fehlern führen, die schwer zu finden sind.

Standardmäßig werden die Variablen lokal (temporär) innerhalb einer Methode angelegt, d.h. sie existieren nur solange die Methode ausgeführt wird.

"InitialValue"

InitialValue ist eine Funktionalität, mit der man den numerischen- und string-Variablen bei der Dimensionierung optional einen Startwert zuweisen kann (auch in Methoden). Hierbei werden alle angegebenen Variablen, auch Arrays mit einem Anfangswert belegt.

dim a,b(7) as byte = 42
dim s as string = "hallo"
  • Innerhalb einer Klasse dimensionierte Variablen sind in der gesamten Klasse, auch in Methoden der Klasse sichtbar.
  • In Methoden dimensionierte Variablen sind nur innerhalb der Methode sichtbar und wahlweise lokal oder statisch.

Wird in einer Klasse, z.Bsp. im Hauptprogramm eine Variable mit dem Namen „myVar“„ und in einer seiner Methoden ebenfalls eine Variable mit dem Namen „myVar“ dimensioniert (als Parameter oder lokale Variable), dann wird die Variable der Methode bevorzugt behandelt. D.h. die Variable der Klasse ist dann innerhalb der Methode ausgeblendet (versteckt).

dim a,b as byte
dim c(19) as integer    ' dynamisches Integer-Array mit 20 Elementen (im Quelltext erweiterbar)
dim s1 as string
dim s2[4] as string     ' statisches String-Array mit 5 Elementen (nicht erweiterbar)
class myclass
  dim title as string
  [..]
endclass
procedure hallo(a as byte)
  dim c as static integer    ' statische Integer-Variable
  dim s1 as string
endproc