Mit Verlaub, aber das ist falsch. Für Klassen gibt es zwei Sichtbarkeitsbereiche: Global (im ganzen System verfügbar) und lokal (in einem Teilbereich des Systems verfügbar). Außer globalen und lokalen Klassen gibt es keine Klassen.black_adept hat geschrieben:Ob eine Variable lokal/global ist ist kontextabhängig
Ich betrachte eine Variable tatsächlich kontextabhängig. Und zwar immer auf das Coding bezogen welches ich gerade am Wickel habe. Es wird argumentiert, dass Klassendefinitionen ( systemglobal, Programmglobal ) anders sind als Variablendefinitionen und dass diese sich gleich verhalten sollten. Da hat er ja nicht unrecht - aber für Klassen gibt es eben genau diese zwei Sichtbarkeitsbereiche wohingegen es für Variablen auch zwei Sichtbarkeitsbereiche gibt, die sich aber einfach anders verhalten.
Ich habe großen Respekt vor dir und deinen Kenntnissen, aber jetzt schreibst du Amok: Gerade im OO ist eine Klasse nichts anderes als ein komplexer Datentyp. Darauf beruht das ganze objektorientierte Konzept. In meinen Augen gibt es keine Begründung dafür, dass der eine komplexe Datentyp (nehmen wir eine Tabelle) anders behandelt werden sollte als der andere komplexe Datentyp (eine Klasse).black_adept hat geschrieben:Ich habe kein Problem damit dass sich Klassen anders im Namen verhalten als Variablen - es sind halt völlig andere Objekte.
Ich könnte dir zig Anwendungen dafür nennen, wo sowas sinnvoll und absolut nachvollziehbar ist. So weit will ich aber nicht gehen. Das Konzept der Verschattung ist ein gewollter Effekt, den ich auch nutzen können will.black_adept hat geschrieben:ich finde Verschattung eher problematisch und sehe es dementsprechend nachteilig, wenn ich eine globale Variable durch eine lokale verschattet wird und da kommt mir eine Trennung von lokal/global nur zu recht, da hierdurch eine Verschattung durch die Namenswahl implizit vermieden wird.
Oder wenn man die Verwendung globaler Variablen grundsätzlich verbietet, wie die SAP das tut. Versuche mal in einer Klasse eine globale Variable zu definieren.black_adept hat geschrieben:Dieses Argument zieht nur, wenn man eine Richtilinie hat, die besagt, dass alle globalen Variablen gekennzeichnet werden müssen. Aber dann geht man ja schon von einer bedingten Namensgebung aus, die ja angeblich vermieden werden sollte.
Und die, die den Quatsch dann tippen müssenblack_adept hat geschrieben:Warum soll man sich entscheiden ob man Sinn- oder Typ- oder Sichtbarkeits oder sonst irgend welche Informationen in den Variablennamen wirft. In meinen Augen ist ein "lt_ekko_offene_bestellungen" aussagekräftiger als ein "offene_bestellungen" oder ein "lt_ekko". Die Verfechter fast jeder Namenskonvention können sich hier wiederfinden - lediglich die Lesbarkeitsverfechter werden das nicht so toll finden.
...werfe ich dich aus meinem Projektteamblack_adept hat geschrieben:Aber wenn ich eine Variable habe, die ich mit Bezug auf eine andere Variable definiert habe, welche wieder mit Bezug auf eine weitere definiert wurde etc,
Zwei: Einen auf den Methodennamen und einen auf die Deklaration in der Signatur, die mir oben angezeigt wird.black_adept hat geschrieben:Beispiel: Rückgabeparameter der Methode CL_ABAP_STRUCTDESCR->GET_COMPONENTS. Das dauert ein paar Klicks bis man das gefunden hat.
Du musst schauen, ob die Variable global oder lokal definiert ist? Dann solltest du nicht mit globalen Feldern arbeiten - das verbietet die SAP nicht ohne Grund, wo sie es kannblack_adept hat geschrieben:Und gerade was die Sichtbarkeit angeht. Wenn ich ein Programm bearbeite muss ich immer wieder schauen, wie eine Variable definiert ist (lokal oder global).
Nein, der Debugger zeigt die Deklaration per Mouseover an. Da musst du *noch* *nichtmal* klicken.black_adept hat geschrieben:Natürlich könnte ich jetzt jedes mal doppelklick drauf machen um zur Aufrufstelle zu navigieren - aber wenn ich auf einen Blick sehe, dass es sich hier um eine lokale Variable handelt spart mir das wieder Arbeit bzw. beim Debuggen ( wo ich den Doppelklick nicht machen kann )
Nein, das ist nicht richtig. Wenn du ein Feld im Typ veränderst, das global einen anderen Namen hat als lokal, stehst du dann vor dem Problem, dass Suchen/Ersetzen nicht mehr geht. Insbesondere: Wenn ich eine FORM Routine habe, die von mehreren Stellen aufgerufen wird, ist der Name in der Formroutine meist allgemeiner als außerhalb.black_adept hat geschrieben:Denn global kann man mit "Suchen/Ersetzen" alles austgauschen und "lokal" muss man nur den Bereich markieren und macht das dann im Editor.
Einer von uns beiden muss zum Deutschkurs: eine semantische Benamung beschreibt den Sinn, den Inhalt. Semantik ist die Bedeutungslehre. Wenn du schreibst "Befürworter von mäßiger semantischer Benamung" und "wobei der Sinn....auch im Namen auftauchen sollte", drückst du dich doppelt aus (weil beides semantisch ist). Sichtbarkeit und Typ sind keine semantischen Attribute, sondern technische.black_adept hat geschrieben:Fazit: Ich bin großer Befürworter von mäßiger (semantischer) Benamung von Variablen was Sichtbarkeit und Typ angeht, wobei der Sinn einer Variablen explizit auch im Namen auftauchen sollte.
Code: Alles auswählen.
LOOP AT itab ASSIGNING <itab_line>
Code: Alles auswählen.
LOOP AT itab ASSIGNING FIELD-SYMBOL(<itab_line>)
Code: Alles auswählen.
FIELD-SYMBOL: <itab> type line of itab.
LOOP AT itab ASSIGNING <itab_line>
Da ich Variablen bisher nur in Programmobjekten benötigt habe, können Variablen ( anders als Daten ) auch nur die zwei Zustände annehmen. Und wenn das Programmobjekt der Bezugspunkt ist, gibt es für diesen Bezugspunkt eben nur noch die zwei Unterscheidungen global und lokal.Ralf hat geschrieben:Bei Datenobjekten ist das anders: Es gibt globale Daten (die auf der Datenbank, also im ganzen System verfügbar), es gibt programmlokale Variablen und prozedurlokale Daten.
Wieder eine Frage des Bezugspunkts. Wenn ich das SAP-System als Bezugspunkt nehme gibt es keine Variablen, aber (Datenbank)Tabellen, andere DDIC-Beschreibungen und Programmobjekte. Diese dürfen innerhalb des SAP-Systems einer gewissen Konvention unterliegen.Ralf hat geschrieben:Gerade im OO ist eine Klasse nichts anderes als ein komplexer Datentyp. Darauf beruht das ganze objektorientierte Konzept. In meinen Augen gibt es keine Begründung dafür, dass der eine komplexe Datentyp (nehmen wir eine Tabelle) anders behandelt werden sollte als der andere komplexe Datentyp (eine Klasse).ich hat geschrieben:Ich habe kein Problem damit dass sich Klassen anders im Namen verhalten als Variablen - es sind halt völlig andere Objekte.
Cool - ein einziges sinnvolles Beispiel würde mich da schon interessieren.Ralf hat geschrieben:Ich könnte dir zig Anwendungen dafür nennen, wo sowas sinnvoll und absolut nachvollziehbar ist. So weit will ich aber nicht gehen. Das Konzept der Verschattung ist ein gewollter Effekt, den ich auch nutzen können will.
Das nennt sich da Attribut. Und wenn SAP globale Variablen verbieten würde, hätten Sie ja auch Alternativen vorgesehen um Select-Options oder (für Dynpros sehr hilfreich) TABLES-Definitionen zu ersetzen. Leider habe ich diese bisher nicht gefunden.Ralf hat geschrieben:Oder wenn man die Verwendung globaler Variablen grundsätzlich verbietet, wie die SAP das tut. Versuche mal in einer Klasse eine globale Variable zu definieren.
Quatsch ist keine sinnvolle Diskussionsgrundlage. Period!Ralf hat geschrieben:Und die, die den Quatsch dann tippen müssen
Da bin ich absolute anderer Meinung! Eine Richtlinie Semantik und Typ und Sichtbarkeit zu verwenden halte ich für sinnvoll.Ralf hat geschrieben:Warum man sich entscheiden sollte? Damit eine gewisse Einheitlichkeit im Coding herrscht und nicht jeder macht, was er will.
Ich liebe Definitionen wie field-symbols: <ls_itab> like line of lt_itab. oder ls_feldname type Klassenname=>public_Type oder lv_field type type_pool_strukturtyp-feldname. Gerade letzteres könnte bei Strukturen, die geschachtelt mittels Includes definiert wurden schon klickaufwändiger zu finden sein.Ralf hat geschrieben:...werfe ich dich aus meinem Projektteam...Setze niemals einen Pointer auf einen Pointer!
Wenn ich nur an von mir geschriebenen Eigenentwicklungen arbeiten würde wäre das tatsächlich kaum kein Problem. Aber ich komme rum und darf auch mal anderer Leute Coding anpassen und freue mich, wenn bei denen eine Coderichtlinie die zumindest and HN angeleht ist existiert.Ralf hat geschrieben:Du musst schauen, ob die Variable global oder lokal definiert ist? Dann solltest du nicht mit globalen Feldern arbeiten
Nur rudimentär: "Structure, flat, ..." oder "Type=C132" aber nicht das Datenelement oder der Strukturname.Ralf hat geschrieben:Nein, der Debugger zeigt die Deklaration per Mouseover an. Da musst du *noch* *nichtmal* klicken.
Du willst mir echt erzählen, du kennst den Unterschied zwischen einer globalen Variable und einem Klassenattribut nicht? Das ergibt sich doch schon aus der Bezeichnung "Attribut"!black_adept hat geschrieben:Das nennt sich da Attribut.Ralf hat geschrieben:Oder wenn man die Verwendung globaler Variablen grundsätzlich verbietet, wie die SAP das tut. Versuche mal in einer Klasse eine globale Variable zu definieren.
Huch - ich versuche die ganze Zeit zu verstehen was du mir hiermit sagen willst bzw. wo es ein Problem gibt, welches auf HN zurückzuführen ist. Ich sehe es einfach nicht.Ralf hat geschrieben:Nein, das ist nicht richtig. Wenn du ein Feld im Typ veränderst, das global einen anderen Namen hat als lokal, stehst du dann vor dem Problem, dass Suchen/Ersetzen nicht mehr geht. Insbesondere: Wenn ich eine FORM Routine habe, die von mehreren Stellen aufgerufen wird, ist der Name in der Formroutine meist allgemeiner als außerhalb.
Beispiel: Ich habe eine Form-Routine zur Konvertierung von Beträgen. Außerhalb der FORM-Routine heißen die Beträge nach ihrem Kontext, innerhalb der Form-Routine habe ich mehrere Kontexte (oder keinen, je nach Betrachtungsweise), dann habe ich einen Namenskonflikt, den ich so lösen kann, dass ich das Feld "betrag" nenne (weil ich ihn nicht gleichzeitig netwr und dmbtr oder wie auch immer nennen kann).
Wenn du den Typ änderst, wirst du mit suchen/ersetzen nicht weit kommen.....
Dem 1. Teil deiner Aussage kann ich halb zustimmen, wenn eine Richtlinie so etwas nicht abdeckt. Aber ich bin durchaus bereit für ein Feldsymbol welches der Reihe nach Tabellentypen oder elementare Typen aufnehmen kann einen Feldnamen <field> zuzulassen oder <lx_fieldname> wobei das "x" für "unbestimmter Datentyp" steht. Alles nur eine Frage an wie viele Fälle man bei der Richtlinienerstellung gedacht hat.Ralf hat geschrieben:Hinzu kommt: Nehmen wir eine Struktur vom Typ MARA und du machst einen ASSIGN COMPONENT SY-INDEX... ASSIGNING <....>. Wie nennst du ein Feldsymbol, das nacheinander jeden möglichen Typ annehmen kann, wenn du den Typ als Teil des Namens verwenden willst? Wie nennst du ein Datenobjekt bei einer Dereferenzierung, wenn du gar nicht weißt, welchen Typ dieses Datenobjekt hat?
Ich frag mich manchmal echt, wie manche hier programmieren, wenn die nicht jeden Tag auf dieses Problem stoßen....
*sigh*Ralf hat geschrieben:Aber Hut ab, es gehört schon ein wenig Mut dazu, Leuten wie Horst Keller, der SAP, Linus Thorvalds, Bjarne Stroustrup und Robert Martin zu widersprechen. Aber es gibt ja auch Leute, die behaupten, die Mondlandung der Amis sei ein Fake gewesen.....
Folgende Benutzer bedankten sich beim Autor black_adept für den Beitrag:
Unit605
Ultimately, as in the MSDN rating, naming conventions are kind of personal. Pointing out how stupid someone's variable names are is like telling them how stupid they are for naming their first born child "Melvin."
Das sehe ich anders. In einem Auto ist es nicht dem VW-Mitarbeiter am Band überlassen, wie er welches Kabel verlegt. Softwareentwicklung ist ebenso ein industrieller Prozess, an den man industrielle Standards anlegen kann und sollte. Die Zeiten, wo ein Mitarbeiter eines Autoherstellers seine Initialen im Auto hinterließ, sind vorbei. Demnach überlasse ich die Wahl von Variablennamen nicht mehr dem Entwickler, sondern gebe sie vor - in einer Weise, in der ich das für sinnvoll halte (ich = jeder, der das Sagen hat). So wie an einem VW Golf jede Schraube, jede Schweißnaht und jedes Bauteil exakt vorgegeben ist.black_adept hat geschrieben:Nachtrag - habe folgendes schöne Zitat zu diesem Thema gefunden:Ultimately, as in the MSDN rating, naming conventions are kind of personal. Pointing out how stupid someone's variable names are is like telling them how stupid they are for naming their first born child "Melvin."
Nein, überhaupt nicht. Und kein Mensch würde auf die Idee kommen, ein industrielles Produkt herzustellen, ohne festzulegen, welche Ader in welcher Farbe zu legen ist.Unit605 hat geschrieben:Aepfel und Birnen.....
Ich frag mich, warum in der Elektronik farblich unterschiedliche Kabel benutzt werden. Ist doch auch nur Quatsch.
Ich warte immer noch.....ralf.wenzel hat geschrieben:Doch, mir!Unit605 hat geschrieben:Warum liest Du mein Posting nicht? Dort hab ich doch geschrieben, dass ich einem ABAPLer das nicht erklaeren muss.
Du wartest nicht immer noch..... Du provozierst immer noch.ralf.wenzel hat geschrieben:Ich warte immer noch.....ralf.wenzel hat geschrieben:Doch, mir!Unit605 hat geschrieben:Warum liest Du mein Posting nicht? Dort hab ich doch geschrieben, dass ich einem ABAPLer das nicht erklaeren muss.
Grosskotzig etwas von "Diskussionskultur" daher labern und selber sich in keinster Weise daran halten.ralf.wenzel hat geschrieben:Und wenn schon, häng dich doch nicht an einzelnen Worten auf. Ich bin aus dem Pott, da redet man so: Kurz, knapp, deutlich. Das ist ja kein persönlicher Angriff. manmanman, was ist bloß aus der Diskussionskultur in diesem Land geworden? Ich bin groß geworden zu Zeiten, wo Wehner und Strauß sich blutige Wortgefechte im Bundestag geliefert haben und trotzdem nachher noch ein Bier zusammen getrunken haben.
Das ist eine Unterstellung. Guck mal, was ich heute per Mail bekommen habe (den Absender nenne ich natürlich nicht) - ist ja nicht jeder scharf drauf, hier seinen Senf abzulassen:Unit605 hat geschrieben:Du wartest nicht immer noch..... Du provozierst immer noch.
Aber das ist man ja von Dir so gewohnt.... nur Du merkst es nicht.
Ohne Worte!wobei ich allerdings die sachbezogenen Kommentare den Angriffen von Unit605 vorziehe
Folgende Benutzer bedankten sich beim Autor Thanatos82 für den Beitrag (Insgesamt 2):
black_adept • ST22
Nein. Es ist nichtmal eine Geschmacksfrage, wenn es vorgeschrieben ist, wie die von mir angeführten Quellen ja zeigen. Es ist auch keine Geschmacksfrage, welche Kabel in einem Auto wie verlegt werden, sondern millimetergenau vorgeschrieben.Thanatos82 hat geschrieben:ist das nicht (wenn es nicht gerade vorgeschrieben ist) immer auch eine persönliche Geschmacksfrage?