Verständnisfrage LOOP AT (method)

Die Objektorientierung mit ABAP®: Vererbung, Dynamische Programmierung, GUI Controls (u.a. ALV im OO).
12 Beiträge • Seite 1 von 1
12 Beiträge Seite 1 von 1

Verständnisfrage LOOP AT (method)

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Moin,

gegeben sei eine Methode baue_itab( ), die eine gefüllte interne Tabelle zurückgibt.

Jetzt habe ich zwei Möglichkeiten, diese aufzurufen und durch sie zu loopen:

Code: Alles auswählen.

LOOP AT baue_itab( ) ASSIGNING ...

ENDLOOP.
oder

Code: Alles auswählen.

itab = baue_itab( ).
LOOP AT itab ASSIGNING ...

ENDLOOP.
Der Logik nach wird bei jedem Schleifendurchlauf baue_itab( ) neu durchlaufen und die itab erneut erzeugt. Performancetechnisch wäre das natürlich der Worst Case. Dann müsste aber der Debugger auch jedesmal in diese Methode reingehen, was er aber nicht tut.

Wer verrät mir, was ABAP wirklich macht?

Gruß

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

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


Re: Verständnisfrage LOOP AT (method)

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
Moin Ralf,

du scheinst dem Trugschluss zu unterliegen, dass baue_itab in deinem 1. Beispiel bei jedem Schleifendurchlauf neu durchlaufen wird.
Dem ist nicht so und das kannst du ganz einfach dadurch überprüfen, dass du entweder einfach einen Breakpoint in die Methode baue_itab setzt oder bei jedem Aufruf eine Zeile mehr zurückgibst als beim vorherigen.
Oder du rufst folgendes Testprogramm auf und erkennst was passiert.

Code: Alles auswählen.

REPORT.

DATA: counter TYPE i.

CLASS test DEFINITION.
  PUBLIC SECTION.
    TYPES: tt_data TYPE STANDARD TABLE OF t000 WITH NON-UNIQUE DEFAULT KEY.
    class-METHODS: baue_itab RETURNING VALUE(rt_data) TYPE tt_data.
ENDCLASS.


CLASS test IMPLEMENTATION.
  METHOD baue_itab.
    counter += 1.
    DO counter TIMES.
      APPEND INITIAL LINE TO rt_data.
    ENDDO.
  ENDMETHOD.
ENDCLASS.

END-OF-SELECTION.
  LOOP AT test=>baue_itab( ) ASSIGNING FIELD-SYMBOL(<ls_data>).
    WRITE sy-tabix.
  ENDLOOP.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Verständnisfrage LOOP AT (method)

Beitrag von a-dead-trousers (Top Expert / 4286 / 214 / 1142 ) »
Bei einem normalen LOOP wird die Tabelle ja auch nicht ständig neu aufgebaut, warum glaubst du dass dann deine Methode mehrmals aufgerufen werden würde?
Zudem legt das RETURNING intern bereits eine "Kopie" deiner Datentabelle an, weil es ja immer per Value zurückgeliefert wird. Somit hat man gar keine Verbindung mehr mit der Methode beim Ausführen der Anweisungen in der Schleife.

Im Kernel wird das dann zwar noch etwas optimiert, damit bei "teuren" Operationen keine "echte" Kopie erfolgt solange das nicht unbedingt notwendig ist ... aber das ist eine andere Geschichte. 😉
Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: Verständnisfrage LOOP AT (method)

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Das Programm erzeugt eine Zeile in der itab und beim LOOP wird das natürlich nur einmal durchlaufen ;) Die Mutmaßung, dass ich dem Irrtum unterliege, ist falsch - ich wusste es schlichtweg nicht. Meine Vermutung war, dass das nicht passiert, weil ein BP in der Methode nur einmal angesprungen wird. Insofern brauchte ich kein Testprogramm, weil ich eben wusste, dass ein BP in der Methode nicht bei jedem Schleifendurchlauf zieht.

Die Erklärung von d-a-t war genau das, was ich hören wollte. Die Erklärung "eine itab wird beim LOOP auch nicht ständig neu aufgebaut" ist richtig, aber da ist das eine statische Variable und nicht die Konstruktionsmethode für selbige ;)

Ich wollte nur sichergehen, dass meine Vermutung richtig ist. Das ist der Fall, danke.


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

Re: Verständnisfrage LOOP AT (method)

