Es ist leider nicht immer nur die Faulheit.ralf.wenzel hat geschrieben: ↑30.06.2020 21:01Dass Attribute etwas anderes sind als Variablen, doziere ich seit Jahr und Tag. Ich frage mich nur: Warum gibt es analog zum Pretty Printer keine Funktion, die zu jedem Attribut eine SET- und eine GET-Methode erzeugt? Warum muss ich sowas selbst schreiben (also eben diesen Generator)? Dann würde die Faulheit "ach, mach ich's halt public" nicht ständig siegen. Auf der anderen Seite muss man diese Entwickler auch fragen, ob sie so einen Murks in anderen Bereichen ihres Lebens dulden würden, wenn sie mit ihm konfrontiert würden.
In aller Regel ist es reine Faulheit, soweit ich das beobachten konnte.
Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
ralf.wenzel
https://help.sap.com/doc/saphelp_nw75/7 ... cache=trueralf.wenzel hat geschrieben: ↑30.06.2020 21:01Ich frage mich nur: Warum gibt es analog zum Pretty Printer keine Funktion, die zu jedem Attribut eine SET- und eine GET-Methode erzeugt? Warum muss ich sowas selbst schreiben (also eben diesen Generator)?
Folgende Benutzer bedankten sich beim Autor ralf.wenzel für den Beitrag:
Romaniac
Nein, es kommt darauf an, was du machen willst. Wenn du wirklich die führenden Nullen löschen willst, dann via SHIFT. Wenn du aber für die Ausgabe auf dem Bildschirm die Daten von der DB für den User anpassen willst z.B. führenden Nullen entfernen, dann via ALPA-Konvertierung. Die ALPHA-Konvertierung ist dabei eine Blackbox. Insbesondere bei PSP-Nummer sollte man nicht einfach führende Nullen löschen, nur weils dann schöner aussieht.DeathAndPain hat geschrieben: ↑30.06.2020 19:43Ihr habt recht; ich war hier schon etwas sarkastisch. Wobei ich speziell in diesem Fall durchaus der Meinung bin, dass der SHIFT-Befehl nicht nur die schnellste, sondern zugleich auch für den Leser verständlichste Variante ist. Ich jedenfalls würde den SHIFT sofort verstehen, beiaber erst mal grübeln und nachlesen müssen, was diese Syntax mir genau sagen möchte. Und wenn ich sie verstanden hätte, müsste ich mir auch noch ins Gedächtnis rufen, was der Alpha-Konvertierungsexit genau tut.Code: Alles auswählen.
i_field = |{ i_field ALPHA = OUT }|.
Deswegen meinte ich "fast". Hier im Forum hast Du eine sehr hohe Dichte solcher Leute, denn die, die hier seit Jahren rumlaufen, zeigen doch schon dadurch, dass sie der Theorie guten Codes ein hohes Interesse entgegenbringen. Lass es insgesamt gefühlt 10 Leute sein, die hier 95% der hochwertigen Antworten schreiben. Geografisch verteilen die sich über ganz Deutschland. Die Entwickler, die Du in Masse draußen in freier Wildbahn antriffst, sind ein deutlich kleineres Kaliber. Das scheint ja bis in die Akademien reinzureichen. Du brauchst Dir nur anzuschauen, was die ABAP-Neueinsteiger, die hier Fragen stellen, für Beispielcode bieten, dann erkennst Du schon, dass selbst diejenigen, die sie unterrichten, offenkundig veraltetes ABAP vermitteln. Und zwar in praktisch allen Fällen, die mir hier untergekommen sind, nicht nur in Fällen, bei denen sich jemand selber was angelesen hat. Gerade bei der Neuausbildung von ABAP-Entwicklern sollte man doch annehmen, dass nur noch 7.40-Syntax unterrichtet wird (das andere kann man hinterherschieben, damit die Leute älteren Code auch lesen können, aber was man zuerst lernt, gewöhnt man sich an, daher wäre die Reihenfolge wichtig). Aber kannste offenbar vergessen.Ralf hat geschrieben:Danke für die Blumen. Aber ich möchte dir in einigen Punkten widersprechen: Gerade hier laufen einige Leute herum, die eine enorme Klasse haben. Und jeder ist auf seinem Gebiet irgendwo herausragend. Ich nenne jetzt extra keine Namen, aber die Regulars, die ich meine, fühlen sich sicher angesprochen.
Wenn ich eine derartige Anwendung bei fremdem Code sehen würde, würde ich sofort den Mund halten. Aber wie ich schon sagte: Du machst sowas. Die Masse nicht. Aber auch die Masse arbeitet trotzdem mit Instanzmethoden, die dadurch reiner Wasserkopf sind.Ralf hat geschrieben:Ein Singleton hat durchaus seine Berechtigung, sonst gäbe es kein Singleton-Pattern. Eine statische Methode kann ich in der Ableitung zum Beispiel nicht redefinieren, was einen großen Teil meiner Entwicklungen deutlich erschweren würde.
Nach meiner Überzeugung reicht das nicht. Private Methoden sieht man schon öfter mal, aber auch dort sind die Attribute von ihrer Anwendung her nichts anderes als klassenglobale Variablen. Wer an der Klasse was machen muss, der muss an diesen Code ran, und dem nützt es gar nichts, dass das private ist, denn innerhalb der Klasse sind auch private-Attribute überall frei zugänglich, und Klassen können sehr groß sein.Ralf hat geschrieben:Dass Attribute etwas anderes sind als Variablen, doziere ich seit Jahr und Tag. Ich frage mich nur: Warum gibt es analog zum Pretty Printer keine Funktion, die zu jedem Attribut eine SET- und eine GET-Methode erzeugt? Warum muss ich sowas selbst schreiben (also eben diesen Generator)? Dann würde die Faulheit "ach, mach ich's halt public" nicht ständig siegen.
Ich schlage mich hier mit Code eines Exkollegen herum, der war Idealist. Nur offenbar hat er die entsprechenden Schnittstellenkonzepte nicht wirklich verstanden. Was der auf der einen Seite an Wasserkopfkapselungen gebaut hat, die mit Sicherheit eine Menge Arbeit gemacht haben, auf der anderen Seite aber an parameter- und kommentarlosen Methoden verwendet, die er liebevoll in separaten Googledocs außerhalb des SAP-Systems dokumentiert und die sich aus in Attributen abgelegten Werten speisen, das geht auf keine Kuhhaut. (In diesen Googledocs stehen die Konzepte drin und was die Klassen usw. machen bzw. machen sollen. Den unkommentierten Code, der das umsetzen soll, versteht man dadurch natürlich trotzdem nicht, denn die Idee ist eine Sache, die Umsetzung eine andere. Deswegen bin ich ein starker Verfechter davon, direkt im Code reichlich Kommentar einzubauen, der Schritt für Schritt erklärt, was ich da mache, mit welchen Gedanken und welchem Ziel. Das tue ich schon mir selbst zuliebe, damit ich nach einem Vierteljahr meinen eigenen Code noch verstehe. Dafür bin ich mit der externen Dokumentation deutlich träger.)In aller Regel ist es reine Faulheit, soweit ich das beobachten konnte.
Während ich Dir durchaus zustimme, dass mehr Flexibilität bei SELECTs durchaus wünschenswert wäre, bin ich nicht sicher, ob das ein gutes Beispiel ist. Ein Attribut per funktionaler Methode direkt im SELECT zu beschaffen, hmmm... ich persönlich denke, dass einem kein Zacken aus der Krone bricht, wenn man für die Attribute, die man in einem Codeabschnitt braucht, dort ein lokales Feld deklariert und sie dorthinein importiert.a-dead-trousers hat geschrieben:Es ist leider nicht immer nur die Faulheit.
Viele ABAP-Befehle verstehen bis heute noch nicht mit einem Methodenaufruf umzugehen. Ein konkretes Beispiel ist die zwingende Verwendung von Variablen im SELECT-Befehl. "WHERE x = lr_object->get_filter_x( )" geht da nicht.
Code: Alles auswählen.
DATA(attrib_x) = lr_object->get_filter_x( ).
SELECT bla WHERE x = attrib_x
Dem kann ich nur zustimmen.ralf.wenzel hat geschrieben: ↑06.07.2020 23:44Mit statischen Klassen arbeite ich praktisch gar nicht mehr. Die sind mir zu unflexibel.