Qt wiki will be updated on October 12th 2023 starting at 11:30 AM (EEST) and the maintenance will last around 2-3 hours. During the maintenance the site will be unavailable.

Exception Handling/de

From Qt Wiki
Jump to navigation Jump to search
This article may require cleanup to meet the Qt Wiki's quality standards. Reason: Auto-imported from ExpressionEngine.
Please improve this article if you can. Remove the {{cleanup}} tag and add this page to Updated pages list after it's clean.

Fehlercodes oder Ausnahmebehandlung, was ist besser?

Das hängt ganz davon ab ;)

"Schweinchen in der Mitte" – wie Funktionen sich dumm halten

(Anders als bei dem Ballspiel [de.wikipedia.org] fängt unser "Schweinchen" die Ausnahmen nie, aber Funktionen haben ja keine Gefühle – Gott sei Dank!)

Eigentlich wollte ich hier durch ein konkretes Anwendungsbeispiel motivieren. Das Beispiel, das mich selbst auf den Trichter brachte, ist nicht quelloffen, weshalb ich es nicht zitieren kann. Ich hoffe ein anwendbares Beispiel nachreichen zu können und beschränke mich hier zunächst auf die Darstellung des Prinzips.

Prinzip

Wenn A B aufruft und B eine Funktion C aufruft, die formal und (hinsichtlich der "gut"-Fälle) semantisch in B bekannt ist, deren tatsächliche Implementierung aber durch A ausgewählt wird, dann können wir B unter Einsatz von Ausnahmen frei vom Wissen über Fehler halten, die in der tatsächlichen Implementierung von C (nennen wir sie D) auftreten, aber nicht in die Semantik von C passen.

Ich bin bemüht, das hier letztlich so einfach und verständlich wie möglich zu formulieren und damit längst nicht am Ziel. Klagen und Anregungen sind willkommen.

Notizen und Material

  • Anwendbarkeit z.B. zur Trennung medien- und inhaltsspezifischen Funktionen bei Eingaben
  • wenn hier Quelltext, dann: verständlich, knapp, getestet
  • Wissen des Aufrufers bleibt auf die Gut-Fälle beschränkt, nur die äußere Steuerung kennt (manche) Fehlerfälle.
  • doppelte Verschachtelung auf dem Aufruf-Stack: a1->b1->a2->b2
  • Grundlage: indirekte Aufrufe mittels virtueller Methoden (ja, das geht auch mit Funktionszeigern)
  • (Bemerkung: Der überraschende Qualitätsübergang erinnert stark an den "Knall-Effekt" der bei Minimax [de.wikipedia.org] durch den Einsatz von Alpha- /Beta-Abschneidungen [de.wikipedia.org] eintritt: AlphaBetaCut)