Globale Variable

Aus Mappedia

Wechseln zu: Navigation, Suche
Dieser Artikel oder Abschnitt bedarf einer Überarbeitung. Näheres ist auf der Diskussionsseite angegeben.

Hilf bitte mit, ihn zu verbessern, und entferne anschließend diese Markierung.


Eine globale Variable kann entweder per Auslöser-Editor im dafür vorgesehenen Variablen-Editor oder mittels eines globals-Blocks in Jass bzw. vJass erstellt werden. Globale Variablen, die über den Auslöser-Editor erstellt wurden haben normalerweise das Namenspräfix udg_. Bei den Jass-globals-Blöcken dagegen gilt es zu beachten, dass es im Kartenskript selbst nur einen einzigen globals-Block gibt, in welchem sich alle kartenspezifischen globalen Variablen befinden. Die Skriptsprache vJass erlaubt es dem Benutzer, an einer beliebigen Stelle im Code einen globals-Block zu definieren. Letztendlich werden alle in den Blöcken definierten Variablen dann in den Block im Kartenskript verschoben. Zusätzlich befinden sich noch jeweils in den Standard-Code-Dateien common.j, common.ai und Blizzard.j globals-Blöcke, die keine kartenspezifischen globalen Variablen, sondern jass- bzw. warcraftspezifische enthalten. Eine globale Variable ist im Gegensatz zu einer lokalen Variable normalerweise im gesamten Code bzw. in allen Auslösern verfügbar. Eine Ausnahme bilden dabei wiederum in vJass deklarierte globale Variablen, welche mit Hilfe des private- oder public-Schlüsselworts verborgen bzw. mit einem Bezugsrahmenpräfix (zum Beispiel der Name der zugehörigen Bibliothek) versehen werden können:

library MyTestLibrary
	globals
		integer myGlobal1 // Zugriff per myGlobal1, auch von außerhalb.
		public integer myGlobal2 // Zugriff per MyTestLibrary_myGlobal2, auch von außerhalb.
		private integer myGlobal3 // Zugriff per MyTestLibrary_myGlobal3, nur innerhalb der Bibliothek.
	endglobals

	scope MyNestedScope
		integer myScopeGlobal1 // Zugriff per myScopeGlobal1, auch von außerhalb.
		public integer myScopeGlobal2 // Zugriff per MyTestLibrary_MyNestedScope_myScopeGlobal2 von außerhalb und per MyNestedScope_myScopeGlobal2 innerhalb der Bibliothek.
		private integer myScopeGlobal3 // Zugriff per MyNestedScope_myScopeGlobal3, nur innerhalb des Bezugsrahmens.
	endscope
endlibrary

Außerdem bietet vJass die Möglichkeit, sogenannte statische Elemente von Schnittstellen, Strukturen oder Modulen zu deklarieren, welche im Grunde genommen nichts anderes als globale Variablen in einem neuen Bezugsrahmen darstellen:

struct TestStruct
	static integer myStaticMember1 // Zugriff per TestStruct.myStaticMember, auch von außerhalb.
	public static integer myStaticMember2 // Zugriff per TestStruct.myStaticMember, auch von außerhalb.
	private static integer myStaticMember3 // Zugriff per TestStruct.myStaticMember, nur innerhalb der Strukturdefinition.
endstruct

Auch die nichtstatischen Elemente von Strukturen werden letztendlich beim Kompilieren in globale Array-Variabeln umgewandelt. Der vJass-Code

struct TestStruct
	integer m_myMember
endstruct

wird zum Jass-Code

// Kartenskript-globals-Block
globals
...
	integer array s__TestStruct_m_myMember
...
endglobals

umgewandelt. vJass ermöglicht allerdings keine statischen Variablen in Funktionen bzw. Methoden, welche in anderen Programmiersprachen wie z. B. C++ erzeugbar sind.

[bearbeiten] Siehe auch

Besucherstatistiken
kostenlose Statistik
Seit dem 25. Oktober 2006 18:00 Uhr