AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Fehler vorbeugen vs Code aufblähen

Fehler vorbeugen vs Code aufblähen

Ein Thema von .chicken · begonnen am 24. Mär 2008 · letzter Beitrag vom 25. Mär 2008
Antwort Antwort
Seite 2 von 2     12
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#11

Re: Fehler vorbeugen vs Code aufblähen

  Alt 25. Mär 2008, 09:42
Werteabprüfung geht aber immer vor Exception!
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#12

Re: Fehler vorbeugen vs Code aufblähen

  Alt 25. Mär 2008, 09:52
Zitat von 3_of_8:
Naja, stell dir folgendes vor:

Du hast eine Klasse TWuppdiLoader, die eine Datei vom Typ Wuppdi Laden soll. In der Dateitypspezifikation steht eine CRC32-Prüfsumme. Die stimmt aber nicht mit der Datei überein. Was machst du da? Du könntest jetzt die Funktion beenden und einen Statuscode zurückgeben (z.B. ein Set mit den aufgetretenen Fehlern) oder ein Feld in der Klasse setzen. Aber was ist, wenn der Fehler in irgendeiner Funktion weit verschachtelt auftritt? Dann brauchst du nach jedem Funktionsaufruf sowas wie if FError then exit;

Da ist eine Exception mehr als angemessen, ich würde sogar sagen, für gute Programmierung unausweichlich.
Was spricht aber in dem Fall dagegen ganz oben die Exception abzufangen und in der obersten Funktion dann einen Fehlercode zurück zu geben. Auf diesen kann dann programmseitig auch noch eingegangen werden um ungültige eingaben nicht zu zulassen. Fände ich auf jeden fall besser als dem user die Exceptions um die Ohren zu werfen mit denen er am ende gar nichts anfangen kann.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#13

Re: Fehler vorbeugen vs Code aufblähen

  Alt 25. Mär 2008, 11:10
Es muss ein 3 stufiges Sicherheitsnetz geben:

1.) schon bei den Controls sollte man ungültige Benutzereingaben abfangen und gar nicht erst zulassen
Beispiel: verwendet man einen TDateTimePicker, kann man gar kein ungültiges Datum eingeben; im Gegensatz zu einem TEdit
Wenn man ein Editfeld hat, dass nur eine Zahl aufnehmen soll, kann man z.B. nur Ziffern als Eingabe zulassen oder TMaskEdit verwenden.

2.) Exceptions werden verwendet für alle Fehler, mit denen im Programmablauf gerechnet wird.
Dateien, die nicht geöffnet werden können. Datenbankabfragen, die schiefgehen können, ungültige/fehlende Eingabewerte,
u.s.w.
Dabei sollte man darauf achten, eine möglichst genaue Fehlermeldung zu produzieren.
Von der VCL werden manchmal sehr allgemeine Exceptions generiert (z.B. '' ist kein gültiger Integerwert | ungültige Variantumwandlung)
Diese allgemeinen Exceptions taugen natürlich gar nicht zur Fehlereingrenzung.
Deshalb sollte man regelmäsig Exception abfangen, mit Informationen anreichern und neu auslösen:
Delphi-Quellcode:
// Beispiel
try
  BerechneSteuer(IdKunde);
except
  on E: Exception do
  begin
    // eine informative Meldungen erzeugen
    E.Message := Format('Fehler bei der Steuerberechnung des Kunden %d'#13#10, [IdKunde]) +
      E.Message; // WICHTIG: die orginale Message anhängen.
    raise; // Exception neu auslösen
  end;
end;
3.) der letzte Rettungsanker sind Assertions.
Sie werden verwendet, ob um das Programm vor eigenen Programmierfehlern zu schützen.
Wenn man z.B. eine Funktion hat, die ein Objekt entgegennimmt, sollte man mit Assert sicherstellen,
dass nicht durch einen Programmierfehler ein nil-Zeiger übergeben wird.
Man fängt hier also Fehler ab, die eigentlich niemals auftreten dürften.
Es gilt die Devise: Vertrauen ist gut, Kontrolle ist besser.

Jedes Programm sollte eine Testphase durchlaufen.
Sobald eine Assertion auftritt, muss der Programmierer alles stehen und liegen lassen und die Ursache herausfinden!!

Tritt eine Assertion beim Test oder beim Endbenutzer auf, gibt es zwei Möglichkeiten:
a.) das Programm hat einen Bug
b.) der Programmierer hat eine Assertion verwendet, wo eigentlich eine Exception nötig gewesen wäre

In beiden Fällen ist eine Programmänderung notwendig.
Wenn das Programm gut ausgereift ist, dann darf man die Assertions in den Projektoptionen abschalten
und erhält das ein etwas schnelleres und kleineres Programm.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von phXql
phXql

Registriert seit: 11. Mär 2004
Ort: Mühldorf
824 Beiträge
 
#14

Re: Fehler vorbeugen vs Code aufblähen

  Alt 25. Mär 2008, 11:17
Shmia sagts.
Rückgabewerte sind veraltet und nicht mehr zu empfehlen, da sie ignoriert werden können.

Zu den Assertions: Nur private Methoden verwenden Assertions zur Prüfung der Argumente. Ist die Methode Public und erwartet sie ein Objekt, dann darf man nicht mit Assertions prüfen, ob es nil ist. Für sowas werden dann Exceptions verwendet.
Bei Assertions gilt: Werden nur verwendet, wenn ich GARANTIEREN kann, dass diese Assertion zutreffen wird, wenn der eigene Code richtig programmiert ist.
"Dunkel die andere Seite ist"
"Yoda! Halts Maul und iss deinen Toast!"
  Mit Zitat antworten Zitat
.chicken

Registriert seit: 5. Dez 2006
459 Beiträge
 
#15

Re: Fehler vorbeugen vs Code aufblähen

  Alt 25. Mär 2008, 11:17
Danke für die ausführliche Erläuterung
  Mit Zitat antworten Zitat
Benutzerbild von rollstuhlfahrer
rollstuhlfahrer

Registriert seit: 1. Aug 2007
Ort: Ludwigshafen am Rhein
1.529 Beiträge
 
Delphi 7 Professional
 
#16

Re: Fehler vorbeugen vs Code aufblähen

  Alt 25. Mär 2008, 14:15
noch was zu Asserts:

Zitat von Delphi Hilfe:
In der Regel werden Assertions nicht in Programmversionen verwendet, die zur Auslieferung vorgesehen sind. Deshalb wurden Compiler-Direktiven implementiert, mit denen die Generierung des zugehörigen Codes deaktiviert werden kann:
Dies steht unter dem Stichwort Assert

rollstuhlfahrer
Bernhard
Iliacos intra muros peccatur et extra!
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 00:01 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