Weniger Kosten, mehr Workflow
Weniger Kosten, mehr Workflow
Weniger Kosten, mehr Workflow
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