8 Globale Variablen (variables)
Der Aufbau einer Variablendeklaration setzt sich aus dem Schlüsselwort variable, dem Datentyp, dem Variablenidentifikator und dem Endezeichen (Terminator) ; zusammen. In einer Anweisung können mehrere Variablen mit demselben Datentyp deklariert werden. Dabei sind die Identifikatoren der Variablen durch , (Komma) zu trennen.
Wird die Variable direkt im Dialog oder Modul und nicht innerhalb einer Regel oder Methode
Globale Variablen werden im IDM ähnlich wie Objekte behandelt, sodass nicht nur der Inhalt der Variablen sondern auch die Variable selbst zur Laufzeit geändert werden kann
8.1 Variablendefinition
Syntax
{ export | reexport } variable <Datentyp> <Variablenname> [ , <Variablenname> ] ;
Es stehen folgende Datentypen zur Verfügung:
Datentyp |
Wertebereich |
---|---|
beliebiger undefinierter Datentyp; wird erst durch aktuelle Belegung definiert. |
|
Datentyp der Attribute im IDM. |
|
Boolescher Wert (true | false). |
|
IDM-Datentyp. |
|
Klasse eines Objekts, z.B. "window". |
|
Symbolische Konstante; Aufzählungstyp für verschiedene spezielle Attribute, z.B. "sel_row". |
|
Ereignisart, z.B. "select". |
|
Indexwert für 2-dimensionale Attribute [I,J]. |
|
Ganzzahl ("long integer"), z.B. 42. |
|
Methode, z.B. "delete". |
|
Objekt im Sinne des DM (eigentliche Objekte, Ressourcen, Funktionen, Regeln…). |
|
Zeiger aus der Anwendung. |
|
beliebig lange Zeichenkette (Null-terminiert), z.B. "Hallo". |
8.2 Variablendefinition mit Initialisierung
Die folgende Definition initialisiert die erzeugte Variable sofort mit einem Wert. Der Datentyp des Wertes muss selbstverständlich mit dem Datentyp der Variablen identisch sein.
Syntax
{ export | reexport } variable <Datentyp> <Variablenname> := <Wert> [ , <Variablenname> := <Wert> ] ;
Objektreferenzen, Zahlen, Farben, Strings und boolesche Werte, d.h. alles was vom IDM unterstützt wird, kann in den Variablen vom Typ anyvalue gespeichert werden.
Beispiel
variable integer Fuellstand;
variable boolean Ventil_Zustand := true;
variable string Ventil_Name := "Hauptventil";
variable enum Mode;
variable object PbSchalter; // PbSchalter sei ein Pushbutton
Ein String ist immer eine in doppelte Hochkommas eingeschlossene Zeichenkette.
Ventil_Name := "Hauptventil";
In diesem Beispiel ist das Wort "Hauptventil" ein String.
8.3 Konfigurierbare Variablen
Das zusätzliche Schlüsselwort config kennzeichnet eine globale Variable als konfigurierbar, d.h. ihr Wert kann in einer Konfigurationsdatei gesetzt werden.
Syntax
{ export | reexport } { config } variable <Datentyp> <Variablenname> { := <Wert> } [ , <Variablenname> { := <Wert> } ] ;
Die Konfigurationsdatei wird mit den Funktionen loadprofile(), DM_LoadProfile oder DMcob_LoadProfile geladen.
Siehe auch
Attribut .configurable
Kapitel „Konfigurationsdatei“ im Handbuch „Entwicklungsumgebung“
8.4 Variable vor Änderungen schützen
Durch Verwendung des Schlüsselworts constant statt variable oder des Setzens des Attributs .constant an der Variablen auf true kann eine Änderung des Inhalts der globalen Variablen verhindert werden.
Syntax
{ export | reexport } constant <Datentyp> <Variablenname> := <Wert> [ , <Variablenname> := <Wert> ] ;
Siehe auch
Attribut .constant
Beispiel
dialog D
variable integer V := 123;
constant integer C := 456;
on dialog start
{
C:=V; // Evaluationsfehler da C nicht veränderbar
V := 234; // OK
V.constant := true;
V := 345; // Fehler – Variable nun schreibgeschützt
}
8.5 Änderbare Attribute von globalen Variablen
Bei globalen Variablen können folgende Attribute dynamisch zur Laufzeit verändert werden:
Attribut |
Wertebereich |
Bedeutung |
---|---|---|
.value |
anyvalue |
Wert |
.type |
datatype |
Datentyp |
.constant |
boolean |
Änderbarkeit des Inhalts |
Um eine Variable und nicht ihren Inhalt anzusprechen, ist das Attribut .self zu verwenden. Danach kann dann das Attribut folgen, das man von der Variablen ansprechen möchte.
Beispiel
variable integer I := 2;
print I.self.type // integer
print I.self.value // 2
I.self.type := boolean;
print I.self.type; // boolean
Hinweis
Dies ist nur bei globalen, nicht jedoch bei lokalen Variablen (Variablen, die innerhalb von Regeln und Methoden deklariert werden), möglich.