LOOP AT

Getting started ... Alles für einen gelungenen Start.
53 Beiträge • Vorherige Seite 2 von 4 (current) Nächste
53 Beiträge Vorherige Seite 2 von 4 (current) Nächste

Re: LOOP AT

Beitrag von 4byte (Specialist / 124 / 37 / 35 ) »
ralf.wenzel hat geschrieben: Das Feldsymbol bringt was - aber wohl eher bei großen Tabellen.
ich hab das mit dem Feldsymbolen wegen den Modifikationen erwähnt :D
ich hab es lieber, als ein Modify in einem Loop.

Grüße 4byte
Es gibt 10 Menschen die binär verstehen :)

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


Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
4byte hat geschrieben:ich hab das mit dem Feldsymbolen wegen den Modifikationen erwähnt :D
ich hab es lieber, als ein Modify in einem Loop.
Richtig, so geht es mir auch.

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

Re: LOOP AT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
Ich dagegen sehe lieber den ausdrücklichen MODIFY.
Der MOVE in irgendein Feldsymbol zeigt mir nicht sofort
an daß die Tabelle modifiziert wird - der MODIFY schon.
(Wir reden nicht von Hello-World-Programmen).

Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Daniel hat geschrieben:Ich dagegen sehe lieber den ausdrücklichen MODIFY.
Der MOVE in irgendein Feldsymbol zeigt mir nicht sofort
an daß die Tabelle modifiziert wird - der MODIFY schon.
(Wir reden nicht von Hello-World-Programmen).
Das Problem dabei ist: Ich schreibe in ein Feld, das ein Tabellenfeld ist (ja, ich weiß, eigentlich ist es in die Workarea kopiert und wird nur dort geändert - aber doch mit dem Ziel, es in der Tabelle zu ändern) und dann will ich es dort (in der Tabelle) auch sehen. Irgendwo anders steht dann ein MODIFY, von dem ich mir dann überlegen muss, was genau der alles verändert.

Zudem bin ich einer der ganz großen MODIFY-Vergesser (gerade im LOOP AT SCREEN, weil ich den MODIFY sonst nie verwende).


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

Re: LOOP AT

Beitrag von DeathAndPain (Top Expert / 1806 / 214 / 396 ) »
ralf.wenzel hat geschrieben:Nein, in einer Standardtabelle geht ein LOOP AT WHERE nicht schneller als ein LOOP AT, weil alle Sätze sequentiell durchlaufen werden
Ganz so ist es nicht, denn ohne WHERE braucht man immer noch zusätzliche Befehle (etwa einen CHECK-Befehl, der die unerwünschten Zeilen verwirft). Ein LOOP WHERE mag auf einer Standardtabelle auch sequentiell suchen, führt mit den unerwünschten Zeilen aber zumindest keine weiteren Befehle aus.
ralf.wenzel hat geschrieben:Das Problem dabei ist: Ich schreibe in ein Feld, das ein Tabellenfeld ist (ja, ich weiß, eigentlich ist es in die Workarea kopiert und wird nur dort geändert
Genau letzteres ist aber der Punkt: Du schreibst eben nicht in ein Tabellenfeld, sondern in irgendein anderes Feld. Daraufhin verändert sich automagisch der Tabelleninhalt. Das ist nicht transparent.

Anders sieht es aus, wenn Du einen expliziten Befehl (MODIFY) hast, der sagt, dass der Tabelleninhalt jetzt vermittelst dieses Drittfeldes geändert werden soll.

Dessen ungeachtet bin ich inzwischen auch zu Feldsymbolen übergegangen. Oft braucht man ja nur einen einzigen Loop über die Tabelle (jedenfalls in dem betreffenden Unterprogramm), und da ist die Inline-Deklaration ASSIGNING FIELD-SYMBOL(<tabellenname>) einfach wundervoll. Man bekommt eine Workarea, die performant ist und zugleich ohne den sperrigen WA_-Vorbau auf einen Blick als Workarea dieser Tabelle erkennbar ist. Eine Workarea, die sogar den gleichen Namen wie die Tabelle trägt. Die Feldsymbolwinkel nehme ich dabei als Workarea-Kennzeichner wahr (obwohl ich natürlich um ihre wahre Bedeutung weiß). Das ganze kommt der Lesbarkeit so sehr entgegen, dass ich auf den MODIFY da verzichten kann.
ralf.wenzel hat geschrieben:Zudem bin ich einer der ganz großen MODIFY-Vergesser (gerade im LOOP AT SCREEN, weil ich den MODIFY sonst nie verwende).
Na, dann liegt die Lösung doch auf der Hand: Gewöhn Dir auch sonst den MODIFY an, dann vergisst Du ihn im LOOP AT SCREEN auch nicht mehr. :-D

Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Ich muss dir leider widersprechen ;)

