![]() |
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? |
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: |
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 ;) |
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) |
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:
Sowas meint ihr doch, oder?
Programm HarmlosOderNicht;
Uses Harmlos; Var X : TWirklichGanzHarmlosHarHar; Begin End. |
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: |
Re: statisch deklarierte records mit automatischen Construct
Zitat:
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. |
Re: statisch deklarierte records mit automatischen Construct
Zitat:
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) |
Re: statisch deklarierte records mit automatischen Construct
Zitat:
Zitat:
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:
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?
Var
A,B : TSomeRecordWithAutoInit; Begin A.Feld := 123; B := A; End; Klarer und eindeutiger wäre es so:
Delphi-Quellcode:
Wie gesagt, nur meine konservative bescheidene Meinung.
Var
A,B : TSomeRecordWithoutAutoInit; Begin A.Init; // Klare Ansage. A.Feld := 123; B := A; End; |
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:
wäre dann eine generisches
A.Init;
Delphi-Quellcode:
besser
Init( A);
|
Re: statisch deklarierte records mit automatischen Construct
Zitat:
Delphi-Quellcode:
da X nicht verwendet wird, sollte der Compiler die Definition weglassen.
Programm HarmlosOderNicht;
Uses Harmlos; Var X : TWirklichGanzHarmlosHarHar; Begin End. Und ja klar, der Initialisationsabschnitt einer Unit wird dennoch ausgeführt. :angel2: Ich finde es schon praktisch, wenn man Funktionen, welche zu einem Record benötigt auch direkt als Funktion in Diesem einbauen kann ... OK, abgesehn es ist vorauszusehen, daß diese Funktionen noch für anderes Nützlich sind und/oder wenn die Funktionalitäten zum Record mal erweitert werden sollen/können. wenn man hierzu noch eine initialistation/finalisation, sammt Kopierroutine dazukämen, dann wären schon nette Dinge möglich.
Delphi-Quellcode:
Und bezüglich der mehrfachen/"sinnlosen" Initialisierung ... schau mal in die Strings, da ist die Inizilasitation einfach nur ein Nullen der Variable, damit sie dann einen definierten zustand hat, wenn sie verwendet wird ... soo sinnlos ist es dann doch nicht, also wenn es diese Kopiermethode noch mit dazugäbe.
Var
A,B : TSomeRecordWithAutoInit; Begin A.Feld := 123; B := A; End; und wie wäre es noch mit Inlineresourcen? :lol: dann wäre es sogar möglich nette Programme nur noch in der DPR zu erstellen ... hab ich ja schon mehrmals gemacht (keine PAS und RES, also nur die DPR und sonst nix) ... für kleine Miniprogramme ist das schon ganz nett :angel2: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03: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