Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Object create -> nil (https://www.delphipraxis.net/107561-object-create-nil.html)

Klaus01 29. Jan 2008 20:38


Object create -> nil
 
Guten Abend,

ich habe ein Object ähnlich dem folgenden definiert.

Delphi-Quellcode:
type
  TMyObject = class
    privat
      function checkSomeThing:Boolean;
    public
     constructor create;
     destructor destroy; override;
  end;
Der constructor create schaut dem ähnlich.

Delphi-Quellcode:
constructor TMyObject.create;
begin
  inherited;
  if checkSomeThing then
    begin
      // do some initial things
    end
  else
    begin
      // delete object and return nil
    end;
end;
Was ich möchte ist, dass create nil wird wenn
checkSomeThing false liefert.

Wie kann ich das machen?

Wenn ich in den else Zweig inherited destroy schreibe
wird weiterhin ein Pointer auf das Object zurückgeliefert.

Ich würde aber gerne im nachfolgenden Code
mit

Delphi-Quellcode:
if assigned(MyObject) then
 // ...
else
 // ...
Sieht da jemand eine Möglichkeit wie das zu realisieren wäre?

Grüße
Klaus

Bernhard Geyer 29. Jan 2008 20:39

Re: Object create -> nil
 
Zitat:

Zitat von Klaus01
Was ich möchte ist, dass create nil wird wenn
checkSomeThing false liefert.

Exeption auslösen und das ganze über eine Class-Factory erledigen lassen.

alzaimar 29. Jan 2008 20:53

Re: Object create -> nil
 
In einem Konstruktor hat imho die Logik nix zu suchen.

Instantiiere das Objekt, prüfe ob es legal ist und schmeiss es weg.
Oder erledige die Prüfung vorher über eine Class Function.

Ich meine, ich fang doch nicht an, mir eine Pizza zu machen, wenn ich dann feststelle, das kein Käse da ist. Entweder will ich ne Pizza machen (Instantiierung), Checke die Zutaten (Prüfung) und verwerfe ggf. meinen Plan (Destroy), oder ich prüfe (Class Function), ob alle Zutaten für die Pizza vorhanden sind und mache mich DANN ggf. ans Werk (Instantiierung).

Grad heute hatten wir eine solche Grundlagendiskussion. Unser Fazit: Logik raus aus dem Konstruktor.

Eine Class Factory ist in jedem Fall auch eine Alternative und auch besser geeignet, die Logik (Soll ich? Soll ich nicht?) zu kapseln.

Namenloser 29. Jan 2008 20:58

Re: Object create -> nil
 
Du könntest eine class function benutzen. In der function erzeugst du das Objekt (result) dann ganz normal, kannst aber auch nil setzen weil es ja in deiner Hand liegt, was du mit dem result machst.

Oder wäre das eine "Class Factory"? :oops:

Klaus01 29. Jan 2008 21:30

Re: Object create -> nil
 
Danke für die Hinweise,

ich habe das ersteinmal mit eine Class function gelöst.
Werde mir aber auch noch die Class factory genauer anschauen.

Gute Nacht
Klaus

Reinhard Kern 30. Jan 2008 01:54

Re: Object create -> nil
 
Zitat:

Zitat von Klaus01
Was ich möchte ist, dass create nil wird wenn
checkSomeThing false liefert.

Hallo,

du kannst ja eine normale (Klassen-)Funktion dafür verwenden und Create darin aufrufen:

Delphi-Quellcode:
function TMaybe.CreateOrNot : TMaybe;
begin
if CheckSomething then Result := Create else Result := nil;
end;
Hab ich allerdings so noch nicht getestet.
Gruss Reinhard

peschai 30. Jan 2008 06:13

Re: Object create -> nil
 
Hallo
Es gab da mal früher, eventuell heute noch, die Standardprozedur "FAIL" welche nur innerhalb eines Konstructors aufgerufen werden durfte und selbigen Konstruktor "abbrach" ... Also bei Interesse in der Hilfe nachschauen.
...aber... Ich persönlich halte davon NICHTS, weil das meiner Meinung nach ein schlechter Programmierstil ist. ->
Delphi-Quellcode:
Siehe auch Beitrag von alzaimar!


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