Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi statisch deklarierte records mit automatischen Constructor (https://www.delphipraxis.net/132894-statisch-deklarierte-records-mit-automatischen-constructor.html)

stoxx 21. Apr 2009 16:03


statisch deklarierte records mit automatischen Constructor
 
ob es sowas denn irgendwann geben wird in Delphi 2011 bitte? :-)
dass ein automatischer Constructor Aufruf erfolgt, bevor ein statisch angelegter Record verwendet wird, also quasi bei der Speichergenerierung?

weiß jemand, ob sowas geplant ist?

also wie statische Klassen in C sozusagen?

himitsu 21. Apr 2009 18:29

Re: statisch deklarierte records mit automatischen Construct
 
Jupp, sowas wünsche ich mir auch schon länger :cry:

Praktisch 2 neue Operatoren für InitializeRecord und FinalizeRecord.

ich hatte es nur das Initialize zu simulieren, indem ich einen String bzw. ein dynamisches Array dafür mißbrauchte, welcher dieses ja inne hat :stupid:

Aber theoretisch könnte man sich das Finalize und ein verzögertest Initialize (praktisch beim Aufrufen einer Methode des Records) über einen Interface irgendwie zusammenbasteln :gruebel:

Phoenix 21. Apr 2009 18:45

Re: statisch deklarierte records mit automatischen Construct
 
Naja.. comm... das Record.Create kannst Du ja wohl noch von Hand aufrufen?
Ich mein - konstruktoren für Records sind ja nix neues mehr. Der automatische Aufruf ist halt ned da... Aber wenn man das weiss kann man den ja auch selber aufrufen.

Ansonsten: Feature request in QC eintragen und beten ;)

himitsu 21. Apr 2009 19:38

Re: statisch deklarierte records mit automatischen Construct
 
praktisch ein "automatisches" Event, wie bei Interfaces, wäre nicht schlecht.

halt wie es bei den dynamischen Arrays und Strings auch de Fall ist.
(wenn Variable erstellt, kopiert und freigegeben wird)

alzaimar 21. Apr 2009 20:01

Re: statisch deklarierte records mit automatischen Construct
 
Was ich mich wünsche, ist ein automatischer Problemsolver, der mir endlich meine Probleme löst, indem ich einfach das program Keyword eintippe. :wall: Ich schreib das mal an Embarcadero. So schwer kann das ja wohl nicht sein. :mrgreen: :wiejetzt: :cheers:

Mal im Ernst: Meint ihr nicht auch, das Code dann noch unleserlicher wird? Ich möchte in meinen Programmen weitestgehend steuern, ob und wann Code ausgeführt wird. Es kann doch nicht sein, das folgender Code meine Festplatte formatiert:
Delphi-Quellcode:
Programm HarmlosOderNicht;
Uses Harmlos;
Var
  X : TWirklichGanzHarmlosHarHar;

Begin
End.
Sowas meint ihr doch, oder?

himitsu 21. Apr 2009 20:43

Re: statisch deklarierte records mit automatischen Construct
 
da X nicht genutzt wird, kürzt Delphi das raus und nix passiert :zwinker:
(und Notfalls hau ich das Formatieren in den Initialisations-Abschnitt 'ner Unit und fertig,
also automatischer Code ist nicht nur hier "gefährlich")

wieso denn nicht? derartig automatische Dinge (Compilermagic) kennen wir doch
schon zu Genüge (Paradebeispiele: Strings und dynamische Arrays),
also warum soll man sich dann sowas nicht auch für eigene Typen wünschen?


OK, Operatoren für Objekte/Interfaces wären noch geil :angel2:

stoxx 22. Apr 2009 06:06

Re: statisch deklarierte records mit automatischen Construct
 
Zitat:

Zitat von Phoenix
Naja.. comm... das Record.Create kannst Du ja wohl noch von Hand aufrufen?

