Liebe Studierende,

ein paar Hinweise zu verschiedenen Code-Sequenzen:

Wenn in einem JavaFX-Controller die Rexx-Routine mit arg(arg()) aufgerufen wird, kann überall innerhalb der Rexx-Routine auf dieses Argument zugegriffen werden, unabhängig davon, ob man es selbst verwendet oder nicht. Das slotDir-Argument muss immer das letzte sein, damit die RexxScript-Annotationen funktionieren können.

Die RexxScript-Annotationen können in den runden Klammern durch Leerzeichen getrennt mehrere ScriptContext-Einträge benennen, wodurch das Schreiben einfacher/leichter wird.

Beide Anmerkungen/Hinweise veranschaulicht:

oder:


Mit ooRexx 5.0 kann man das Testen, ob eine Variable auf .nil verweist ein bisschen einfacher schreiben, nämlich statt:

   if sport = .nil then sport = "all Sports"

kann man es mit der neuen isNil-Methode testen (gibt .true oder .false zurück):

   if sport~isNil then sport = "all Sports"


Ad Schleifenzähler, Einsparen von Zuweisungen zu Zwischenvariablen:


Achtung, in Rexx ist der Unterstrich (wie Frage- und Rufezeichen) ein ganz normales Zeichen, das man auch für Bezeichner verwenden kann, gleichberechtigt zu den Buchstaben a-z. Da Rexx Variablen, die keinen Wert aufweisen, mit dem Variablen-Bezeichner selbst als Wert arbeitet, wird die folgende Anweisung einen durchgehenden Strich (29 Unterstriche) ausgeben. Tatsächlich ist dieser durchgehende Strich eine Variable! :)

Statt:

say "Durchsucht eine XML Datei und wiedergibt alles First & Last Names!"
say _____________________________

sollte man in diesem Fall den Strich unter Hochkomma setzen, damit klar ist, dass wir diesen Unterstrich als Zeichenkette nutzen möchten und daher wie folgt schreiben:

say "Durchsucht eine XML Datei und wiedergibt alles First & Last Names!"
say "_____________________________"


Ad SQLite-PRAGMAs: das sind Konfigurationsanweisungen, die man auch über Java setzen kann, wenn man weiß, a) dass das geht und b) wo die Dokumentation dafür zu finden ist, was mit Hilfe von Suchmaschinen möglich wird:

Ein Hinweis ad Cachen von Objekten, insbesondere des Connection-Objektes, sodass man nicht andauernd eine Connection zur Datenbank herstellen muss: einfach am Programmbeginn das Connection-Objekt erzeugen und in .local speichern. Die ooRexx-Umgebung ".local" stellt seine Einträge allen Rexxprogrammen innerhalb desselben RexxInterpreters (ooRexx ist sehr mächtig und kann beliebig viele RexxInterpreter-Instanzen verwalten) zur Verfügung. Beispiel (ungetestet):

/* z.B. in main.rex am Anfang */
... cut ...
SQLiteConfigClz=bsf.import("org.sqlite.SQLiteConfig") -- importieren der Javaklasse
conf=SQLiteConfigClz~new                              -- eine Instanz erzeugen
conf~setJournalMode(SQLiteConfigClz~JournalMode~WAL)  -- konfigurieren

.local~conn=conf~createConnection("jdbc:sqlite:jadmin.db")   -- in .local mit Namen "CONN" speichern

... cut ...
.conn~close  -- vor dem Ende die Connection schließen	-- beginnt mit Punkt, daher Umgebungssymbol, Rexx sucht "CONN"-Eintrag in seiner Umgebung



/* z.B. in controller.rex einen Zugriff zur DB herstellen */
... cut ...
stmt=.conn~createStatement    -- beginnt mit Punkt, daher Umgebungssymbol, Rexx sucht "CONN"-Eintrag in seiner Umgebung
... Zugriffe auf die Datenbank ...
stmt~close 
... cut ...  

Umgebungssymbole werden in der Rexx-Umgebung in der folgenden Reihenfolge gesucht (erster Treffer gewinnt), nachdem der führende Punkt vom Umgebungssymbol (in Großbuchstaben) entfernt wurde:

  1. lokale Umgebung des Pakets/der Programmdatei: .context~package~local (eine Instanz von .Directory)
  2. .local (eine Instanz von .Directory, für jeden RexxInterpreter gibt es eine eigene Instanz)
  3. .environment (eine Instanz von .Directory, global für Programme in jedem RexxInterpreter verfügbar)
  4. System-Umgebung (kann von Programmierern nicht direkt angesprochen werden)

Zum Schluss anbei "demoResource.rex", das die ::resource-Direktive demonstriert, aber auch wie man einfacher Werte in einfache oder doppelte Hochkomma setzt, was für SQL manchmal wichtig ist. Dabei gilt es auch den Fall zu berücksichtigen, dass das Begrenzungszeichen auch als Buchstabe vorkommt. SQL folgt dabei interessanterweise den Rexxregeln, die auch in qq1() und qq2() angewendet werden.

Sollten Sie Fragen haben, dann bitte über die Liste!

Mit freundlichem Gruß

Rony G. Flatscher

-- 
--
__________________________________________________________________________________

Prof. Dr. Rony G. Flatscher
Department Wirtschaftsinformatik und Operations Management
Institut für Wirtschaftsinformatik und Gesellschaft
D2c 2.086
WU Wien
Welthandelsplatz 1
A-1020  Wien/Vienna, Austria/Europe

http://www.wu.ac.at
__________________________________________________________________________________