-
Für mich gehört das Lesen an den Anfang der Schleife, da ohne GOTO bei Prüfbedingungen per "ITER" immer an den Schleifenanfang gesprungen werden kann.
Wenn das Lesen am Ende liegt, sehe ich dann häufig z.B. 2x Fetch/Read, 1x vor der Schleife und 1x am Ende und mitten drin komplizierte If's um für Prüfungen oder zum Überlesen wieder an den Ende-Read zu kommen.
In anderen Sprachen gibt es auch den "break" um eine Schleife zu verlassen und einen "continue" um an den Schleifenanfang zu gehen. Als Schleifen gibts dann "while(true) {}" oder "for(; ; ) {}" und niemand hält dies für schlechten Stil. Dies hat auch nichts mit RPG-Denke zu tun.
Was spricht also gegen Break und Iter?
Damit wird ein Code viel übersichtlicher und vor allem klarer.
Tja, und was Abbruch Bedingungen angeht, so kann man da auch noch mit Monitor-Gruppen arbeiten. Dies entspricht dann "Try {} catch (ex) {}", wobei der Finally{} noch fehlt.
Auch damit kann ich dann Close() bei Abbrüchen erreichen.
In ILE habe ich mir z.B. für das FileHandler-Problem das Konzept verinnerlicht:
dow CallRead(Buffer);
enddo;
dcl-proc CallRead;
dcl-pi *n ind;
Buffer ...
end-pi;
fetch ... into Buffer;
if sqlcode = *zero;
return *on;
endif;
// Logging !
return *off;
end-proc;
Somit habe ich den Read wieder am Schleifenanfang und kann Iter/Leave verwenden.
Dies kann man dann ebenso für alle anderen SQL's lösen und im Code liest sich das dann so:
if CallUpdate(Buffer);
endif;
if CallInsert(Buffer);
endif;
if CallDelete(Buffer);
endif;
Dann sieht's schon fast so schön wie C# aus. Und dies mache ich schon eine halbe Ewigkeit (auch seit RPG) so.
-
... leave und iter - wo ist der Eimer.
Da macht man sich eine procedure, die gibt true zurück, wenn sie was gelesen hat und dann hat man:
dow liesWas();
machwas();
enddo;
Hat Dirk mal Turnschuhprogrammierung genannt - wer auch immer habe ihn selig - hat aber nicht nur mir gefallen.
D*B
-
Ist zwar schon etwas älter,
aber ich schieb den SQLcode nach der Operation evtl in eine neue Variable.
damit kann ich dann zb. einen zweiten Fetch innerhalb einer weiteren der Schleife machen und der zweite FETCH beendet nicht meine erste Schleife
dou sqlcod_1 <> 0;
fetch f1 into ....
sqlcode_1 = sqlcode
dou sqlcode_2 <> 0
fetch f2 into....
sqlcode_2 = sqlcode
.....
enddo
enddo
Programmierung
-
Mag nicht state of the art sein, aber meine Verfahren laufen so:
dow 1=1; // früher Do *hival
fetch ...
if sqlcode <> *zero;
leave;
endif;
// towas
if error;
iter;
endif;
enddo:
Vorteile:
- Bei Fehlern/nicht zuverarbeitenden Daten kann ich einfach an den Anfang springen.
- SQLCODE ist für die Schleifen nicht relevant.
-
So dann gebe ich auch noch meinen Senf zum Close cursor dazu.
Mein Close Cursor findet immer da statt wo ich ihn auch machen möchte und es logisch ist und zur Sicherheit noch vor dem OPEN CURSOR, in die PSSR und vor den *INLR.
Und ich bin auch schon daran verzweifelt als ich ein Programm geändert hatte warum das SQL immer noch nicht richtig funktioniert, dabei war der Cursor nicht geschlossen und er hat den bereits geöffneten verwendet. Deshalb auch die vielen CLOSE CURSOR.
-
Bei Option Close Cursor mit EndMod ist das ja unnötig.
Nun ja, wenn man modular programmiert;-).
-
 Zitat von Fuerchau
Bei Option Close Cursor mit EndMod ist das ja unnötig.
Nun ja, wenn man modular programmiert;-).
... das ist unnötig! Weil natürlich auch der ODP mit dem *ENDMOD gelöscht wird!
... Und beim nächsten Durchlauf ein FULL OPEN gemacht wird, der 15-20% langsamer ist (weil der ODP wieder aufgebaut werden muss) als ein PSEUDO OPEN, bei dem nur die Daten in dem ODP aktualisiert werden.
... und gerade bei modularer Programmierung ist es gerade sinnvoll die ODPs nicht zu löschen! Die gleiche kann aus den Prozedur aus den unterschiedlichsten Programmen/Prozeduren aufgerufen werden.
Birgitta
-
Tja, ein ODP hat mit dem Cursor-Close aber auch gar nichts zu tun. Ein ODP bleibt ab einem 2. Open immer offen.
Similar Threads
-
By mahones in forum NEWSboard Programmierung
Antworten: 31
Letzter Beitrag: 02-04-20, 10:21
-
By Hubert in forum NEWSboard Programmierung
Antworten: 3
Letzter Beitrag: 14-10-19, 13:02
-
By nico1964 in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 29-06-15, 06:53
-
By Gimli in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 06-09-02, 11:58
-
By moskito in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 13-09-01, 17:40
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks