AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Object create -> nil

Ein Thema von Klaus01 · begonnen am 29. Jan 2008 · letzter Beitrag vom 30. Jan 2008
Antwort Antwort
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#1

Object create -> nil

  Alt 29. Jan 2008, 20:38
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
Klaus
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.171 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Object create -> nil

  Alt 29. Jan 2008, 20:39
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.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#3

Re: Object create -> nil

  Alt 29. Jan 2008, 20:53
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.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#4

Re: Object create -> nil

  Alt 29. Jan 2008, 20:58
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"?
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.755 Beiträge
 
Delphi 10.4 Sydney
 
#5

Re: Object create -> nil

  Alt 29. Jan 2008, 21:30
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
Klaus
  Mit Zitat antworten Zitat
Reinhard Kern

Registriert seit: 22. Okt 2006
772 Beiträge
 
#6

Re: Object create -> nil

  Alt 30. Jan 2008, 01:54
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
  Mit Zitat antworten Zitat
Benutzerbild von peschai
peschai

Registriert seit: 15. Feb 2004
Ort: Göppingen
270 Beiträge
 
Delphi XE5 Professional
 
#7

Re: Object create -> nil

  Alt 30. Jan 2008, 06:13
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. ->
Siehe auch Beitrag von alzaimar!
Peter Schaible
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:06 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