Beitrag von JHM (Top Expert / 1189 / 1 / 196 ) »
ralf.wenzel hat geschrieben:
02.02.2022 20:20
Ich wollte nur sichergehen, dass meine Vermutung richtig ist.
Wirst du also zukünftig die erste Version des Codings verwenden und "über die Methode loopen" oder eher das zweite Codingbeispiel verwenden, welches ja im Prinzip das gleich macht, nur das die Kopie der itab nachdem Loop noch als expliziete Kopie per Variable zur Verfügung steht?

Ich darf mich gerade durch die OO-Konstrukte einer externen Entwicklung kämpfen und stolpere immer wieder über genau solche Codingstrecken, die dem ungeübten OOler zusätzliche Steine in den Weg legen. Es gibt vieles im OO Kontext welches zwar möglich ist, ich aber im Sinne von Lesbar-/Wartbarkeit (=Debbugbarkeit) nicht wirklich unterstüzen würde...vielleicht liegt es aber auch den Entwicklern selbst, wie man Dinge im OO Kontext löst.
Gruß Hendrik

Re: Verständnisfrage LOOP AT (method)

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Über die Methode loopen. Ich vermeide gern "Hilfsvariablen", die keinen wirklichen Zweck haben.


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

Re: Verständnisfrage LOOP AT (method)

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
JHM hat geschrieben:
08.02.2022 14:37
Ich darf mich gerade durch die OO-Konstrukte einer externen Entwicklung
Das LOOP AT Methodenrückgabe hat aber nichts mit OO tun sondern mit der „funktionalen Schreibweise“ von Methoden. Funktionen gibt es schon viel länger als Objektorientierung und eine Schleife über Rückgabewerte einer solchen auch. Es ist in ABAP nur so, dass quasi erst mit Einführung von OO die Schreibweise und somit auch der Loop At Returningparameter möglich wurde.
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Verständnisfrage LOOP AT (method)

Beitrag von black_adept (Top Expert / 3947 / 105 / 886 ) »
ralf.wenzel hat geschrieben:
08.02.2022 14:46
Über die Methode loopen. Ich vermeide gern "Hilfsvariablen", die keinen wirklichen Zweck haben.
Angenommen der Schleifeninhalt sei nicht trivial. Beim Debuggen könnte möglicherweise Kenntnis über die Basis der Schleife hilfreich sein. Wäre das ein Grund für dich der Hilfsvariablen einen Zweck zuzugestehen? (Ich selber würde Loop at Returningparameter verwenden. Debugging verhätschelt den Programmierer, mir gefällt die Schreibweise und ich bin halt nicht nett )
live long and prosper
Stefan Schmöcker

email: stefan@schmoecker.de

Re: Verständnisfrage LOOP AT (method)

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Dann debugge ich in die Methode, die die itab bereitstellt, wenn ich das wissen will.

Außerdem kann man sich den Inhalt der itab ja auch im Debugger ansehen.

Nett bin ich auch nicht ;)

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

Re: Verständnisfrage LOOP AT (method)

Beitrag von qyurryus (Specialist / 107 / 81 / 45 ) »
ralf.wenzel hat geschrieben:
09.02.2022 08:42
...
Außerdem kann man sich den Inhalt der itab ja auch im Debugger ansehen.
...
Ralf
Und wie genau ginge das? Unter den Locals gibt es nichts, hat ja auch keine zugewiesene Referenz...

Re: Verständnisfrage LOOP AT (method)

Beitrag von ralf.wenzel (Top Expert / 3776 / 176 / 262 ) »
Unter "Auto".


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

Re: Verständnisfrage LOOP AT (method)

Beitrag von qyurryus (Specialist / 107 / 81 / 45 ) »
Ah, mit dem Tab habe ich mich ehrlich gesagt noch gar nicht beschäftigt. Komischerweise taucht bei mir da nie etwas auf, auch wenn ich mehrere methoden chaine...

Seite 1 von 1

Vergleichbare Themen

1
Antw.
730
Views
2
Antw.
1833
Views
Verständnisfrage: BSP <-> MVC
von netZwerg » 14.07.2004 14:59 • Verfasst in Web-Dynpro, BSP + BHTML
2
Antw.
1803
Views
Verständnisfrage zu BAPIs und RFC
von larsi » 22.10.2005 19:25 • Verfasst in ABAP® für Anfänger
0
Antw.
504
Views
Verständnisfrage: Anwendungsklasse
von Dyrdek » 14.07.2014 11:53 • Verfasst in ABAP® für Anfänger
6
Antw.
2412
Views
Verständnisfrage zu Coding
von Mark33 » 23.02.2012 15:22 • Verfasst in ABAP® für Anfänger

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.