alle Sachen, die sich trotz grobem Fehler compilieren lassen, sind schlecht, weil die Softwarequalität darunter leidet.
Wenn ein Klassenpointer nicht createt ist, dann merkt man das sehr gleich. Das Programm mit einem uninitialisiertem Record läuft erstmal trotzdem.
Und das ist nicht gut.

SirThornberry 22. Apr 2009 06:15

Re: statisch deklarierte records mit automatischen Construct
 
Zitat:

praktisch ein "automatisches" Event, wie bei Interfaces, wäre nicht schlecht.
Und warum verwendet man dann nicht einfach Interfaces?
Den Wunsch kann ich geringfügig verstehen aber man sollte Bedenken das es Bereits Objecte (die Constructoren unterstützen gibt). Und wenn man einen Constructor will soll man doch Objekte nehmen. Will man keinen kann man einen Record nehmen. Wenn wir jetzt noch den Record mit Constructoren versehen müsste ja etwas neues eingeführt werden damit es wieder etwas ohne constructoren gibt.
Ich fände dann sinnvoller das man bei der Declaration gleich Zuweisungen vornehmen kann (wie bei globalen Variablen bzw. wie in anderen Programmiersprachen)

alzaimar 22. Apr 2009 06:42

Re: statisch deklarierte records mit automatischen Construct
 
Zitat:

Zitat von himitsu
da X nicht genutzt wird, kürzt Delphi das raus und nix passiert :zwinker:

Glaub ich nicht, denn das wäre noch schlimmer. Und wann wird denn dann der Code ausgeführt? Wenn ich eine Unit nicht weiter verwende, wird der 'Initialization'-Teil doch auch ausgeführt. Also wird das nicht rausgekürzt. Oder doch? Super übersichtlich. Ist noch nicht mal implementiert und schon weis man nicht, was passiert. :thumb:
Zitat:

Zitat von himitsu
also automatischer Code ist nicht nur hier "gefährlich")... (Compilermagic) kennen wir doch
schon zu Genüge (Paradebeispiele: Strings und dynamische Arrays)

Mann muss doch nicht dafür sorgen, das noch mehr Compilermagic dazu kommt. Dann kann man doch gleich Visual Basic nehmen.

Ich mag Delphi gerade wegen dem kleinen bisschen Magic, der einem das Leben leichter macht. Aber auch hier muss man manchmal tricksen bzw. bricht sich einen ab, wenn man nicht genau weiss, was Sache ist. Ich empfinde das einkompilierte Zeugs von Delphi als grenzwertig, aber eben noch auf der 'guten Seite'.

Einerseits wäre es sicherlich hilfreich, Records irgendwie initialisieren zu können, nur wann soll das geschehen? Wird dann nicht auch redundanter Code produziert? Einfaches Beispiel:
Delphi-Quellcode:
Var
  A,B : TSomeRecordWithAutoInit;

Begin
  A.Feld := 123;
  B := A;
End;
Wenn der Code sozusagen vor dem 'Begin' ausgeführt wird, dürfte der Init-Code für B überflüssig sein (wegen der Zuweisung von A). Wenn der code also redundant wäre, könnte (und sollte) er wegoptimiert werden. Wann wird also *genau* der Init-Code von 'B' ausgeführt? Wird er überhaupt ausgeführt (wegen der letzten Zeile) oder von Delphi wegoptimiert?

Klarer und eindeutiger wäre es so:
Delphi-Quellcode:
Var
  A,B : TSomeRecordWithoutAutoInit;

Begin
  A.Init; // Klare Ansage.
  A.Feld := 123;
  B := A;
End;
Wie gesagt, nur meine konservative bescheidene Meinung.

mkinzler 22. Apr 2009 06:47

Re: statisch deklarierte records mit automatischen Construct
 
Imho sollte man die Unterschiede zwischen Klassen und Records nicht weiter verwischen. Wer einen Konstruktor will, sollte eine Klasse nehmen. Statt
Delphi-Quellcode:
A.Init;
wäre dann eine generisches
Delphi-Quellcode:
Init( A);
besser


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 Uhr.
Seite 1 von 2  1 2      

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