Data
Einführung
PureBasic erlaubt die Benutzung von Data, um vordefinierte Blöcke mit Informationen innerhalb Ihres Programms zu speichern. Dies ist sehr nützlich für Standard-Werte eines Programms (Sprachen-Strings zum Beispiel) oder, in einem Spiel, zum Definieren eines (vorberechneten) Sprite-Weges.
DataSection muss zuerst aufgerufen werden, um den nachfolgenden Datenabschnitt (englisch "Data section") anzukündigen. Dies bedeutet, dass alle Sprungmarken (Labels) und Datenbestandteile in der DataSection des Programms gespeichert werden, welche einen viel schnelleren Zugriff als der Code-Abschnitt hat. Data wird benutzt zum Eingeben der Daten. EndDataSection muss angegeben werden, wenn nach dem Datenabschnitt weiterer Programmcode folgt. Einer der Vorteile ist, dass Sie ohne Probleme verschiedene Datenabschnitte in ihrem Code definieren können. Die Restore und Read Befehle werden benutzt, um die Daten auszulesen.
Befehle
BeschreibungDataSection
Beginnt einen Datenabschnitt (englisch "Data section").
BeschreibungEndDataSection
Beendet einen Datenabschnitt.
BeschreibungData.TypName
Definiert Daten. Der Typ kann nur ein einfacher Basic Typ (Integer, Long, Word, Byte, Ascii, Unicode, Float, Double, Quad, Character, String) sein. Eine beliebige Anzahl Daten kann sich auf einer Zeile befinden, jede abgegrenzt durch ein Komma ','.
Beispiel
Data.l 100, 200, -250, -452, 145 Data.s "Hello", "This", "is ", "What ?"Für fortgeschrittene Programmierer: Es ist auch möglich, eine Prozedur-Adresse oder die Adresse einer Sprungmarke innerhalb eines Data-Blocks zu speichern, wenn dessen Typ auf Integer (.i) gesetzt wird. (Die Verwendung des Typs 'Integer' speichert die (verschiedenen) Adressen in 32-Bit bzw. 64-Bit Umgebungen korrekt.) Dies kann verwendet werden, um z.B. einfach virtuelle Funktionstabellen aufzubauen.
Beispiel
Procedure Max(Number, Number2) EndProcedure Label: DataSection Data.i ?Label, @Max() EndDataSection
Beispiel
Interface MyObject DoThis() DoThat() EndInterface Procedure This(*Self) MessageRequester("MyObject", "This") EndProcedure Procedure That(*Self) MessageRequester("MyObject", "That") EndProcedure m.MyObject = ?VTable m\DoThis() m\DoThat() DataSection VTable: Data.i ?Procedures Procedures: Data.i @This(), @That() EndDataSection
BeschreibungRestore Label
Dieses Schlüsselwort ist nützlich, um die Startposition für ein nachfolgendes Read auf eine angegebene Sprungmarke (Label) zu setzen. Alle für diesen Zweck verwendeten Sprungmarken sollten sich innerhalb einer DataSection (des Datenabschnitts) befinden, da die Daten beim Kompilieren als ein vom Programmcode seperater Block behandelt werden und möglicherweise von einer Sprungmarke getrennt werden, wenn die Sprungmarke außerhalb der DataSection platziert wurde.
Beispiel
Restore StringData Read.s MyFirstData$ Read.s MySecondData$ Restore NumericalData Read.l a Read.l b Debug MyFirstData$ Debug a End DataSection NumericalData: Data.l 100, 200, -250, -452, 145 StringData: Data.s "Hello", "This", "is ", "What ?" EndDataSection
BeschreibungRead[.<Typ>] <Variable>
Liest die nächsten verfügbaren Daten ein. Die nächsten verfügbaren Daten können mittels des Restore Befehls geändert werden. Standardmäßig sind die nächsten verfügbaren Daten die zuerst deklarierten Daten. Der Typ der zu lesenden Daten wird durch den 'Typ'-Suffix festgelegt. Der Standard-Typ wird verwendet, wenn dieser nicht angegeben wird.