Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Constructor Rückgabewert nil-en statt Instanz zurückzugeben? (https://www.delphipraxis.net/195957-constructor-rueckgabewert-nil-en-statt-instanz-zurueckzugeben.html)

günni0 11. Apr 2018 11:16

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Schön zu lesen, dass sich nicht alle unbedingt an irgendwelche Vorgaben halten die irgendjemand irgendwann mal in die Welt geworfen hat.
Was in meinem Konstruktor passiert sind kleinere Überprüfungen, Stringmanipulationen und das Erzeugen eines Threads. Mehr nicht.

Dafür, um das jetzt schön sauber zu bekommen, zerbreche ich mir jetzt nicht Tage lang den Kopf.

DevLinus 11. Apr 2018 12:12

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Wie wäre es mit einer Funktion, die man dazwischen Schaltet. Sprich eine Funktion die den String überprüft und wenn der String Valied ist wird der Constructor aufgerufen und wenn nicht gibt die Funktion Nil zurück.

Ich bin ein Fan davon nur richtige Werte an einen Constructor zu übergeben und mögliche "Fehlerquellen" vorher auszuschließen.

günni0 11. Apr 2018 12:24

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Ich versuche es mal.

Am liebsten wäre es mir natürlich, wenn meine ObjectList Records (mit class vars und class functions/procedures) aufnehmen könnte statt Klasseninstanzen. Dann hätte ich das ganze Problem erst gar nicht.

Uwe Raabe 11. Apr 2018 12:28

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Zitat:

Zitat von günni0 (Beitrag 1398782)
Am liebsten wäre es mir natürlich, wenn meine ObjectList Records (mit class vars und class functions/procedures) aufnehmen könnte statt Klasseninstanzen.

Und warum nimmst du dann nicht eine TList<TMyRecord>?

günni0 11. Apr 2018 12:41

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Ich versuche es heute Nachmittag mal.
Schade nur, dass ich dann den Destructor verliere, oder ist dem nicht so?

Eigentlich bin ich ganz zufrieden so wie es jetzt ist.

himitsu 11. Apr 2018 13:17

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
warum Destructor verlieren?

In der Class-Function mußt du natürlich auch einmal den Constructor ausführen, um die Instanz zu erstellen, und bei deren Freigabe kommt dann der Destructor.
Aber du kannst in der Class-Funktion beim Fehler entweder die Anstanz garnicht erst erstellen oder sie gleich wieder freigeben und dann eben dein NIL zurück liefern.

Blup 11. Apr 2018 13:25

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Eigentlich gibt es doch nur diese beiden Grund-Varianten, abhängig davon wie der weitere Programmablauf sein soll:
Delphi-Quellcode:
procedure ErzeugeObjekte(AParams: TStrings);
var
  s: string;

{Vartiante1}
begin
  while s in APrams do
  begin
    try
      GenerischeTObjectList.Add(Klasse.Create(s));
    except
      {Excpetion loggen oder so}
    end;
  end;
end;

{Vartiante2}
begin
  try
    while s in APrams do
    begin
      GenerischeTObjectList.Add(Klasse.Create(s));
    end;
  except
    {Excpetion loggen oder so}
  end;
end;
In beiden Varianten wird im Fehlerfall die Liste nicht erweitert. Genau für solche Fälle ist eine Exception im Constuctor doch die richtige Lösung.

jaenicke 11. Apr 2018 15:34

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Eine einfache Variante wäre eine Factory-Klassenmethode TKlasse.TryGetInstance, dass die passenden Parameter bekommt. Nur, wenn diese erfolgreich zurückgibt, benutzt du die Instanz und fügst sie in die Liste hinzu. Dann kannst du auch die String Analyse aus dem Constructor herauslösen, weil es ja ohnehin in der Klassenmethode gekapselt ist.

günni0 11. Apr 2018 15:47

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Wie würde man so eine Factory-Klasse auf meinen Fall aufbauen?

freimatz 11. Apr 2018 15:57

AW: Constructor Rückgabewert nil-en statt Instanz zurückzugeben?
 
Zitat:

Zitat von günni0 (Beitrag 1398769)
... und das Erzeugen eines Threads. Mehr nicht.

Der war gut :bounce1:


Alle Zeitangaben in WEZ +1. Es ist jetzt 06:52 Uhr.
Seite 2 von 3     12 3      

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