Thema: Delphi IsObject / IsClass

Einzelnen Beitrag anzeigen

Benutzerbild von negaH
negaH

Registriert seit: 25. Jun 2003
Ort: Thüringen
2.950 Beiträge
 
#22

Re: IsObject / IsClass

  Alt 22. Nov 2005, 08:59
Naja, primär hatte ich IsObject() entwickelt weil es sicherer als der Operator is ist. Wird is auf ein falsches Objekt angewendet dann ist garantiert das es AVs hagelt. IsObject() macht nun eigentlich das was ich vom is Operator erwartet hätte, es erzeugt keine AVs sondern kehrt in diesem Falle mit FALSE zurück.

Man muß sich mal die Verwendung vom is Operator vergegenwärtigen:

Delphi-Quellcode:
  
if Variable is TMyClass then
aus meiner Sicht darf in einem solchen Konstrukt KEINE Exception ausgelösst werden. IsObject() ist also als "safer Replacement" vom is Operator gedacht.

Ein Programmierer der also sowas wie oben abfragen möchte interessiert sich primär nur für EINE Sache, nämlich "ist in Variable ein Objekt der Klasse TMyClass ?" und nicht "ist in Variable ein Objekt von TMyClass ? oder wenn es garkein gültiges Objekt ist dann erzeuge mit Pi*Daumen Wahrscheinlichkeit eine Exception".

Das eine ist eine EINDEUTIGE Frage im Source, das andere ist eine mehrdeutige ANTWORT mit dem Seiteneffekt einer dritten ungewollten Programmverzweigung per Exception.

IsObject() korregiert nun dieses unsaubere Verhalten. Klar, man kann sich darüber streiten was nun die Ursachen sind, diese sind mir aber im wahrsten Sinne Wurst, mich interessiert nur die Zielsetzung. Ergo: muss ich immer davon ausgehen das ich aufbauend auf schlechteren Source meine Ziele erreichen muß, ist einfach mal aus praktischen Erwägungen heraus so notwendig.

Denn wie sähe die korrekte Alternative denn aus ?

Delphi-Quellcode:
var
  Korrekt: Boolean;
begin
  try
    Korrekt := Variable is TMyClass;
  except
    Korrekt := False;
  end;
  if Korrekt then ;
end;
also ziemlich unübersichtlich und aufwändig, denn daswäre bei jeder is Abfrage notwendig. Im Grunde macht IsObject() nur sowas wie oben, halt mit einigen kleineren zusätzlichen Verbeserungen.

Gruß Hagen
  Mit Zitat antworten Zitat