Wenn ich z. B. ein Feld ändern will in einer ITAB, dann mache ich einen LOOP mit dem Ziel, ein Tabellenfeld zu ändern. Dass das in eine WA kopiert wird und ich es erst da ändere, um es dann mit MODIFY in die Tabelle zu schreiben, ist in meiner Wahrnehmung einer Krücke.

Ich finde die Arbeit mit Feldsymbolen schon deshalb transparenter, weil ich dann eben genau das mache, was ich will: Ich ändere ein Feld in einer Tabelle. Ohne Krücken und Gedöns.

Zum LOOP AT SCREEN: Das ist eine ganze Weile her, dass ich den das letzte Mal benutzt habe. Konventionelle Dynpro-Programmierung hab ich schon lange nicht mehr gemacht. Solche Sachen liegen generisch in einer Unterklasse, von der alle Dynpros erben.


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

Re: LOOP AT

Beitrag von Daniel (Specialist / 314 / 68 / 44 ) »
ralf.wenzel hat geschrieben:Wenn ich z. B. ein Feld ändern will in einer ITAB,
dann verwende ich einen entsprechend parametrisierten MODIFY.
Der macht das ganz ohne einen überflüssigen LOOP.

Re: LOOP AT

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Das ist richtig, wenn man nichts anderes macht, als Daten zu ändern.

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

Re: LOOP AT

Beitrag von gtoXX (Specialist / 185 / 34 / 31 ) »
Daniel hat geschrieben:Ich dagegen sehe lieber den ausdrücklichen MODIFY.
Der MOVE in irgendein Feldsymbol zeigt mir nicht sofort
an daß die Tabelle modifiziert wird - der MODIFY schon.
(Wir reden nicht von Hello-World-Programmen).

Er zeigt es Dir nur nicht an, wenn Du das Wesen von Feldsymbolen nicht verstanden hast, sorry.

Ein Feldsymbol ist ein Pointer. Ein Modify ist immer xfach langsamer, da speicher hin und herkorpiert werden muss anstatt gleich auf den Speicherbereich zu schreiben.

Bei wirklich großen Tabellen, wäre dein Vorgehen mit Modify extrem sträflich und würde von mir nicht in ein P System gelagen.
"Code lügt nicht ^^"

Re: LOOP AT

Beitrag von gtoXX (Specialist / 185 / 34 / 31 ) »
DeathAndPain hat geschrieben:[
Genau letzteres ist aber der Punkt: Du schreibst eben nicht in ein Tabellenfeld, sondern in irgendein anderes Feld. Daraufhin verändert sich automagisch der Tabelleninhalt. Das ist nicht transparent.
Nicht irgendein anderes Feld. Du schreibst in exakt in der richtigen Adresse anstatt erst in einer anderen Tabelle nachzuschauen (Speicherverwaltung) , wohin deine Daten müssen.

Sorry, ich habe schon zuviel unperformantes Coding mit Workareas gesehen, nur weil die jenigen keine Lust hatten sich mal über die Unterschiede Gedanken zu machen.
"Code lügt nicht ^^"

Re: LOOP AT

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Und in wie vielen von diesen Fällen war das Umstellen von Workarea auf Feldsymbol mit einem deutlichen Performanceschub belohnt worden in der Gesamtlaufzeit eines Programms? Ich bin ja nicht grundsätzlich gegen performante Programmierung - aber das Feldsymbol als Heilige Kuh des Loops zu behandeln behagt mir halt auch nicht. Zumal ich gerade erst gelernt habe, dass es durchaus Situationen geben soll, wo ein Feldsymbol langsamer ist als eine Workarea.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP AT

Beitrag von 4byte (Specialist / 124 / 37 / 35 ) »
black_adept hat geschrieben: Zumal ich gerade erst gelernt habe, dass es durchaus Situationen geben soll, wo ein Feldsymbol langsamer ist als eine Workarea.
Kannst du solche Situationen benennen? Würde mich interessieren :) :)
Es gibt 10 Menschen die binär verstehen :)

Re: LOOP AT

Beitrag von black_adept (Top Expert / 3950 / 105 / 886 ) »
Genaue Situation habe ich mir nicht genauer erläutern lassen. Es ging darum, dass z.B. bei sehr schmalen Tabellen eine Workarea evtl. gut gecacht sein könnte ( L1-Cache des Prozessors ) und dass weiterhin in diesem Fall wohl durch prozessorseitiges Cache-Prefetching und Speculative Execution sich die Faustregel "FS>WA" hier umkehrt. Du siehst - wir sprechen hier schon von sehr besonderen Konstellationen.
Allerdings habe ich absichtlich den Konjunktiv verwendet, da ich ich aktuell keine Lust habe mir das genauer anzuschauen und zu verifizieren und andererseits in den Umfeldern, in denen ich entwickle, die Laufzeitoptimierungen auf ganz anderen Leveln gemacht werden. Und die Entscheidung "FS oder WA" ist in den allerseltensten Fällen das, was am Ende wirklich wichtig ist.

Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag (Insgesamt 2):
DeathAndPain4byte

live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: LOOP AT

Beitrag von DeathAndPain (Top Expert / 1806 / 214 / 396 ) »
gtoXX hat geschrieben:Er zeigt es Dir nur nicht an, wenn Du das Wesen von Feldsymbolen nicht verstanden hast, sorry.
Natürlich hat er es verstanden, genau wie ich auch. Aber es ist eben nicht so gut lesbar, wenn man mit einer Feldzuweisung irgendwo inmitten einer Tabelle ein Feld ändert, als wen nman die zu ändernde Zeile in einer (wie auch immer gearteten) Workarea vorbereitet und dann per MODIFY explizit sagt, jetzt ändere die Tabelle.
Ein Feldsymbol ist ein Pointer. Ein Modify ist immer xfach langsamer, da speicher hin und herkorpiert werden muss anstatt gleich auf den Speicherbereich zu schreiben.
Langsamer ja. "X-fach langsamer" würde ist gerne einen Nachweis sehen.
Bei wirklich großen Tabellen, wäre dein Vorgehen mit Modify extrem sträflich und würde von mir nicht in ein P System gelagen.
In älteren Releases (3.x) war das direkte Ändern von Tabellenzeilen über Feldsymbole meines Wissens gar nicht möglich. Die Sprache hat sich da weiterentwickelt und ist flexibler geworden. Aber zu behaupten, die ganzen alten Systeme seine alle von der Software her langsam und ineffizient gewesen, finde ich ziemlich anmaßend. black_adept hat es gut auf den Punkt gebracht: Zeige mir mal ein produktives Programm, bei dem eine Umstellung von MODIFY auf Feldsymbole überhaupt eine nicht nur messbare, sondern auch nennenswert wahrnehmbare Performanceverbesserung gebracht hätte (ohne dass das Programm schon vorher in anderer Hinsicht ineffizient programmiert gewesen wäre).

Re: LOOP AT

Beitrag von Somani (ForumUser / 81 / 12 / 20 ) »
black_adept hat geschrieben:[...] prozessorseitiges Cache-Prefetching und Speculative Execution [...]
Speculative Execution ist bei hochgepatchten OS in den allermeisten Fällen akutell ohnehin unterbunden... aber das ist ja wieder nochmal ein ganz anderes Thema :)

Vergleichbare Themen

1
Antw.
730
Views
4
Antw.
3463
Views
LOOP in einem LOOP
von Bjuti » 10.09.2013 15:18 • Verfasst in ABAP® für Anfänger
39
Antw.
7091
Views
Loop
von Kai999 » 27.07.2017 16:15 • Verfasst in ABAP® für Anfänger
34
Antw.
6353
Views
ein loop
von user2008 » 19.07.2017 10:50 • Verfasst in ABAP® für Anfänger
7
Antw.
2264
Views
Loop-Problem
von TobiB » 17.12.2007 13:15 • Verfasst in ABAP® Core

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.