COND in Schleife

Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Getting started ... Alles für einen gelungenen Start.
7 Beiträge • Seite 1 von 1
7 Beiträge Seite 1 von 1

COND in Schleife

Beitrag von SaskuAc (Specialist / 321 / 37 / 43 ) »
Hallo,

ich habe hier kein problem, allerdings würde ich gerne etwas performance aus meinen programmen rauskitzeln.

Einer meiner Punkte ist das ab ABAP 7.40 eingeführte Statement "COND". Nun wüsste ich gerne, wie sich das in schleifen verhält.

Prüft das Statement in einer Schleife immer wieder von neuem die condition oder nur einmal und "speichert" diese dann?

Um zu verdeutlichen was ich meine - die Frage ist, was läuft performanter:
1.

Code: Alles auswählen.


while var_x <= cond #( when ausda > time_result-ausda then endda
                                   else ausda ).

" some stuff 

endwhile.

oder
2.

Code: Alles auswählen.

data(temp) = cond #( when ausda > time_result-ausda then endda
                                 else ausda )
while var_x <= temp.

" some stuff 

endwhile.

was ist hier performanter? - gut in diesem trivialen Beispiel ist es relativ egal, glaube ich, allerdings könnte man im Cond auch eine Funktionale Methode ( muss noch nicht mal im Cond sein, sondern generell einfach so in der Schleife ) stehen, welche recht performancehungrig ist. und wenn die bei jedem schleifenaufruf aufgerufen werden würde, würde sich das dann auch wieder ordentlich auf das Programm auswirken.

Also die eigentliche Frage ist, werden Prüfungen ( wie Cond ) oder funktionale Methodenaufrufe jedes Mal durchlaufen oder nur einmal und dann immer auf den da gegebenen wert geprüft?

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: COND in Schleife

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
COND ist ein Befehl, der steht im Kernel, da wird nichts durchlaufen. WHILE prüft die Bedingung auch bei jedem Durchlauf.

Funktionale Methoden werden immer durchlaufen, ein Aufruf weiß nichts von einem anderen. Willst du das verhindern, musst du den Wert puffern und auslesen.


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: COND in Schleife

Beitrag von SaskuAc (Specialist / 321 / 37 / 43 ) »
ralf.wenzel hat geschrieben:COND ist ein Befehl, der steht im Kernel, da wird nichts durchlaufen. WHILE prüft die Bedingung auch bei jedem Durchlauf.

Funktionale Methoden werden immer durchlaufen, ein Aufruf weiß nichts von einem anderen. Willst du das verhindern, musst du den Wert puffern und auslesen.
Gut das ist das was ich wissen wollte. Dass die Bedingung im WHILE immer geprüft wird, ist klar. Das ist ja der Sinn dahinter. Nun ist es halt so, dass das Programm in dem Moment bei jedem Schleifendurchlauf 2 Prüfungen macht ( zuerst die von COND und dann die von WHILE )

Die Frage ist halt, ob ABAP so klug ( oder dumm ... gibt solche und solche Anwendungsfälle .. ) und sich einen Wert puffert und den dann bei jedem WHILE durchlauf prüft.
Gut, dann sollte man wirklich immer eine temporäre variable machen, wenn eine etwas größere Logik verwendet werden würde..

Re: COND in Schleife

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
SaskuAc hat geschrieben:Gut, dann sollte man wirklich immer eine temporäre variable machen, wenn eine etwas größere Logik verwendet werden würde..
Ich glaube nicht, dass das die Prüfung schneller macht....


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: COND in Schleife

Beitrag von black_adept (Top Expert / 3943 / 105 / 886 ) »
SaskuAc hat geschrieben:Einer meiner Punkte ist das ab ABAP 7.40 eingeführte Statement "COND". Nun wüsste ich gerne, wie sich das in schleifen verhält.

Prüft das Statement in einer Schleife immer wieder von neuem die condition oder nur einmal und "speichert" diese dann?
Was mich bei dieser Frage am meisten verwundert ist, dass sie überhaupt gestellt wird.
Das ist doch ein Paradebeispiel dafür, dass man das mit 5 Zeilen Coding einfach selber austestet, wie sich das System verhält wenn man es nicht in der Doku findet.
Wahrscheinlich dauert das Erstellen eines Testprogramms weniger lange als das Posten hier und das Auswerten der Antworten.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: COND in Schleife

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Das hab ich mir jetzt extra verkniffen ;)


Ralf
Bild
Ralf Wenzel Heuristika SAP-Development
25 Jahre SAP-Entwickler • 20 Jahre Freiberufler
PublikationenUngarische NotationXing

Re: COND in Schleife

Beitrag von DeathAndPain (Top Expert / 1795 / 213 / 396 ) »
ralf.wenzel hat geschrieben:
SaskuAc hat geschrieben:Gut, dann sollte man wirklich immer eine temporäre variable machen, wenn eine etwas größere Logik verwendet werden würde..
Ich glaube nicht, dass das die Prüfung schneller macht....
Weil Du nicht verstanden hast, was er gemeint hat. Dabei ist es doch eigentlich offensichtlich, wenn man seinen ersten Beispielcode anschaut, wo er beide Fälle exemplarisch darstellt.

Definiert man eine Hilfsvariable und füllt diese mit dem Ergebnis der teuren Prüfung, bevor man die Schleife beginnt, so wird die teure Prüfung nur einmal ausgeführt. Stellt man die Prüfung in die WHILE-Bedingung, obgleich sich die Elemente der Prüfung (und mithin auch das Prüfergebnis) während der Schleifendurchläufe nicht verändern können, dann hat man die Performancekosten der teuren Prüfung bei jedem einzelnen Schleifendurchlauf.

Also wird die Prüfung mit der temporären Variable durchaus schneller.

Im übrigen ist die Verwendung von solch temporärer Variable aber schon deshalb geboten, weil es ein horrend schlechter Programmierstil wäre, in der Bedingung einer WHILE-Schleife eine Bedingung unterzubringen, die schleifenunabhängig ist und daher mit der beabsichtigten Endebedingung der WHILE-Schleife nichts zu tun hat. Damit führt man jeden, der den Code später verstehen will, auf's Glatteis. Die Bedingung eines WHILE-Befehls sollte genau die sein, bei deren Falschwerden die WHILE-Schleife verlassen werden soll. Damit muss sie zwangsläufig abhängig davon sein, was in der Schleife passiert, und damit ist eine temporäre Variable, die vor Schleifenbeginn berechnet wird, ohnehin keine Option dafür.

Seite 1 von 1

Vergleichbare Themen

2
Antw.
379
Views
COND #( WHEN x IS NOT INITIAL THEN y ) funktioniert nicht
von Romaniac » 22.05.2022 14:58 • Verfasst in ABAP® Core
0
Antw.
1212
Views
ABAP-interner Bug bei COND-Operator?
von DeathAndPain » 10.08.2018 19:16 • Verfasst in ABAP® für Anfänger
5
Antw.
3097
Views
Fehler in Schleife????
von Aggu » 12.05.2004 18:37 • Verfasst in ABAP® für Anfänger
2
Antw.
204
Views
Schleife, Gruppenverarbeitung
von Ingo » 08.07.2022 10:54 • Verfasst in ABAP® für Anfänger
4
Antw.
3942
Views
feldzuweisung in schleife
von simethandreas » 01.10.2009 14:25 • Verfasst in ABAP® für Anfänger

Über diesen Beitrag


Die Frage ist als "gelöst" markiert. Den entsprechend Beitrag findest du hier.

Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.