21.08.2012 Aufrufe

Weniger Kosten, mehr Workflow

Weniger Kosten, mehr Workflow

Weniger Kosten, mehr Workflow

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

40<br />

TECHNIK & INTEGRATION<br />

Dieser besteht aus zwei Operanden,<br />

die durch den Vergleichsoperator<br />

und ggf. Leerzeichen getrennt sind. Die<br />

Operanden des Vergleichs sind Ausdrücke<br />

in einem bestimmten Typ, d. h.<br />

Variablen, Konstanten, Literale, Array-<br />

Elemente oder komplexe Ausdrücke.<br />

Der Vergleichsausdruck selbst hat den<br />

Typ boolean und hat somit als Werte<br />

entweder true oder false. Neben Vergleichen<br />

kann ein logischer Ausdruck<br />

auch noch Operanden in Gestalt von<br />

Variablen, Konstanten und Literalen<br />

vom Typ boolean enthalten.<br />

Die Vergleichsoperanden sollten<br />

möglichst genau den gleichen Typ haben<br />

(gewisse Unterschiede mit entsprechenden<br />

Annahmen von EGL sind<br />

möglich), der dann auch den Vergleich<br />

steuert. Bei numerischen Typen orientiert<br />

sich dieser am sogenannten<br />

Zahlenstrahl, bei Datumsdaten an der<br />

„Zeitachse“ und bei Zeichenkettentypen<br />

an der für den Ausdruckstyp definierten<br />

Sortierung.<br />

Die logische Negation („!“) kehrt<br />

den Wahrheitswert eines logischen<br />

(Teil-) Ausdrucks um.<br />

Das „logische und“ gibt es in zwei<br />

Varianten, einer intelligenten (&& bzw.<br />

and), die schon bei nicht erfülltem ersten<br />

Operanden aufhört zu operieren,<br />

und einer auf den internen Darstellungen<br />

bis zum Ende arbeitenden (&). Der<br />

Operator && kann z. B. in Verbindung<br />

mit Nullwerten vor einer Exception bewahren.<br />

Entsprechend arbeitet das „logische<br />

oder“ (|| , or bzw. |).<br />

Weitere spezielle logische Operationen<br />

wie das exklusive oder lassen sich<br />

nach den Bool’schen Gesetzen aus den<br />

v. g. Operationen herleiten.<br />

Anweisungen zur „Grobsteuerung“<br />

der Anwendung<br />

Einige Befehle des EGL-Kerns steuern<br />

den Ablauf von Anwendungen. Sie navigieren<br />

zwischen ihren Teilen bzw. führen<br />

die Kommunikation mit Fremdanwendungen<br />

oder Anwendungen aus<br />

anderen Technologien durch:<br />

MIDRANGE MAgAZIN · 07/2010<br />

• call:<br />

Aufruf eines EGL oder anderen<br />

Programmes,<br />

• transfer:<br />

Aufruf eines anderen Programmes<br />

mit Beendigung des laufenden<br />

Programmes,<br />

• forward:<br />

Gehen zu einer Website,<br />

Für die Navigation zwischen den<br />

Funktionen einer Anwendung gibt es<br />

die folgenden Befehle:<br />

• Aufruf einer Funktion: library.<br />

function(arg1, …),<br />

• return:<br />

Befehl zur Rückkehr aus einer<br />

Funktion, der bei Werte-Rückgabe<br />

unbedingt angegeben werden sollte.<br />

• Der Aufruf einer Funktion eines lokalen<br />

oder externen Service (Web<br />

Service) ist syntaktisch ähnlich dem<br />

Aufruf einer Bibliotheksfunktion,<br />

unterscheidet sich jedoch durch die<br />

Konfiguration im Deployment Deskriptor.<br />

Anweisungen und Strukturen<br />

zur Logik-Steuerung innerhalb<br />

von Funktionen<br />

Diese Anweisungen steuern die bedingte<br />

und zyklische Abarbeitung anderer<br />

Anweisungen oder Logik-Konstrukte<br />

gemäß der Strukturierten Programmierung.<br />

Diese machen einen goTo-Befehl,<br />

den es in EGL aus Kompatibilitätsgründen<br />

auch gibt, entbehrlich. Dieses Befehls-Urgestein<br />

wird allgemein geächtet<br />

und kann auch nur (noch) innerhalb<br />

von Programmen benutzt werden.<br />

Die bedingte Verarbeitung if- oder<br />

als Zweiweg-Alternative gibt es als<br />

if(bedingung)<br />

// Verarbeitung bei Erfülltsein<br />

else<br />

// Verarbeitung bei Nichterfülltsein<br />

end<br />

oder ohne else als<br />

if(bedingung)<br />

// Verarbeitung bei Erfülltsein<br />

end<br />

Die in den meisten Sprachen vorhandene<br />

Mehrweg-Alternative gibt<br />

es in zwei Typen, einmal als case mit<br />

Schalter-Verzweigung und einmal mit<br />

beliebigen Bedingungen. Letztere hat<br />

folgende Gestalt:<br />

case<br />

when(x == 1)<br />

// Verarbeitung bei x==1<br />

when(x == 2 || x == 3)<br />

// Verarbeitung bei x==2 oder x==3<br />

otherwise<br />

// Verarbeitung im sonstigen Falle<br />

end<br />

Auch hier kann der otherwise-Zweig<br />

entfallen, doch widerspricht dies sowohl<br />

einem guten Programmierstil als<br />

auch allgemeinen Qualitätsregeln.<br />

Ist x eine Variable, die ein Verzweigungskriterium<br />

darstellt, kann man diese<br />

„ausklammern“, woraufhin sich die<br />

Mehrweg-Alternative von oben, wenn<br />

man es so sehen will, vereinfacht:<br />

case (x)<br />

when(1)<br />

// Verarbeitung bei x==1<br />

when(2,3)<br />

// Verarbeitung bei x==2 oder x==3<br />

otherwise<br />

// Verarbeitung im sonstigen Falle<br />

end<br />

Die while-Schleife, auch abweisende<br />

oder kopfgesteuerte Schleife genannt,<br />

hat folgende Gestalt:<br />

while(durchführungsBedingung)<br />

// Verarbeitung bei Erfülltsein<br />

end<br />

Eine fußgesteuerte oder nichtabweisende<br />

Schleife (DOUNTIL-Schleife,<br />

im RPG DOW) gibt es im EGL nicht.<br />

Der Vorteil bei Existenz eines solchen<br />

Logik-Konstrukts durch Einsparung<br />

von ein wenig Code gegenüber while in<br />

relativ wenigen Fällen würde sich mit<br />

dem Nachteil Ihrer Existenz an sich für<br />

die Sprache etwa aufheben.<br />

Da bringt die for-Schleife als while-<br />

Schleife mit einer Lauf-Variablen schon<br />

echten Gewinn, insbesondere bei der<br />

Verarbeitung von Arrays.<br />

for (i int from 1 to meinArray.getSize() by 1)<br />

// Anweisungen i. A. mit meinArray[i]<br />

end<br />

oder rückwärts<br />

for (i int from meinArray.getSize() to 1 decrement<br />

by 1)<br />

// Anweisungen i. A. mit meinArray[i]<br />

end

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!