Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi Variable einen Anfangwert in der Deklaration zuweisen (https://www.delphipraxis.net/180180-variable-einen-anfangwert-der-deklaration-zuweisen.html)

youuu 28. Apr 2014 20:36

Variable einen Anfangwert in der Deklaration zuweisen
 
Hi,

kann ich einer Variable direkt bei der deklaration einen Anfangswert zuweisen?

Beispielsweise
Delphi-Quellcode:
i: Integer = 0;

Dalai 28. Apr 2014 20:55

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
IIRC geht das nur bei globalen Variablen, nicht aber bei lokalen (was mich manchmal nervt).

MfG Dalai

youuu 28. Apr 2014 20:57

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
Ok, dacht ich mir. Ja nervt mich auch etwas, gerade beim initialisieren :(

CocoPops 28. Apr 2014 20:58

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
Wieso nicht im OnCreate-Event?
Ist zwar wirklich manchmal nervig, da man manchmal einige Variablen vergisst, aber dabei knickt man sich keinen ab ;)

himitsu 28. Apr 2014 21:21

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
Der Witz ist doch, daß der Compiler derartige Wertzuweisungen doch auch in eine Variablenzuweisung umwandeln könnte.

Wert merken und direkt nach/in dem BEGIN ein
Delphi-Quellcode:
Variable := Wert;
.
Bei lokalen Variablen kein großes Problem.

Nur bei Klassen, müsste man den Code irgendwo in einen Contructor machen ... nur welchen.

Dejan Vu 29. Apr 2014 07:15

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
Zitat:

Zitat von himitsu (Beitrag 1257328)
Nur bei Klassen, müsste man den Code irgendwo in einen Contructor machen ... nur welchen.

In alle.

himitsu 29. Apr 2014 08:06

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
Zitat:

Zitat von Dejan Vu (Beitrag 1257353)
In alle.

Nein, so leicht ist das nun auch nicht, abgesehn davon, daß man dann einen doppelten Code hat, da er ja überall drin wäre. ;)
Aber das wäre zumindestens eine "einfache" Lösung.

Was wäre, wenn es in der Klasse garkeine eigenen Konstruktoren gäbe? (nur im Vorfahren und in Nachfahren)
Oder mehrere Constructoren ... die können sich auch gegenseitig aufrufen, oder auch nicht.
Und man kann auch Code/Zuweisungen vor dem Inherited ausführen, oder im Nachfahren ruft man das Inherited garnicht auf.


Mir würde da wohl eher NewInstance einfallen, oder besser noch eine Art Multievent in InitInstance rein, bzw. eine neue virtuelle Methode in ala InitFields, denn dort ist auch der Code drin, welche alle Felder mit 0/nil initialisiert.

Der schöne Günther 29. Apr 2014 08:19

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
hä? :gruebel:

Ich kann (glaube ich) an einer Hand abzählen, wie oft ich einen Konstruktor mal überladen habe. In anderen Sprachen die (anders als Delphi) kein oder nur sehr eingeschränktes "Konstruktor-Chaining" erlauben hat sich meist eine "init"-Methode eingebürgert die dann alle Felder auf irgendeinen "Anfangswert" setzt.

In Delphi habe ich hingegen immer einen "Grundkonstruktor" wo alles so gesetzt wird, wie es normal sein sollte. Ein "alternativer" Konstruktor ruft dann diesen auf.

Delphi-Quellcode:
TMyClass = class
   protected var someField: Integer;
   protected var someOtherField: String;
   public constructor Create(); overload;
   public constructor Create(const stuff: String); overload;
end;
   
constructor TMyClass.Create();
begin
   inherited Create();
   self.someField := 42;
end;

constructor TMyClass.Create(const stuff: String);
begin
   self.Create();
   self.someOtherField := stuff;
end;

Dejan Vu 29. Apr 2014 08:24

AW: Variable einen Anfangwert in der Deklaration zuweisen
 
Zitat:

Zitat von himitsu (Beitrag 1257355)
Zitat:

Zitat von Dejan Vu (Beitrag 1257353)
In alle.

Nein, so leicht ist das nun auch nicht, abgesehn davon, daß man dann einen doppelten Code hat, da er ja überall drin wäre. ;)

Doch, das ist so leicht (siehe C#). Und die Initialisierung in der Feld-Deklaration ist kein doppelter Code:
Delphi-Quellcode:
Type
  TMyClass = Class
     fFoobar : Integer := 3;
  ...
  constructor Create;
  constructor Create(bar : Integer);
...
  end;
Wenn das so ginge, wäre es praktisch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:41 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