AGB  ·  Datenschutz  ·  Impressum  







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

Objekt auf Übergabe prüfen.

Ein Thema von Popov · begonnen am 20. Jan 2014 · letzter Beitrag vom 20. Jan 2014
Antwort Antwort
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: Objekt auf Übergabe prüfen.

  Alt 20. Jan 2014, 14:19
So wäre es komplett richtig in diesem Kontext
Delphi-Quellcode:
function Test(sl: TStringList; Index: Integer): TObject;
begin
  // Ist Index OutOfRange wird eine Exception geworfen
  // gut so, denn dann ist bei diesem Befehl Schluss
  Result := sl.Objects[Index];
  
  // Hier liegt eine mögliche Fehlerquelle, und darum schmeissen wir eine Exception, wenn das nicht passt
  if sl.OwnsObjects and Assigned( Result ) then
    raise Exception.Create( 'Das kann ich nicht bei einer TStringList mit OwnsObjects!' );

  sl.Delete(Index);

  // Wenn bei der Rückgabe zwingend eine Instanz gefordert ist, dann kann hier nochmals eine Exception geworfen werden
  Assert( Assigned( Result ) );
  // Oder eben
  if not Assigned( Result ) then
    raise Exception.Create( 'Es wird keine Instanz zurückgeliefert, obwohl das so sein muss!' );
end;
Bei der Verwendung
Delphi-Quellcode:
procedure foo;
var
  LObj : TObject;
begin
  LObj := Test( MyStringList, 10 );
  // wenn eine Exception beim Aufruf von Test auftritt, dann wird das hier drunter auch nicht mehr ausgeführt
  try
    // Hier irgendwas mit LObj machen
  finally
    LObj.Free;
  end;
end;
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.666 Beiträge
 
Delphi 12 Athens
 
#2

AW: Objekt auf Übergabe prüfen.

  Alt 20. Jan 2014, 14:23
Noch richtiger wäre es IMO mit
Assert(Assigned(sl)); am Funktionsanfang.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#3

AW: Objekt auf Übergabe prüfen.

  Alt 20. Jan 2014, 14:43
Noch richtiger wäre es IMO mit
Assert(Assigned(sl)); am Funktionsanfang.
Nein, das ist in diesem Fall nicht notwendig, denn dann wird in der Test-Prozedur auch gleich zu Anfang eine Exception geworfen.
Problematisch sind ja immer nur die Fälle, wo die Exception nicht da auftritt, wo diese eigentlich verursacht wurde, denn dann kann man sich einen Wolf suchen.

Also wie in der Test-Prozedur, mit dem Delphi-Referenz durchsuchenTStringList.OwnsObjects.
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  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 05:49 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