dedlfix: Methoden-Parameter: immer alles validieren?

Beitrag lesen

echo $begrüßung;

Und noch ein Wort zu Exceptions: Ich mag sie nicht. Sie trennen Fehlerbehandlung von Normalbehandlung, und das ist durchaus nicht so wundervoll, wie einem oft eingeredet wird. Erst dadurch entstehen nämlich so supertolle Meldungen wie "Ein unbekannter Fehler ist aufgetreten!", der weder dem Benutzer noch dem Programmierer noch irgendwas hilfreiches sagt.

Falscher Umgang mit bestimmten Techniken sollte nicht zu ihrer generellen Ablehnung führen. Das führt nur zu "X ist Mist" mit Begründungen wie: "weil die meisten Anwender damit nicht umgehen können". Spricht etwas dagegen, der Exception eine aussagekräftige Meldung und ebensolche begleitende Werte mit auf den Weg zu geben? Ein Exception-Objekt lässt sich im Gegensatz zu Funktionsergebnissen beliebig gestalten. Nicht in jeder Sprache kann man Typen unbeachtet lassen.

Fehlerzustände sollte man nicht "werfen", sondern abfangen und das Beste draus machen. Eine mögliche Definition von "das Beste" wäre beispielsweise ein Flag "ups, die Abfrage ist schiefgegangen, das gelieferte Resultat ist nur hilfsweise zu verstehen", zusammen mit einem gültigen, aber im Sinne des Kontextes "leeren" regulären Ergebnis.

Was wäre ein leeres reguläres Ergebnis einer Funktion, die einen Integerwert in voller Bandbreite zurückliefern darf? Du wirst jetzt sicher nicht mit 0 antworten, sonst verweise ich dich auf dein Thermometer-Beispiel. Null/None und dergleichen wäre in einer typsicheren Sprache ebenfalls kein gültiges Ergebnis der Funktion.

Beispielsweise geht die Datenbankabfrage schief. Das Ergebnis ist dann $ok=false, $data=array(). Mit dem Datensatz kann das abfragende Programm mit Sicherheit weiterarbeiten, leere DB-Ergebnisse können ja immer mal vorkommen. Es kann aber auch explizit den Abfrageerfolg ermitteln und dadurch verzweigen und den Fehlerfall vom Benutzer lösen lassen.

Und das soll mit mit Bedacht verwendeten Exceptions deiner Meinung nach nicht möglich sein?

Ich stimme mit dir überein, dass man den nächsten Verarbeitungsschritt  nur mit gültigen leeren Parametern angehen sollte. Man muss ihn aber auch komplett abbrechen können, wenn das Ergebnis unrettbar verloren ist und durch die Default-Werte nur noch falscher wird als es so schon ist.

echo "$verabschiedung $name";