![]() |
Re: Assertion
Folgender Code:
Delphi-Quellcode:
erzeugt folgende Messagbox:
procedure TForm1.Button1Click(Sender: TObject);
begin Assert(False, 'Foobar'); end; Zitat:
|
Re: Assertion
also um es mal klar zu stellen:
Assertions sollte man nur dann benutzen, wenn eine Bedingung im Programmablauf nie falsch sein darf. Zudem sollte man bedenken, dass ein Aufruf auf Assert lediglich eine Ueberpruefung sein sollte und kein Funktionsaufruf, kompiliert man das Projekt naemlich ohne Assertions, wuerde diese funktion niemals ausgefuehrt werden. Also bedingungen in Assertions duerfen niemals den Programmablauf beeinflussen, das Programm muss genauso funktionieren, wenn man den Assert() aufruf einfach weglassen wuerde.
Delphi-Quellcode:
Das waere zum Beispiel eine Anwendung, wenn auch etwas schwachsinnig in diesem Fall aber normalerweise sollte b in diesem Fall immer ungleich 0 sein (ist es auch), falls nicht stimmt etwas mit dem algo nicht.
var
a, b: Integer; begin a := 2 + Random(198); b := a div 2; // b ist demnach niemals 0, da a mindestens 2 ist Assert(b <> 0, 'Dieser Fehler darf niemals auftreten!'); end; Ein anderes Beispiel: RICHTIG:
Delphi-Quellcode:
FALSCH:
var
hash: String; begin ... hash := RegisterAndGenerateFileHash(hFile); // die Funktion sollte immer einen 8-stelligen String zurueckliefern, auch im Falle eines Fehlers Assert(hash <> '', 'RegisterAndGenerateFileHash() hat irgendwie einen leeren String zurueckgegeben!'); end;
Delphi-Quellcode:
Dieses Beispiel zeigt die falsche Anwendung von Assertions, da die Funktion RegisterAndGenerateFileHash niemals aufgerufen wuerde, wenn man das Projekt ohne Assertions kompiliert.
var
hash: String; begin ... // die Funktion sollte immer einen 8-stelligen String zurueckliefern, auch im Falle eines Fehlers Assert(RegisterAndGenerateFileHash(hFile) <> '', 'RegisterAndGenerateFileHash() hat irgendwie einen leeren String zurueckgegeben!'); end; |
Re: Assertion
Zitat:
Zitat:
|
Re: Assertion
Irgendwie wäre doch dein Beitrag GENAU das Richtige für die Code-Lib, oder nicht? :?:
|
Re: Assertion
@w3seek: Nee, sagt mir nix. Aber wie geht das denn, mit dem disassembling?
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:18 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