4D v16.3Compiler Direktiven |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
4D v16.3
Compiler Direktiven
Compiler Direktiven
4D kennt drei Variablentypen:
Weitere Informationen dazu finden Sie im Abschnitt Variablen. Prozess- und Interprozessvariablen sind von der Struktur her dasselbe für den Compiler. Da der Compiler nicht den Prozess bestimmen kann, in welchem die Variable verwendet wird, sollten Sie Prozessvariablen mit mehr Bedacht als Interprozessvariablen verwenden. Alle Prozessvariablen werden systematisch dupliziert, wenn ein neuer Prozess beginnt. Eine Prozessvariable kann in jedem Prozess einen anderen Wert haben, sie ist dagegen für die gesamte Datenbank vom gleichen Typ. Alle Variablen haben einen Typ. Wie im Abschnitt Datentypen beschrieben, gibt es folgende Typen:
Es gibt verschiedene Typen von Arrays:
Hinweise: Im interpretierten Modus kann sich der Datentyp einer Variablen ändern. Das ist möglich, da der Code interpretiert und nicht kompiliert wird. 4D interpretiert jede Anweisung separat und versteht ihren Kontext. Der Compiler arbeitet folgendermaßen:
Trifft der Compiler auf denselben Variablennamen für zwei unterschiedliche Datentypen, kann er keine Entscheidung treffen. Er muss nämlich, um ein Objekt zu typisieren und eine Speicheradresse zu vergeben, die exakte Kennung dieses Objekts wissen, d.h. Name und Datentyp. Der Compiler erstellt für jede kompilierte Datenbank eine Übersicht, die für jede Variable Name (oder Identifier) und Platzierung (oder Speicheradresse) sowie den gemäß dem Datentyp belegten Platz angibt. Diese Übersicht heißt Symboldatei. In den Einstellungen der Datenbank können Sie festlegen, ob diese Übersicht während dem Kompilieren in Form einer Textdatei angelegt werden soll. Soll der Compiler die Typisierung Ihrer Variablen prüfen oder sie selbst typisieren, ist die Platzierung der Direktiven einfach. Sie können je nach Ihrer Arbeitsweise zwischen zwei Möglichkeiten wählen:
Werden Variablen über eine Compiler Direktive typisiert, erhalten sie einen Standardwert, den sie während der Sitzung beibehalten, solange sie nicht zugewiesen sind. Der Standardwert richtet sich nach Variablentyp und -kategorie, Ausführungskontext (interpretiert oder kompiliert), und im kompilierten Modus nach den definierten Optionen auf der Seite Compiler der Datenbank-Eigenschaften:
Nachfolgende Tabelle zeigt diese Standardwerte:
Compiler Direktiven sind in folgenden Fällen sinnvoll:
Außerdem sorgen Compiler Direktiven für eine Verringerung der Kompilierungszeit. Manchmal kann der Compiler den Datentyp einer Variablen nicht bestimmen. Ist dies der Fall, generiert er eine entsprechende Fehlermeldung. In Methode A Variable:=True In Methode B Variable:="Der Mond ist rund" Wird Methode A vor Methode B kompiliert, bewertet der Compiler die Anweisung Variable:="Der Mond ist rund" als Änderung des Datentyps gegenüber der zuvor gefundenen Variablen. Der Compiler meldet, dass eine Retypisierung stattgefunden hat und erstellt eine Fehlermeldung. In den meisten Fällen können Sie das Problem beheben, indem Sie das zweite Auftreten der Variablen umbenennen. Zweideutigkeit aufgrund einer gefolgerten Ableitung Sie können in einem Formular für folgende Objekte Standardwerte zuweisen: Combo Boxen, PopUp Menüs, Registerkarten, DropDown Listen, Menü/DropDown Listen und rollbare Bereiche unter Verwendung der Schaltfläche Bearbeiten für die Liste Werte (in der Eigenschaftenliste unter dem Thema Eingabekontrollen). Weitere Informationen dazu finden Sie im Abschnitt Standardwerte des Handbuchs 4D Designmodus. Die Standardwerte werden automatisch in ein Array geladen, das denselben Namen wie das Objekt hat. Case of In diesem Fall tritt die Zweideutigkeit ein––beim Analysieren der Methoden leitet der Compiler für das Objekt MyPopUp als Datentyp Zahl ab. In diesem Fall ist es notwendig, das Array in der Formular- oder einer Compiler-Methode explizit zu deklarieren: Case of Keine Möglichkeit zur Bestimmung des Datentyps Dieser Fall tritt ein, wenn eine Variable ohne Typisierung in einem Kontext verwendet wird, der keine Angaben zum Datentyp liefert. Hier kann nur eine Compiler Direktive dem Compiler helfen. Dieses Phänomen tritt hauptsächlich in vier Kontexten auf:
Von einem Zeiger wird nicht erwartet, dass er etwas anderes als seinen eigenen Datentyp zurückgibt. Nehmen wir folgende Sequenz: Var1:=5.2(1) Obwohl (2) den Variablentyp definiert, auf den der Zeiger zeigt, ist der Typ von Var2 nicht festgelegt. Der Compiler erkennt während der Kompilation zwar einen Zeiger, hat jedoch keine Möglichkeit, zu erkennen, auf welchen Variablentyp er zeigt. Deshalb kann er den Datentyp von Var2 nicht ableiten. Hier ist eine Compiler Direktive erforderlich, zum Beispiel C_REAL(Var2). Befehle mit mehrfacher Syntax Der Befehl GET FIELD PROPERTIES lässt zwei Syntax-Arten zu: Bei einem Befehl mit mehrfacher Syntax kann der Compiler nicht erraten, welche Syntax und Parameter Sie gewählt haben. Hier müssen Sie Compiler Direktiven einsetzen, um die im Befehl übergebenen Variablen zu typisieren, wenn diese nicht bereits an anderer Stelle in der Datenbank aufgrund ihrer Verwendung typisiert wurden. Befehle mit optionalen Parametern mit unterschiedlichen Datentypen Der Befehl kann verwendet werden in Form von: Über URL aufgerufene Methoden Sind alle in der Datenbank vorkommenden Variablen explizit deklariert, muss der Compiler die Typisierung nicht überprüfen. In diesem Fall können Sie in den Einstellungen der Datenbank definieren, dass der Compiler nur die Übersetzung der Methode vornimmt. Das spart mindestens 50% an Zeit für die Kompilierung. Über Compiler Direktiven können Sie Ihre Methoden beschleunigen. Weitere Informationen dazu finden Sie im Abschnitt Tipps zur Optimierung. Nehmen wir an, Sie müssen einen Zähler über eine lokale Variable erhöhen. Deklarieren Sie die Variable nicht, geht der Compiler vom Typ Zahl aus. Deklarieren Sie die Variable als Lange Ganzzahl, arbeitet die kompilierte Datenbank effizienter. Auf einem Rechner beansprucht der Typ Zahl 8 Bytes, deklarieren Sie den Zähler als Lange Ganzzahl, benötigt er nur 4 Bytes. Das Hochzählen eines 8-Byte Zählers dauert also länger als das eines 4-Byte Zählers. Compiler Direktiven lassen sich auf zwei Arten verwalten, je nachdem ob der Compiler Ihre Variablen typisieren soll oder nicht. Der Compiler muss die Kriterien zum Erkennen von Variablen beachten. V1:=True bestimmt der Compiler für die Variable V1 als Datentyp Boolean. Schreiben Sie: V2:="Dies ist ein einfacher Satz" bestimmt der Compiler für die Variable V2 als Datentyp Text. Der Compiler kann den Datentyp einer Variablen auch in nicht so klaren Situationen bestimmen: V3:=V1 `V3 ist vom selben Typ wie V1 Der Compiler bestimmt den Datentyp Ihrer Variablen auch über Aufrufe von 4D Befehlen und über Ihre Methoden. Übergeben Sie z.B. in einer Methode einen Parameter vom Typ Boolean und einen vom Typ Datum, weist der Compiler in der aufgerufenen Methode den lokalen Variablen $1 und $2 die Typen Boolean und Datum zu. Bestimmt der Compiler den Datentyp durch Schlussfolgerung, weist er nie die eingrenzenden Typen Ganzzahl, Lange Ganzzahl oder Text zu, sondern standardmäßig immer den größtmöglichen Typ. Schreiben Sie z.B.: Nummer:=4 weist der Compiler als Datentyp Zahl zu, obwohl 4 eine Ganzzahl ist. Dadurch kann der Wert in einem anderen Zusammenhang auch den Wert 4,5 haben. Haben Sie Ihre Variablen typisiert und sind Sie sicher, dass Ihre Typisierung kohärent und vollständig ist, können Sie in den Einstellungen zum Kompilieren explizit festlegen, dass der Compiler diese Arbeit nicht mehr ausführen muss. Sollte Ihre Typisierung nicht hundertprozentig richtig sein, meldet der Compiler beim Kompilieren Fehler und nennt die erforderlichen Änderungen. 2) Über Befehle der Compiler Direktiven können Sie explizit die in Ihrer Datenbank verwendeten Variablen deklarieren. Sie werden folgendermaßen verwendet: C_BOOLEAN(Var) Solche Direktiven sagen dem Compiler, dass er eine Variable Var mit dem Typ Boolean anlegen soll. Eine Anwendung mit Compiler Direktiven erleichtert die Arbeit des Compilers und vermeidet Vermutungen. Eine Compiler Direktive hat Vorrang vor Ableitungen, die auf Anweisungen oder der Verwendungsart beruhen. Variablen, die mit der Compiler Direktive _o_C_INTEGER definiert wurden, sind in der Tat dasselbe wie Variablen mit der Compiler Direktive C_LONGINT. Das sind in beiden Fällen Lange Ganzzahlen zwischen –2147483648 und +2147483647. Soll der Compiler Ihre Typisierung nicht prüfen, müssen Sie ihm einen Code vorgeben, um die Compiler Direktiven zu identifizieren. Die Konvention ist folgende: Hinweis: Die Syntax zum Deklarieren dieser Parameter lautet: Besondere Parameter
Beispiel C_LONGINT($0) Compiler Direktiven entfernen jede Zweideutigkeit bei Datentypen. Auch wenn eine gewisse Striktheit notwendig ist, muss das nicht heißen, dass der Compiler überhaupt keine Inkonsistenz toleriert. C_LONGINT(vInteger) betrachtet der Compiler das nicht als Konflikt des Datentyps, der eine Kompilierung verhindert; vielmehr rundet er einfach auf den nächstgelegenen Wert auf (3 anstatt 2.6).
Siehe auch
Einzelheiten zur Syntax
|
EIGENSCHAFTEN
Produkt: 4D
GESCHICHTE
ARTIKELVERWENDUNG
4D Programmiersprache ( 4D v16) |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||