Hi Daniel,
Im Gegenteil. Wo immer ich die Möglichkeit sehe, ein Häufchen thematisch abgeschlossenen Code in eine Funktion auszulagern, dann tu ich das - außer wenn ich dieses Stück Programmcode dann wieder nur einmal nutze. In diesem Fall lasse ich's lieber inline.
Ich meinte nicht, dass Du Dein Programm nicht strukturierst. Mit "Funktionalem Programmierstil" meinte ich etwas, wie es im Extremfall in funktionalen Sprachen auftritt.
also eher das konsequente Schema
Ergebnis = Funktion(Argumentliste)
im mathematischen Sinn einer Funktion?
[Codebeispiel]
Hier findet jetzt auch noch die besagte Vermischung von Fehlercode und Daten statt.
Genau. Wir waren uns ja schon einig, dass diese Vermischung böse[tm] ist.
~~~
if (error=FunctionThatMightFail())
{ // z.B. Aufruf einer zentralen Fehlerbehandlung
// oder Abfrage mit switch (error)
}
// weiter im normalen Programmfluss
> Ja, genau diese Konstrukte sind die, die den Code kompliziert machen. Wenn man sie tatsächlich braucht, sind Exceptions ja wie gesagt gleichwertig verwendbar.
Das ist deine Meinung, die sollst du bitte auch haben - ich finde, wie gesagt, die andere Variante leichter nachzuvollziehen. Aber ich habe ja schon öfter erwähnt, dass ich für gewöhnlich annähernd auf CPU-Ebene denke. Immerhin war 6502-Assembler für mich die Einstiegsdroge in die Welt des Programmierens. Hochsprachen wie Pascal und C habe ich erst sehr viel später gelernt, sehe aber in Gedanken immer noch in etwa den Maschinencode, der meinen C-Anweisungen entspricht.
> > Das sollte man natürlich vermeiden - oder man muss \*ganz genau\* wissen, was man tut.
> Menschen machen Fehler, entweder schlicht aus Unwissen, aufgrund schlechter Dokumentation eines Moduls oder eben einfach, weil es jedem manchmal passiert. Entscheidend ist also, was im Fehlerfall passiert.
Richtig. Mit dem "ganz genau wissen" meinte ich, dass man bei genauer Kenntnis des verwendeten Codes auch ein kontrollierbares Verhalten im Fehlerfall ausnutzen kann. Das ist zwar nicht die feine Art, wird aber gelegentlich gemacht.
> Eine Exception führt jedenfalls dazu, dass man den Ort mit falscher/fehlender Fehlerbehandlung gut lokalisieren kann.
Kann man? Man weiß nur, \*dass\* irgendwo im try-Block ein Fehler aufgetreten ist, aber nicht genau wo und warum.
> > > Was machst Du, wenn Du eine Datei in einem Programm lesen musst, aber das nicht kannst? Musst Du da nicht aus dem regulären Kontrollfluss ausbrechen?
> So besser? ;-)
Ja, so besser. :-)
Natürlich muss ich dann (vermutlich) aus dem normalen Ablauf ausbrechen. Ich meinte aber eigentlich das Lesen und Nachvollziehen des Programmcodes, nicht das Ausführen. Für die CPU ist es herzlich wurscht, welche Technik ich verwende, weil der daraus resultierende Code doch immer irgendwie ähnlich ist.
Ciao,
Martin
--
Arzt: Gegen Ihr Übergewicht hilft wohl nur noch Gymnastik.
Patient: Sie meinen, Kniebeugen und so?
Arzt: Nein, Kopfschütteln. Immer dann, wenn Ihnen jemand was zu essen anbietet.