4D v16.3

Compilerbefehle

Home

 
4D v16.3
Compilerbefehle

Compilerbefehle  


 

 

Der in 4D integrierte Compiler übersetzt Ihre Datenbankanwendungen in Maschinensprache. Die Vorteile des Compilers sind:

  • Geschwindigkeit: Ihre Datenbank läuft um den Faktor von 3 bis 1000 mal schneller.
  • Überprüfung des Code: Ihre Datenbank wird auf Übereinstimmung des Code geprüft. 4D Compiler findet sowohl logische als auch Syntaxfehler.
  • Schutz: Ist Ihre Datenbank kompiliert, können Sie den interpretierten Code löschen. Denn die kompilierte Datenbanken hat dieselben Funktionalitäten wie ihr Original. Der Unterschied ist, dass Sie nicht auf die Struktur und Prozeduren zugreifen bzw. diese verändern können, weder gewollt noch versehentlich.
  • Eigenständige, doppelklickbare Anwendungen: Kompilierte Datenbanken lassen sich in eigenständige Anwendungen (.EXE Dateien) umwandeln, die im Finder durch ihr eigenes Symbol dargestellt werden.
  • Ausführung im preemptive Modus: Nur kompilierter Code lässt sich in einem preemptive Prozess ausführen.

Die Befehle dieses Kapitels werden mit dem Compiler eingesetzt. Damit können Sie innerhalb Ihrer Datenbank Datentypen normieren. Der Befehl IDLE wird speziell in kompilierten Datenbanken verwendet.

C_BLOBC_REALC_TEXT
C_BOOLEANC_LONGINTC_DATE
C_POINTERC_PICTUREC_TIME
C_OBJECTIDLE

Hinweis zur Kompatibilität: Die überholten Befehle _o_C_GRAPH,_o_C_INTEGER und _o_C_STRING dürfen nicht mehr verwendet werden.

Diese Befehle, außer IDLE, deklarieren Variablen und weisen einen spezifischen Datentyp zu. So vermeiden Sie zweideutige Zuweisungen. Ist eine Variable nicht mit einem dieser Compilerbefehle deklariert, versucht der Compiler den Datentyp einer Variablen zu bestimmen. Oft lässt sich der Datentyp von Variablen in Formularen nur schwer bestimmen. Von daher ist es besonders wichtig, Variablen in Formularen mit Compilerbefehlen zu deklarieren.

Hinweis: Um Zeit zu gewinnen, können Sie im Compiler-Fenster die Option zum Generieren und Aktualisieren von typisierten Methoden verwenden. Diese Option definiert die Anzahl der Durchgänge zum Typisieren der Variablen in der Datenbank.

Arrays sind Variablen, die zur Kompilierung dieselben Regeln wie Standardvariablen befolgen müssen. Die Befehle zum Deklarieren von Arrays werden im Kapitel Arrays beschrieben.

  • Die Variablen-Indirektion ist nicht erlaubt. Sie können keine Alpha Indirektion mit dem Symbol (§) für Absatz verwenden, um indirekt auf Variablen zu verweisen. Ebensowenig können Sie dafür die numerische Indirektion mit den geschweiften Klammern ({...}) verwenden. Geschweifte Klammern gelten nur für den Zugriff auf spezifische Elemente eines deklarierten Array. Sie können nur die Parameter-Indirektion verwenden.
  • Sie dürfen den Datentyp von Variablen oder Arrays nicht ändern.
  • Sie dürfen ein eindimensionales Array nicht in ein zweidimensionales Array umwandeln und umgekehrt.
  • Sie dürfen die Länge von String Variablen oder Elementen in String Arrays nicht ändern.
  • Auch wenn der Compiler den Typ der Variablen für Sie festlegt, sollten Sie bei zweideutigen Datentypen, wie z.B. in einem Formular, den Datentyp der Variablen mit Compiler-Befehlen deklarieren.
  • Durch explizites Zuweisen von Datentypen für Variablen optimieren Sie außerdem Ihren Code. Das gilt besonders bei Variablen, die als Zähler eingesetzt werden. Mit Variablen vom Typ Lange Ganzzahl erreichen Sie maximale Performance.
  • Wollen Sie eine Variable löschen, d.h. auf Null initialisieren, verwenden Sie den Befehl CLEAR VARIABLE mit dem Namen der Variablen. Verwenden Sie bei diesem Befehl keinen String für den Namen der Variablen.
  • Die Funktion Undefined gibt immer den Wert Falsch zurück. Variablen sind immer definiert.
  • Zahlenoperationen auf Variablen vom Typ Lange Ganzzahl und Ganzzahl sind in der Regel viel schneller als Operationen auf den standardmäßigen Typ (Zahl).
  • Ist für die Methode die Eigenschaft "Als preemptive Prozess starten" markiert, darf der Code weder thread-unsafe Befehle oder andere thread-unsafe Methoden aufrufen.

