X muss ja kein ganzzahliger Wert sein...DeathAndPain hat geschrieben:Langsamer ja. "X-fach langsamer" würde ist gerne einen Nachweis sehen.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.
Ich glaube wir hatten das Thema früher schon mal. Ich stimme dir zu, dass es für ein einzelnes Programm in den meisten Fällen kaum spürbare Gewinne zu verzeichnen gibt. Habe gerade nochmal einen kleinen Test gemacht: eine ITAB mit 700.000 Zeilen - Struktur MARA. In unserem Testsystem benötigt der Modify ca. 0,6 Sekunden länger. Sollte das Programm nur ein paar mal am Tag laufen, dann interessiert das wohl kaum jemanden. Aber wenn es 1.000 mal und mehr am Tag laufen würde, dann wären es mindestens 600 teure Rechnersekunden inklusive unnötigem Energieverbrauch.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.
Wenn ein Programm, das 700.000 Zeilen einer internen Tabelle modifiziert, 1.000 mal und mehr am Tag laufen würde, dann würde ich als erstes die Frage stellen, was da abgeht. Wenn das wirklich so ein Riesenkonzern ist, dass sowas gerechtfertigt ist, dann wird man auch in ganz anderer Größenordnung Hardwareleistung haben als Dein "Testsystem". Und dann reden wir am Ende doch nur wieder von ein paar Sekunden, über die man nicht reden muss.Habe gerade nochmal einen kleinen Test gemacht: eine ITAB mit 700.000 Zeilen - Struktur MARA. In unserem Testsystem benötigt der Modify ca. 0,6 Sekunden länger. Sollte das Programm nur ein paar mal am Tag laufen, dann interessiert das wohl kaum jemanden. Aber wenn es 1.000 mal und mehr am Tag laufen würde, dann wären es mindestens 600 teure Rechnersekunden inklusive unnötigem Energieverbrauch.
Ich finde es nach wie vor intuitiver - aber das liegt im Auge des Betrachters. Subjektiv wichtiger finde ich, dass es bei einem fehlgeschlagenen READ schön dumpt. Eine Feldleiste ist einfach leer, ein Feldsymbol zeigt ins Leere!DeathAndPain hat geschrieben:Aber ich stelle mich nicht hin und behaupte, dass das beim Lesen des Programms besser nachzuvollziehen sei als ein expliziter MODIFY.
Das ausgerechnet aus Deinem Mund?!? Es ist die Pflicht jedes sauberen ABAP-Programmierers, sich von der korrekten Zuweisung eines Feldsymbols zu überzeugen, bevor er es verwendet und es eben nicht einfach dumpen zu lassen! READ TABLE dumpt nicht, ASSIGN dumpt auch nicht (noch nicht mal in Verbindung mit 7.40-Syntax). In beiden Fällen sollte man hinterher tunlichst den SY-SUBRC prüfen. Von daher kein Unterschied.Subjektiv wichtiger finde ich, dass es bei einem fehlgeschlagenen READ schön dumpt. Eine Feldleiste ist einfach leer, ein Feldsymbol zeigt ins Leere!
Und du machst auch nie was falsch und vergisst auch nie was, das hatte ich vergessen. NATÜRLICH hat das Programm einen Fehler, wenn es dumpt, DARUM will ich, dass es dumpt, wenn ein so kapitaler Fehler drin ist! *kopfschüttel*DeathAndPain hat geschrieben:Das ausgerechnet aus Deinem Mund?!? Es ist die Pflicht jedes sauberen ABAP-Programmierers, sich von der korrekten Zuweisung eines Feldsymbols zu überzeugen, bevor er es verwendet und es eben nicht einfach dumpen zu lassen!Subjektiv wichtiger finde ich, dass es bei einem fehlgeschlagenen READ schön dumpt. Eine Feldleiste ist einfach leer, ein Feldsymbol zeigt ins Leere!
Das hat niemand behauptet. Kein Grund, so abfällig persönlich zu werden.ralf.wenzel hat geschrieben:Und du machst auch nie was falsch und vergisst auch nie was, das hatte ich vergessen.
Ein Dump, der aufgrund eines nicht zugewiesenen Feldsymbols erfolgt, ist ein Anfängerfehler. Das sehe ich genauso wie TodUndSchmerz.ralf.wenzel hat geschrieben:NATÜRLICH hat das Programm einen Fehler, wenn es dumpt, DARUM will ich, dass es dumpt, wenn ein so kapitaler Fehler drin ist! *kopfschüttel*
Ralf
Code: Alles auswählen.
IF sy-subrc <> 0.
MESSAE A...
ENDIF.
Ein Flüchtigkeitsfehler. Ich habe schon Leute mit 25 Jahren Berufserfahrung gesehen, die in einer Anwendung 50 READs haben und das bei einem von ihnen vergessen haben.ewx hat geschrieben:Ein Dump, der aufgrund eines nicht zugewiesenen Feldsymbols erfolgt, ist ein Anfängerfehler. Das sehe ich genauso wie TodUndSchmerz.
Für mich ist das wie ein Gurtwarner. Der warnt mich auch, ob ich den Gurt angelegt habe, obwohl ich WEISS, dass ich ohne Gurt nicht fahren darf. Aber ob du es glaubst oder nicht, ich hab es echt schon vergessen, ihn anzulegen.ewx hat geschrieben:In jedem Fall weiß ich vorher: Entweder, es ist egal, ob der READ was gefunden hat oder nicht oder ich stoppe die Programmausführung kontrolliert.
Natürlich passiert das. Gerade, wenn man sich vielleicht sicher ist, wie die Daten aussehen.ralf.wenzel hat geschrieben: Ein Flüchtigkeitsfehler. Ich habe schon Leute mit 25 Jahren Berufserfahrung gesehen, die in einer Anwendung 50 READs haben und das bei einem von ihnen vergessen haben.
Die Analogie mit dem Gurt würde ich eher so interpretieren: Wenn du den Gurt nicht angelegt hast und die Feldleiste leer ist, dann fährst du vielleicht unangeschnallt in die falsche Richtung. Aber wenn das Feldsymbol nicht zugewiesen ist, macht das Auto eine Vollbremsung.ralf.wenzel hat geschrieben:Für mich ist das wie ein Gurtwarner. Der warnt mich auch, ob ich den Gurt angelegt habe, obwohl ich WEISS, dass ich ohne Gurt nicht fahren darf. Aber ob du es glaubst oder nicht, ich hab es echt schon vergessen, ihn anzulegen.
Und dann ist es mir lieber, das Auto fährt gar nicht erst los.....
...solltest du hoffen, dass die Polizei dich dabei nicht sieht. Ich kenne wirklich Leute, die dafür schon eine Strafe bezahlt haben. Dann lieber Gurtwarner....DeathAndPain hat geschrieben:Wenn ich aber aus irgendeinem Grund nur mal rasch umparken und dafür 50 m weiter fahren möchte
Ich wusste gar nicht, dass robuste Programmierung so einfach sein kann...DeathAndPain hat geschrieben:WHENEVER ERROR CONTINUE