Fehlerbehandlung in Java Wie Exceptions missbraucht werden (können) Exceptions und Lambdas in Java 8? Modellierung von Exceptions mittels Validation Lars Hupel Ausnahmslos? 25. Februar 2012 3 / 32
Java setzt vollständig auf Exceptions Unterscheidung: checked/unchecked Checked exceptions müssen deklariert oder abgefangen werden Lars Hupel Ausnahmslos? 25. Februar 2012 7 / 32
Spec § 4.7.4 “A method should throw an exception only if at least one of the following three criteria is met: 1. The exception is an instance of RuntimeException [...] 2. The exception is an instance of Error [...] 3. The exception is [...] specified in the exception_index_table [...] These requirements are not enforced in the Java virtual machine; they are enforced only at compile time.” Lars Hupel Ausnahmslos? 25. Februar 2012 9 / 32
Exceptions unterliegen Type Erasure catch-Block im Wesentlichen instanceof-Test Exceptions dürfen nicht generisch sein Lars Hupel Ausnahmslos? 25. Februar 2012 11 / 32
Java if (tree instanceof Leaf) { ((Leaf) tree).getValue() } kein Exhaustiveness-Check tree behält den Typ Tree Compiler kann Korrektheit nicht prüfen Lars Hupel Ausnahmslos? 25. Februar 2012 12 / 32
Java if (tree instanceof Leaf) { ((Leaf) tree).getValue() } kein Exhaustiveness-Check tree behält den Typ Tree Compiler kann Korrektheit nicht prüfen Lars Hupel Ausnahmslos? 25. Februar 2012 12 / 32
Java Im Vergleich dazu: catch (IOException ex) { ex.printStackTrace(); } Exhaustiveness-Check im Catch-Block hat ex den Typ IOException Compiler prüft Korrektheit Lars Hupel Ausnahmslos? 25. Februar 2012 13 / 32
Java Im Vergleich dazu: catch (IOException ex) { ex.printStackTrace(); } Exhaustiveness-Check im Catch-Block hat ex den Typ IOException Compiler prüft Korrektheit Lars Hupel Ausnahmslos? 25. Februar 2012 13 / 32
F<? super T, ? extends R, ? extends E> T verhält sich kontravariant R und E verhalten sich kovariant F#f liefert entweder R oder E Lars Hupel Ausnahmslos? 25. Februar 2012 16 / 32
F<? super T, ? extends R, ? extends E> T verhält sich kontravariant R und E verhalten sich kovariant F#f liefert entweder R oder E Lars Hupel Ausnahmslos? 25. Februar 2012 16 / 32
interface F<T, R, E extends Throwable> { Either<E, R> f(T t); } Either<E, R> ist ein Interface mit genau zwei Subklassen: 1. Left<E> für den Fehlerfall 2. Right<R> für den Erfolgsfall Lars Hupel Ausnahmslos? 25. Februar 2012 17 / 32
muss Either anbieten? eine Funktion im Erfolgsfall anwenden eine Funktion im Fehlerfall anwenden einen Defaultwert zurückgeben eine Funktion anwenden, die fehlschlagen kann Lars Hupel Ausnahmslos? 25. Februar 2012 18 / 32
Either Fälle: Failure und Success für Validation kann map definiert werden aber: was ist M[_]? ({ type λ[α] = Validation[E, α]})#λ Lars Hupel Ausnahmslos? 25. Februar 2012 22 / 32
Either Fälle: Failure und Success für Validation kann map definiert werden aber: was ist M[_]? ({ type λ[α] = Validation[E, α]})#λ Lars Hupel Ausnahmslos? 25. Februar 2012 22 / 32
Either Fälle: Failure und Success für Validation kann map definiert werden aber: was ist M[_]? ({ type λ[α] = Validation[E, α]})#λ Lars Hupel Ausnahmslos? 25. Februar 2012 22 / 32
Either Fälle: Failure und Success für Validation kann map definiert werden aber: was ist M[_]? ({ type λ[α] = Validation[E, α]})#λ Lars Hupel Ausnahmslos? 25. Februar 2012 22 / 32
Eingabewerten, Produzieren eines Ausgabewerts beim Sammeln können Fehler auftreten schlecht: “Fail fast” besser: alle Fehler sammeln, dann melden Lars Hupel Ausnahmslos? 25. Februar 2012 23 / 32
Eingabewerten, Produzieren eines Ausgabewerts beim Sammeln können Fehler auftreten schlecht: “Fail fast” besser: alle Fehler sammeln, dann melden Lars Hupel Ausnahmslos? 25. Februar 2012 23 / 32
stellt eine Halbgruppe dar, wenn dieser eine zweistellige Operation ◦ anbietet für die gilt: a ◦ (b ◦ c) = (a ◦ b) ◦ c (Assoziativität) Lars Hupel Ausnahmslos? 25. Februar 2012 25 / 32
handling is just an applicative functor on a partially applied disjoint union type constructor with semigroup error elements so what’s the big deal?” – Tony Morris Lars Hupel Ausnahmslos? 25. Februar 2012 31 / 32