Die jeweilige Vorgehensweise wird in den folgenden Abschnitten erläutert:

Nachfolgend sehen Sie ein paar grundlegende Variablendeklarationen für den Compiler:

 C_BLOB(vxMyBlob// Die Prozessvariable vxMyBlob wird als Variable vom Typ BLOB deklariert
 C_BOOLEAN(<>OnWindows// Die Interprozessvariable <>OnWindows wird als Variable vom Typ Boolean deklariert
 C_DATE($vdCurDate// Die lokale Variable $vdCurDate wird als Variable vom Typ Datum deklariert
 C_LONGINT(vg1;vg2;vg3// Die 3 Prozessvariablen vg1, vg2 und vg3 werden als Variablen vom Typ Lange Ganzzahl deklariert

In folgendem Beispiel deklariert die Projektmethode OneMethodAmongOthers 3 Parameter:

  // Projektmethode OneMethodAmongOthers
  // OneMethodAmongOthers ( Zahl ; Datum { ; Lang } )
  // OneMethodAmongOthers ( Betrag ; Prozent { ; Ratio } )
 
 C_REAL($1// 1. Parameter ist vom Typ Zahl
 C_DATE($2// 2. Parameter ist vom Typ Datum
 C_LONGINT($3// 3. Parameter ist vom Typ Lange Ganzzahl
 
  // ...

In folgendem Beispiel akzeptiert die Projektmethode Capitalize einen Parameter vom Typ Textund gibt einen Text zurück:

  // Projektmethode Capitalize
  // Capitalize ( Text ) -> Text
  // Capitalize ( Ursprungsstring ) -> String in Großbuchstaben
 
 C_TEXT(255;$0;$1)
 $0:=Uppercase(Substring($1;1;1))+Lowercase(Substring($1;2))

In folgendem Beispiel akzeptiert die Projektmethode SEND PACKETS einen Parameter vom Typ Zeit gefolgt von einer variablen Anzahl von Textparametern:

  // Projektmethode SEND PACKETS
  // SEND PACKETS ( Zeit ; Text { ; Text2... ; TextN } )
  // SEND PACKETS ( DokRef ; Daten { ; Daten2... ; DatenN } )
 
 C_TIME($1)
 C_TEXT(${2})
 C_LONGINT($vlPacket)
 
 For($vlPacket;2;Count parameters)
    SEND PACKET($1;${$vlPacket})
 End for

In folgendem Beispiel deklariert die Projektmethode COMPILER_Param_Predeclare28 die Syntax von anderen Projektmethoden für 4D Compiler vor:

  // Projektmethode COMPILER_Param_Predeclare28
 
 C_REAL(OneMethodAmongOthers;$1// OneMethodAmongOthers (Zahl ; Ganzzahl { ; Lang })
 C_INTEGER(OneMethodAmongOthers;$2// ...
 C_LONGINT(OneMethodAmongOthers;$3// ...
 C_TEXT(Capitalize;255;$0;$1// In Großbuchstaben ( Text) -> Text
 C_TIME(SEND PACKETS;$1// SEND PACKETS ( Zeit ; Text { ; Text2... ; TextN } )
 C_TEXT(SEND PACKETS;${2}) // ...



Siehe auch 

_o_C_GRAPH
_o_C_INTEGER
_o_C_STRING
C_BLOB
C_BOOLEAN
C_DATE
C_LONGINT
C_PICTURE
C_POINTER
C_REAL
C_TEXT
C_TIME
IDLE

 
EIGENSCHAFTEN 

Produkt: 4D
Thema: Compiler

 
GESCHICHTE 

Geändert: 4D v15 R5

 
ARTIKELVERWENDUNG

4D Programmiersprache ( 4D v16)
4D Programmiersprache ( 4D v16.1)
4D Programmiersprache ( 4D v16.2)
4D Programmiersprache ( 4D v16.3)