![]() |
Pointer und "^"
Hallo,
ich hab mal eine Frage bezüglich Pointer. Tut nichts zur Funktion ist auch kein Problem, es geht mir nur um die Schreibweise. Aus irgendeinem - mir nicht mehr bekannten - Grund hab ich mir angewöhnt beim Zugriff auf ein Objekt mittels Pointer ein "^" Zeichen zu verwenden. Zum Beispiel:
Delphi-Quellcode:
Das jetzt nur mal so als Beispiel, ohne Sinnhaftigkeit.
type
PTreeItem = ^TTreeItem; TTreeItem = record Text : String; Index : Integer; end; procedure irgendwas; var pItem : PTreeItem; begin New( pItem ); pItem^.Text := 'Hallo Welt'; pItem^.Index := 1; ... Dispose( pItem ); end; Eigentlich ist es ja gar nicht notwendig. Für mich erleichtert es zwar die Lesbarkeit, weil ich dann weiss dass es sich um einen Pointer handelt. Obwohl ich da auch immer die Variable mit einem p beginne. Aber ich frage mich warum ich mir das angewöhnt habe? Kommt das vielleicht gar noch aus TurbaPascal Zeiten? :gruebel: Sollte man sich das abgewöhnen? liebe Grüße, Daniela |
Re: Pointer und "^"
Solange du dich damit wohlfühlst würde ich nicht darüber nachdenken, ob mal sollte oder nicht.
PS: ich mach das auch immer mit ^, da man so besser sieht, dass es sich um einen Pointer handelt. |
Re: Pointer und "^"
Ich schreibe solche Anweisungen auch immer mit ^, alles andere ist meiner Meinung nach semantisch usninnig und nur für Leute, die zu faul sind, ein zusätzliches Zeichen zu tippen.
|
Re: Pointer und "^"
Das ist eigentlich auch richtig so. Der Delphicompiler "ergänzt" dies zawr wenn es fehlt, so dass es nicht unbedingt notwendig ist.
|
Re: Pointer und "^"
Zitat:
:mrgreen: |
Re: Pointer und "^"
Freepascal (-> Lazarus) nimmt das genauer (wenn nicht im Delphi-Modus).
Somit ist dein Code sogar portabler. Wenn du es mal begründen sollst :stupid: |
Re: Pointer und "^"
Also ich finde die Verwendung des ^ ebenfalls gut. Weil man die Dereferenzierung wirklich sieht.
Und als Umsteiger von Delphi nach Freepascal ( Lazarus ) bin ich nun Froh dass ich sie gesetzt habe. FPC Verlangt auch das @ bei der Zuweisung von Notify Events. Delphi will die so viel ich weis glaube ich nicht haben... |
Re: Pointer und "^"
Wie gesagt, nur weil der Compiler gutmütiger Weise etwas nicht ganz korrekten Code akzeptiert, heisst das noch lange nicht dass er richtig bzw. das korrekter Code falsch ist. Das ^ ist also nicht überflüssig
|
Re: Pointer und "^"
Zitat:
Zitat:
|
Re: Pointer und "^"
Zitat:
Zitat:
Und jetzt noch der kaufmännische Bringer: Es ist sogar kostensparend. Ich lasse selber das @ auch immer weg, denn es ist funktionierender übersichtlicher Code. Bei Pointern genau das gleiche nur da ich nahezu nie mit Pointern arbeite, verwende ich das ^ auch kaum. Im Endeffekt ist es für ein reines Delphiprojekt *schnurz piep egal*, genauso wie bei der Code-Formatierung. |
Re: Pointer und "^"
Naja, dieses Dach der Tastatur zu entlocken, ist ja eine noch größere Zumutung als die geschweiften Klammern in C & Co.
Hinzu kommt, daß man ständig aufpassen (oder sich vom Compiler belehren lassen) muß, an welcher Stelle dieses Zeichen denn nun korrekt gesetzt wird. Ich konnte (und mochte) es mir jedenfalls bis heute nicht merken. Zitat:
|
Re: Pointer und "^"
Zitat:
[Edit: Zitat eingefügt, auf welches sich mein Beitrag bezieht] |
Re: Pointer und "^"
Hier geht's doch auch denk ich ein bischen um semantische Korrektheit. Wenn ich einen expliziten Zeigertypen verwende, würde eine implizite Dereferenzierung schlicht inkonsequent wirken. Etwas ganz anderes sind da Objektinstanzreferenzen und Methodenzeiger: Diese sind zwar intern auch nur Pointer, aber semantisch ein ganz eigenes Konstrukt! Daher ist die implizite Dereferenzierung hier sehr wohl sinnvoll, also auch bei Zuweisung von Events ohne "@", es sei denn es wird explizit an einen Zeigertypen, nicht einen Methodentypen zugewiesen - aber wer macht das schon :)
|
Re: Pointer und "^"
Zitat:
[edit] Wenn schon Kommasetzung und Rechtschreibung, dann wenigstens richtig. [/edit] |
Re: Pointer und "^"
Zitat:
Meine Firmen/-Privatprojekte werden bestimmt nicht als Wegwerfprojekte angesehen, aufgrund eines nicht gesetztem ^ und @. :shock: Embaccadillo wird solchen Code sicherlich niemals als fehlerhaft ansehen. Ich behaupte jetzt mal, dass sich deine Aussage auch auf die Code-Formatierung bezieht. Die wird bei uns eh von jedem so automatisiert umgehauen wie er es haben will. Und ich bin mir auch sicher, dass man das "^" und "@" auch automatisiert in ein Projekt ein/ausblenden lassen kann. (Der Compiler bemerkt ja auch die richtigen Stellen) |
Re: Pointer und "^"
Ja, es bezog sich auch darauf.
Ich finde es aber komisch, dass diejenigen die den korrekten Code verwenden ( mit ^) als ineffektive/teure Programmierer zu brandmarken, weil sie kaufmannisch nicht kostensparend programmieren! Wobei bei Fehlersuche eher umgekehrt ist, da man Dank des Mehrcodes ( explizite De-/Referenzierung) schnell sihet dass es sich um Pointer handelt |
Re: Pointer und "^"
Zitat:
|
Re: Pointer und "^"
Er hat es aber so geschrieben!
Vielleicht sollte man dann auch Sekretärinnen programmieren lassen, die gaben nämlich mehr Anschläge pro Minute -> mehr Code pro Zeit -> höhere Effektivität :stupid: |
Re: Pointer und "^"
:zwinker:
Ich denke, dass man beim dereferenzieren von Zeigern das entsprechende Symbol nicht angeben muss, ist ja vermutlich ein Nebenprodukt der Tatsache, dass man die Angabe dieses Symbol beim Zugriff auf Objekte vermeiden wollte. Dadurch ist Delphi als Programmiersprache aus meiner Sicht nicht mehr konsistent. Man wollte aber wohl den internen Zugriffsmechanismus auf Objekte vor dem Programmierer verbergen, was dann für den Neueinsteiger auch gleich zu Problemen führt. Jedenfalls ist erstmal nicht besonders einleuchtend, warum eigentlich die Zuweisungen eines Rekords den Inhalt kopiert, bei einem Objekt jedoch nur die Referenz kopiert wird. Konsequenterweise muss man also das ^ immer weglassen, oder? Gerade jetzt, wo die Turbo-Pascal-Objekte eine Wiederauferstehung in Form von Records-mit-Methoden feiern. :zwinker: |
Re: Pointer und "^"
Oder konsequenterweise immer verwenden um Pointer und Referenzen zu unterscheiden
|
Re: Pointer und "^"
Meine Güte habt ihr Probleme, das ist ja wieder mal nicht auszuhalten :wall:
Wenn man den Inhalt eines Zeigers haben möchte, dann referenziert man diesen und sonst nicht. Nur weil der Delphicompiler hier so blind ist (und Lazarus in diesem Punkt wirklich konsequenter ist) kann man doch trotzdem so programmieren, dass man sieht, was man da eigentlich macht. Einige wollen das nicht verstehen: ok, dann eben nicht. Aber trotzdem ist das ein Unterschied, das ist genauso wie der Internet Explorer, der versucht HTML-Fehler zu interpretieren, ein absoluter Grauß für die Web-Entwicklung. Nichts anderes ist das hier, damit befasst man sich einmal, versteht es und macht es dann richtig. Wo ist das Problem? |
Re: Pointer und "^"
Hoppla, was habe ich denn da losgetreten? Scheint was religiöses an sich zu haben *ggg*
Ich weiss jetzt zwar nicht ob ich das noch aus TurboPascal Zeiten gewohnt bin, aber die Lesbarkeit ist für mich sehr wichtig. Vor allem wenn ich einige Monate nicht an einem Projekt gearbeitet habe. Pointer verwende ich schon recht oft und da ist für mich die Lesbarkeit und Unterscheidung der Objekte sehr wichtig. Dass man schneller programmiert wenn man das Zeichen weglässt halte ich für, entschuldigt den Ausdruck, lächerlich. Das Wichtigste ist den Code so zu schreiben, dass man ihn auch noch Wochen, Monate oder Jahre nachher lesen kann. Ansonsten fängt dann eine ewig lange Suche an. Die zwei Sekunden die man vorher gespart hat sind dann schnell weg. |
Re: Pointer und "^"
...und manchmal geht es ja auch nicht anders.
Delphi-Quellcode:
Da wäre es schon merkwürdig an anderer Stelle dann
with PointerToMyRecord^ do
Irgendwas := 0;
Delphi-Quellcode:
zu schreiben, oder? Mein Votum: Nicht abgewöhnen.
PointerToMyRecord.Irgendwas := 0;
Zitat:
Zitat:
|
Re: Pointer und "^"
Weil es bei Objekten auch semantisch falsch wäre. Das ist schon i.O. so.
Aus dem gleichen Grund muss man bei C# zum Beispiel immer Parameter mit dem Schlüsselwort "ref" definieren und übergeben, wenn eine Objektreferenz gewollt ist. Das ist herrlich konsequent an der Stelle. |
Re: Pointer und "^"
Zitat:
Hier wäre es aber mal praktisch, wenn die nächste Generation des Delphi-Parsers frei zugänglich wäre und dieser nicht nur Compilerintern versteckt wäre. Dann könnte man auch endlich mal das ErrorInsite :stupid: "reparieren". |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz