Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Romaniac
Code: Alles auswählen.
REPORT.
DATA: testvariable1 TYPE sydatum,
testvariable2 TYPE sydatum.
PERFORM test CHANGING testvariable1 testvariable2.
WRITE:/ testvariable1, testvariable2.
FORM test CHANGING cv_datum1 TYPE sydatum cv_datum2 TYPE sydatum.
DATA: testvariablel TYPE sydatum,
testvariable2 TYPE sydatum.
testvariablel = sy-datum + 10.
testvariable2 = sy-datum + 20.
cv_datum1 = testvariable1.
cv_datum2 = testvariable2.
ENDFORM. "test
Folgende Benutzer bedankten sich beim Autor Daniel für den Beitrag (Insgesamt 2):
SaskuAc • DeathAndPain
Das ist eben eine schwäche die ABAP hat. aber mit guten OO funktioniert das zum Beispiel recht gut:black_adept hat geschrieben: ↑08.05.2019 09:23Was ist eigentlich die beste Alternative um dann Verschattungen von Variablen möglichst zu verhindern? Das hatte bei Verwendung der HN durch den 1. Buchstaben eigentlich recht gut geklappt und der Syntaxcheck würde bei Präfixen das folgende Beispiel nicht durchgehen lassen.
Beispiel: Was kommt als Ausgabe beim folgenden Programm raus?
Code: Alles auswählen.
CLASS lcl_test DEFINITION.
PUBLIC SECTION.
METHODS: abc IMPORTING test TYPE i.
METHODS: adc RETURNING VALUE(test) TYPE i.
PRIVATE SECTION.
DATA test TYPE i.
ENDCLASS.
CLASS lcl_test IMPLEMENTATION.
METHOD abc.
me->test = test.
ENDMETHOD.
METHOD adc.
test = me->test.
ENDMETHOD.
ENDCLASS.
START-OF-SELECTION.
DATA(bruuuh) = NEW lcl_test( ).
bruuuh->abc( 4 ).
WRITE bruuuh->adc( ).
Das muss ja nicht immer böse Absicht sein...
@Daniel: Wenn du in einem fremden Programm weiterentwickeln musst - kennst du alle globalen Variablennamen und kannst du sicherstellen, dass dir nie ein Buchstabendreher unterläuft?
die durch konsequentes Handhaben von Präfixen behoben wird.
Und wenn man die Deklaration von statisch auf Instanz oder umgekehrt ändert ( was am Anfang einer Entwicklung durchaus von Zeit zu Zeit vorkommt ) müsste ich alle Aufrufstellen korrigieren. Versteh mich nicht falsch - es gibt gute Gründe genau so zu verfahren wie du - aber es gibt eben auch gute Gründe warum man eine saubere Präfixierung durchziehen möchte um diverse (andere) Probleme einfach zu umgehen
Das Problem im Beispiel ist nicht der 2 mal vergebene Variablenname ( in diesem Fall ist die Verschattung ja gewollt ) sondern der Buchstabendreher, der die Verschattung umgeht. Wenn es sich da um ein größeres Codekonglomerat handelt ist der Fehler schwer und spät (erst zur Laufzeit) zu finden. Obwohl alle nach bestem Wissen gehandelt haben kann hier ein Fehler auftauchen, der durch Präfixe und entsprechende SCI-Prüfungen im Vorfeld gefunden worden wäre.
@Daniel ACK. Aber du musst es finden bevor du es aufräumen kannst. Und da Namenskonventionen helfen solche (zugegeben recht seltenen aber doch von Zeit zu Zeit vorkommende ) Fehler automatisiert zu finden kann ich eben diese Präfixabneigung nicht teilen. Und das "this" des Zitats was du oben gepostet hast bezieht sich wahrscheinlich auf solche Präfixe die die Typisierung betreffen und nicht den Gültigkeitsbereich.
Code: Alles auswählen.
REPORT.
DATA: g_testvariable1 TYPE sydatum,
g_testvariable2 TYPE sydatum.
PERFORM test CHANGING g_testvariable1 g_testvariable2.
WRITE:/ g_testvariable1, g_testvariable2.
FORM test CHANGING cv_datum1 TYPE sydatum cv_datum2 TYPE sydatum.
DATA: l_testvariable1 TYPE sydatum,
l_testvariable2 TYPE sydatum.
g_testvariable1 = sy-datum + 10.
l_testvariable2 = sy-datum + 20.
cv_datum1 = l_testvariable1.
cv_datum2 = l_testvariable2.
ENDFORM. "test