![]() |
Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Wes Grundes läßt der Delphicompiler solchen Schund zu, ohne daß der Pointertyp explizit dereferenziert werden muß? Ich finde sowas widerlich, weil es die Syntax ungenau macht. Schlimmer noch, warum greift die Seuche um sich und benutzen die Delphianer diese ungenaue Syntax?
Los, macht mich fertig :zwinker: |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Du meinst, es müsste eigentlich so heißen:
Delphi-Quellcode:
Pointertyp(pBla)^.Member
|
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
|
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Nichts hindert dich das so zu schreiben.
Aber es wäre doch ziemlich lästig wenn man laufend Form1^.ShowModal; Button1^.Enabled := False; ... schreiben müsste. Und außerdem ermöglicht das eine leichtere Portierung nach .NET. |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Wenn es diese Art Compilermagic nicht geben würde, würde kein Hahn da anch krähen und es so akzeptieren. In anderen Sprachen ist es ja auch nicht anders. Die explizite Dereferenzieruzng hat eiegntlich den Vorteil, dass man genau sieht, wann man es mit einem Zeiger zu tun hat und, wann nicht. Gerade bei Delphi Anfängern führt das zu Verständnisproblemen, denke ich.
Übrigens gerade probiert:
Delphi-Quellcode:
Fehlermeldung:
Button1^.Enabled := False;
Zitat:
|
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Warum ? Weil die Schreibweise
Delphi-Quellcode:
exakt die gleiche Funktionalität erzwingt wiePointer^.Member
Delphi-Quellcode:
Also warum sollte man es dann nicht auch vereinheitlichen bzw. abkürzen ?
Pointer.Member
Oder anders ausgedrückt: das Ziel ist das Gleiche, die basierende Typinformation ist irrelevant für den Leser des Sources, denn um die Typsicherheit soll sich gefälligst der Compiler in meinem Auftrag kümmern. Es ist mir echt schnuppe in diesem Moment ob ein Pointer auf einen Record oder ein simpler Record oder ein Objekt oder sonstwas angesprochen wird, hauptsache ich greife auf das richtige Member mit der richtigen Methode zu. Die explizite Dereferenzierung ist also nur ein unnötig störendes Element in einem Source der inhaltlich keinerlei Mehrinformation zum Verständnis in diesem Moment der Quellttextzeile bietet. Dafür sind ja die separaten Typdeklartionen zuständig. Und, falls du dich entschließen solltes eines Tages deinen Pointer auf Record in einen Record im Stack oder in eine Klasse zu verwandeln, dann ist die neue Schreibweise kompatibel ohne Änderungen ! Übrigens, in Assembler kennt man syntaktisch diesen Unterschied ebenfalls nicht. Gruß Hagen |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Ich halte das jetzt für eine Scherzfrage mit halbernsten Hintergrund. :freak:
Sorry Ollie, aber wie hässlich wäre Code, wenn ich jede Objektinstanz erst dereferenzieren müsste? :shock: Was ich nicht kapiere ist, dass der Delphicompiler (und die RTL) keine Typensicherheit erzwingt. Warum kann ich das machen:
Delphi-Quellcode:
Das ist doch geradezu widerlich...
var
someInt : Integer; begin TObject(someInt) := TObject.Create(); dec(someInt); TObject(someInt).Free(); Typensicherheit heißt für mich, dass eine Instsnz von TSomeType auch wirklich das ist, was sie mir vorgaukelt. |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Zitat:
|
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Warum es in C und C++ eingefuehrt wurde verstehe ich nicht, denn dort gibt es den -> Operator.
Bei Delphi macht das ja Sinn. Besonders fuer Member einer Klasse, da eine Klassenreferenz formal kein Zeiger ist. Die Klassenreferenz ist nur als Zeiger implementiert. Das es fuer alle Zeiger geht, liegt an der Art wie die Zeiger von C (besonders PChar) in Delphi eingepasst wurden. Es ist also weniger ein neu eingefuehrtes Feature wie bei C++ sondern eher ein notwendiges Uebel der Kompatibilitaet zu C. |
Re: Warum läßt Delphi das zu: Pointertyp(pBla).Member???
Zitat:
Zitat:
Zitat:
Aber Gegenfrage: Warum gibt's das überhaupt, wenn ich es doch auch ohne ^ schreiben kann? Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:40 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