GGMan   -  Testen und Manipulieren von Geograf-Daten

Skript   Factories   Filter   Grabber   Funktionen   Macros   Utils   Files   GUI   Typen   Elemente  

Macros und Subroutinen

Allgemeines
Typen der Macros und Subroutinen
verfügbare Macros und Subroutinen

Allgemeines

Macros

Je nach Komplexität der Aufgabe können Funktionsaufrufe sehr umfangreich werden. Um das Skript übersichtlich zu halten, können Teilaufgaben in Macros ausgelagert werden. Die Macros werden außerhalb der Factories definiert und einer Globalen Variablen zugewiesen. Innerhalb der Factories wird das Macro dann über den Namen der Globalen Variablen angesprochen.

Macros haben vollen Zugriff auf die Variablen der Factories, in denen sie eingesetzt werden. Auch können mit der Funktion @Store Variablen mit dem Macro gesetzt werden, die dann in den nachfolgenden Anweisungen innerhalb der Factory zur Verfügung stehen.


$testMacro = new Macro VoidMacro
   function = @Log(ERROR,   &in, @Concat("falsches ", &lName))
   function = @Log(WARNING, &in, "eine Warnung")
end

new Factory PointLinesCounter
   name = "PunktLinienZähler"
   filter = new Filter ArtFilter
      range = 470-479
   end
   function = @If( @Gt(&lCount, 1), @Store(&lName, "Drucksystem"), $testMacro)
   finally  = @Log("&count Punkte getestet")
end
      

Macros können geschachtelt werden. Das heißt, innerhalb eines Macros können wiederum Macros aufgerufen werden.


$testArrayMacro = new Macro VoidMacro
   function = @Store(&valueI,  "wert2")
   function = @If(@Not(@Equals(&value1, &valueI)), @Log(ERROR, &in, @Concat("Punkt hat verschiedene Linien")))
end
$testMacro = new Macro VoidMacro
   function = @Store(&value1,  "wert1")
   function = @ForArray(&outLines, &l, $testArrayMacro)
end
      

Subroutinen

Eine ähnliche Funktionalität haben Subroutinen. Im Gegensatz zu den Macros werden diese aber nicht in den Kontext einer Factory eingebunden. Die Subroutinen haben keinen Zugriff auf die Variablen der Factories.

Auch die Subroutinen werden außerhalb der Factories definiert und einer Globalen Variablen zugewiesen. Aufgerufen werden sie mittels der Funktion @Sub


$testSub = new Sub StringSub
   function = @Return("Test")
end

new Factory ReaderFactory
   name = "Tester"
   function = @Log(@Sub($testSub))
end
      

Damit Subroutinen variabel auf Inhalte reagieren können, ist eine Parameterübergabe möglich. Die Parameter werden bei der Subroutinendefinition vereinbart:


$testSub = new Sub StringSub(&s1, &s2)
   function = @Return(@Concat(&s1, " - ", &s2))
end

new Factory ReaderFactory
   name = "Tester"
   function = @Log(@Sub($testSub, "Text1", "Text2"))
end
      

Die Inhalte der Parameter werden mit dem Aufruf der Funktion @Sub übergeben. Innerhalb der Subroutine stehen die Parameter dann unter den vereinbarten Namen zur Verfügung. Im obigen Beispiel sind das die Parameternamen &s1 und &s2.

Wie auch bei den Macros können Subroutinen verschachtelt werden.


$testSub2 = new Sub StringSub(&s1, &s2)
   function = @Return(@Concat(&s1, " - ", &s2))
end

$testSub1 = new Sub StringSub(&s1, &s3)
   function = @Return(@Concat("Die Funktion testSub2 fügt Texte zusammen: ", @Sub($testSub2, "Text1", "Text2")))
end

      

Typen der Macros und Subroutinen

GGMan unterscheidet wie auch bei den Funktionen zwei wesentliche Typen von Macros. Einerseits gibt es Macros ohne Rückabewert (VoidMacro), andererseits Macros mit Rückgabewert.

VoidMacro

Die sogenannten VoidMacros haben keinen Rückgabewert. Sie werden aufgerufen, um eine Tätigkeit auszuführen.

$testMacro = new Macro VoidMacro
   function = @Log("Ein Text für die LogDatei")
end
Das hier vereinbarten Macro ist ein VoidMacro. Es hat keinen Rückgabewert.

Bei den Subroutinen existiert die Variante ohne Rückgabewert nicht.

ValueMacro, ValueSub

Alle ValueMacros haben einen vereinbarten Rückgabewert. Der Rückgabewert muss innerhalb des Macros mit der Funktion @Return erzeugt werden.

Subroutinen haben immer einen Rückgabewert. Auch hier muss der Rückgabewert mit der Funktion @Return erzeugt werden.

$sMacro = new Macro StringMacro
   function = @IfThenElse( @Equals(&var1, var2),   \
                 @Return("Var1 ist gleich var2"),  \
                 @Return("Var1 ist ungleich var2") \
              )
end
         

Die ValueMacros und ValueSubs haben eine Standardrückgabetyp. Diesen Standardtyp zeigen Sie dem Aufrufer durch Ihren Typ an. Folgende Typen kann kann ein Macro bzw. eine Subroutine haben:

Diesen Standardwert erzeugt das Macro bzw. die Subroutine beim Aufruf aus dem Rückgabewert der Funktion @Return. Verlangt die aufrufende Funktion einen anderen als den Standardtyp, wird dieser von dem Macro automatisch konvertiert und zurückgegeben.

Solle die Konvertierung nicht möglich sein, wird von der Funktion eine Fehlermeldung erzeugt. GGMan protokolliert diese dann in der LogDatei.

verfügbare Macros und Subroutinen

VoidMacro, BooleanMacro, LongMacro, DoubleMacro, StringMacro, ObjectMacro, ArrayMacro

StringValue name : Das Macro kann einen Namen erhalten. Bei Fehlermeldungen wird dieser Name angezeigt.

StringValue spec : Mit diesem Parameter kann die Funktionalität des Macros dokumentiert werden.

Void function : Ein Funktionsaufruf. Mehrere Angaben werden bis zum erstmaligen Aufruf der Funktion @Return nacheinander ausgeführt.

BooleanSub, LongSub, DoubleSub, StringSub, ObjectSub, ArraySub

StringValue name : Die Subroutine kann einen Namen erhalten. Bei Fehlermeldungen wird dieser Name angezeigt.

StringValue spec : Mit diesem Parameter kann die Funktionalität der Subroutine dokumentiert werden.

Void function : Ein Funktionsaufruf. Mehrere Angaben werden bis zum erstmaligen Aufruf der Funktion @Return nacheinander ausgeführt.

GGMan © 2009, Jörg Schröder, WWW: GeoCalc - Softwareentwicklung Jörg Schröder, Mail: info@geocalc.de
Impressum und Hinweise: Impressum
weitere Informationen bei: Vermessungsbüro M. Wolf - J. Schröder