Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Fragen zu TList (https://www.delphipraxis.net/22036-fragen-zu-tlist.html)

Jacki O 11. Mai 2004 17:15


Fragen zu TList
 
Hallo,

ich habe in meinem Prog eine Liste vom Typ TList.
In der Speicher ich Zeiger auf Strukturen:
Code:
PMyElem = ^TPMyElem;
TPMyElem = record
 Nr  : Integer;
 Name : String[40];
end;

...
var MyElem : PMyElem;
    aList : TList;
...
Mit
Code:
New(MyElem);
Reserviere ich Speicher für ein neues Element. Die Daten kommen durch
Code:
MyElem.Nr := eineNummer;
MyElem.Name := 'Hans';

aList.Add(MyElem);
in die Liste. In einem Buch habe ich nun gelesen, das beim Einfügen der Daten dieses 'Pointer Dach' mit dabei ist:
Code:
MyElem^.Nr := eineNummer;
MyElem^.Name := 'Hans';

aList.Add(MyElem);
Das habe ich in meinem Prog nicht und bisher auch keine Probleme, aber nun die Frage, wozu wird das so gemacht, bzw werde ich Probleme bekommen ??


Gruß Jacki

maximov 11. Mai 2004 17:21

Re: Fragen zu TList
 
Nein du wirst keine probleme bekommen, da delphi aus dem kontext schliessen kann, das du hier dereferenzieren möchtest und macht es dann automatisch! Ist allerdings ne stil-frage ob du deinen code nicht lieber eindeutig formulieren willst :wink:

Jacki O 11. Mai 2004 17:24

Re: Fragen zu TList
 
Hallo,

danke für die schnelle Antwort :thuimb:
Gruß Jacki

Jens Schumann 11. Mai 2004 17:38

Re: Fragen zu TList
 
Zitat:

Zitat von maximov
Nein du wirst keine probleme bekommen, da delphi aus dem kontext schliessen kann, das du hier dereferenzieren möchtest und macht es dann automatisch! Ist allerdings ne stil-frage ob du deinen code nicht lieber eindeutig formulieren willst :wink:

Da ich Turbo-Pascal ab der Version 3.0 kenne bin ich noch nicht auf die Idee gekommen in solch einem Fall die ^ wegzulassen. Vielleicht halte ich es auch deshalb für einen äußert unsauberen Stil. Wenn man nicht gerade die Deklaration vor Augen hat könnte man auch darauf kommen, dass es sich um ein Object o. normalen Record handelt.
Bin ich alleine mit der Meinung?

Hansa 12. Mai 2004 02:12

Re: Fragen zu TList
 
Zitat:

Zitat von Jens Schumann
Bin ich alleine mit der Meinung?

Nein ! Ich frage mich eher, wieso das egal sein soll, oder wie das gehen soll ? Wäre es egal, so wäre die Pascal-Syntax nicht mehr eindeutig. Schreibe ich 1+1=3 so könnte man vielleicht mit einer gewissen KI darauf schließen, daß es falsch ist, aber ist die 1 verkehrt oder die 3 ? ist also 2+2=4 gemeint, oder 1+1=2 ?? Wie soll der Compiler das entscheiden ? Also, wie immer, besser Fehlermeldung und nix mit EXE.

Jede Programmiersprache hat eine eindeutige Grammatik, die sich mathematisch beweisen läßt. Und das Bsp. hier mit dem ^ (Ptr-Dach)wiederspricht allem. Ein Compiler ist nun mal kein Telefon-Nummern Verzeichnis. Der kann sich nicht mit "trefferquoten" zufrieden geben. :lol:

Luckie 12. Mai 2004 02:53

Re: Fragen zu TList
 
Fällt wohl unter den Begriff Compiler-Magic. ;)

Btw, wenn ihr mit Objekten arbeitet, dereferenziert ihr ja auch nicht explizit und das, obwohl Objekte eigentlich auch nur Zeiger auf einen Speicheradresse sind. Wenn ihr nicht wollt, dass Delphi für euch die Arbeit mit den Pointern abnimmt, dann müsst ihr C++ benutzen.

Jacki O 12. Mai 2004 07:10

Re: Fragen zu TList
 
Hallo,

erstmal vielen Dank für die Antworten.
Ich sehe das nun so :

Wenn der Compiler einem die Möglichkeiten gibt Dinge zu vereinfachen, dann kann es nicht verkert sein, diese Vereinfachung anzunehmen. Da es sich anscheinend nur um eine Stil Frage handelt.
Ausserdem denke ich, das die Vereinfachung dazu führt, das Andere, die nicht so viel mit Delphi und entsprechend mit Pascal zu tun haben, den Quellcode einfacher lesen und verstehen können.

Gruß Jacki

maximov 12. Mai 2004 09:32

Re: Fragen zu TList
 
Zitat:

Zitat von Jacki O
....
Ausserdem denke ich, das die Vereinfachung dazu führt, das Andere, die nicht so viel mit Delphi und entsprechend mit Pascal zu tun haben, den Quellcode einfacher lesen und verstehen können.

Sie können ihn vielleicht einfacher lesen, weil sie nicht mit dem ^ zeichen belästigt werden, aber werden damit auch in die irre geführt, da sie denken hier wird ganz normal qualifiziert und nicht dereferenziert + qualifiziert :wink:

Also bin auch dafür es explizit hinzuschreiben!


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz