Ja, eine Abmahnung zum Beispiel !
Ich hatte mal ein mittelgroßes Projekt (ca. 200 Forms) übernommen, bei dem das grundsätzlich so gemacht wurde.
Die Anwender hatten sich daran gewöhnt nach einer durchgeführten Aktion noch mal zu prüfen ob es geklappt hatte.
Die Mitarbeiter in der Abteilung wunderten sich nur, warum immer wieder falsche, unvollständige oder defekte Datenbankeinträge da waren.
Da wurde jeden Tag auf der Datenbank "repariert".
Als ich das Projekt übernahm, habe ich alle
except end;
gesucht und entfernt.
Ergebnis:
Die Anwendung war unbenutzbar. Im Sekundentakt sind Fehlermeldungen aufgetreten.
Bei jedem Create eines Formulars ist eine GPF aufgetreten. (Fehler in der Basisklasse)
Viele Copy & Pase Fehler. (Ein Mal falsch gemacht und immer wieder kopiert.)
Durch einige einfache Suchen & Ersetzen Aktionen waren mehrere 100 Fehler weg.
Die Anwender mussten umlernen. Keine Fehlermeldung = hat geklappt.
Dafür gabs ab und zu Fehlermeldungen, die automatisch geloggt und abgearbeitet wurden.
Nach ein paar Monaten war es dann "fehlerfrei".
Und 2 Leute arbeitslos, da sie nicht mehr den ganzen Tag die Datenbank reparieren mussten
Ich hasse Programmierer die so was verwenden
FixInsight mahnt das zum Glück an.
Ich empfehle immer nur den "erwarteten" Fehler zu prüfen. Es kann ja immer etwas unerwartetes passieren
Delphi-Quellcode:
// Zahl in Value in MeinObjekt.IntegerProperty ablegen
procedure Beispiel(const Value: string);
begin
try
MeinObjekt.IntegerProperty := StrToInt(Value);
except
// Fehlerbehandlung wegen 'Zwei ist kein gültiger Integerwert.'
end;
end;
...
begin
Beispiel('Zwei');
end;
In unterem Beispiel wird ein String einer Integer Eigenschaft eines Objekts zugewiesen.
Der Programmierer hat daran gedacht, dass auch ungültige Zahlen wie z.B. "zwei" übergeben werden können.
Aber er geht davon aus , das MeinObjekt immer existiert. Was wenn MeinObjekt = Nil ist?
Das Beispiel unten würde dann zumindest eine
Exception (oder GPF) werfen.
Delphi-Quellcode:
// Zahl in Value in MeinObjekt.IntegerProperty ablegen
procedure Beispiel(const Value: string);
begin
try
MeinObjekt.IntegerProperty := StrToInt(Value);
except
on E: EConvertError do
begin
// Fehlerbehandlung wegen 'Zwei ist kein gültiger Integerwert.'
end;
end;
end;
...
begin
Beispiel('Zwei');
end;