![]() |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Und jetzt könnte man wieder wild darüber debatieren, ob der Aufrufer von
Delphi-Quellcode:
gezwungen sein sollte, die offensichtlich zu erwartenden EArgumentNull und EArgumentOutOfRange-Exception zu behandeln oder selbst kenntlich zu machen, dass er diese werfen könnte. 8-)
ScaleBmp
Macht das den Code lesbarer? |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Delphi-Quellcode:
deklariert, weil es für diesen konkreten Fall benutzt wird.
NaNComputation
Ob man Exceptions oder NullObjekt verwendet, hängt eben davon ab, ob es eine Ausnahme (falscher Zugriff) oder gewöhnlicher Anwendungsfall ist. Exception weil ich die Grenzen beachten muss
Delphi-Quellcode:
NullObjekt
type
TMyList = class property Count; property Items[Index : Integer] : TItem read GetItem; end; function TMyList.GetItems(Index : Integer) : TItem; begin if Index >= Count then raise Exception; Result := ... end; Im Hauptmenü gibt es den Menü-Punkt Drucken aber das Drucken wird nicht an jeder Stelle unterstützt (weil da gibt es nichts zum Drucken oder ist noch nicht implementiert oder das Druckmodul wurde nicht gekauft). Die Aktion aus dem Hauptmenü holt sich trotzdem mit
Delphi-Quellcode:
den Eintrag und bekommt eben mal ein echtes Objekt oder eben das NullObjekt.
CommandHandler.Command['print']
Exceptions wären hier kontraproduktiv und eine Überprüfung von aussen macht die Verdrahtung aufwendiger. Hier kann jeder beliebige Befehl im Menü verdrahtet werden und die Implementierung kann erfolgen wann will.
Delphi-Quellcode:
ICommand = interface
function CanExecute : Boolean; procedure Execute; end; TCommandHandler = class property Command[const Name : string] : ICommand read GetCommand; end; function TCommandHandler.GetCommand( const Name : string ) : ICommand; begin if not FCommands.Contains( Name ) then Result := NullComand.Create else Result := FCommands[Name]; end; NullCommand = class( TInterfacedObject, ICommand ) function CanExecute : Boolean; procedure Execute; end; function NullCommand.CanExecute : Boolean begin Result := False; end; procedure NullCommand.Execute; begin end; |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Eine Bitmapreferenz, die nil ist, kann skaliert auch wieder eine nil-Referenz ergeben ohne dass ein Fehler vorliegt. Wenn dieser Wert vorher erlaubt ist, warum sollte eine Skalierungsfunktion dann dieses Verhalten ändern? Denn ist es nicht erlaubt, hätte es bereits vorher geprüft werden müssen. Insofern gibt es immer mehrere Möglichkeiten, die von den Vorgaben abhängen. Es sollte nur innerhalb einer Klassenbibliothek konsistent sein. |
AW: Best Practice: Wann verwendet ihr Exceptions in Funktionen?
Zitat:
Delphi-Quellcode:
Procedure TMyStuff.ScaleBitmap(aBitmap : TBitmap...);
Begin CheckNull(aBitMap,'TMyStuff.ScaleBitmap: aBitmap'); ... Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:29 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