EProgrammerNotFound Ausnahme in Delphi?


132

In Delphi 2009 enthält SysUtils.pas dies in Zeile 425:

EProgrammerNotFound = class(Exception);
  • Ist das einfach ein Osterei oder etwas Ernstes?
  • Wann sollte diese Ausnahme ausgelöst werden?
  • Existiert es auch in Delphi Prisma und / oder Free Pascal?

F: Ist diese Ausnahmeklasse noch in Delphi (derzeit XE7) deklariert? A: Ja, und es ist sogar dokumentiert !

Nicht standardmäßige Methode zur Anzeige von Softwarefehlern.

Sie können EProgrammerNotFound als Alternative verwenden, um zur Laufzeit erkannte Softwarefehler anzuzeigen.


4
Diese Ausnahme wurde kürzlich in einer Antwort zu Androids UserManager erwähnt . isUserAGoat () Funktion
mjn


Ich denke, dieses Designmuster verdient einen formalen Namen. Ich sehe es auch hier: YourCodeSucksException
Gungwald

Antworten:


152

Es ist nur das Ergebnis eines langen Tages und wir waren ein wenig schwindlig geworden. Viele, viele Jahre (seit ich im Team war) hatten wir immer darüber gescherzt, eine Fehlermeldung im Compiler durch einen der häufigsten Fehler durch eine ähnliche Meldung zu ersetzen. Intern haben wir uns immer über verschiedene Dinge und Leute lustig gemacht (meistens im Team selbst). Wenn Sie keinen Sinn für Humor haben, sind Sie zu einem frühen Grab bestimmt.

Es war ein einfaches Gespräch;

"Oh, Sie hätten die EProgrammerNotFound-Ausnahme in dieser Funktion auslösen sollen."
"LOL! Wir sollten diese Ausnahme hinzufügen und sehen, wer es bemerkt."
"Ich frage mich, wie viel darüber spekuliert wird, warum es dort ist?"

Also, ich denke alles was ich sagen kann ist: "Ihr habt alle direkt in unsere Hände gespielt; -) ... Buwahahaha! Pwned!"


9
Ist das nicht die häufigste Ausnahme in Tron?
LaKraven

1
Es ist durchaus vernünftig, eine solche Ausnahme zu haben. Ich betrachte diese Ausnahme immer als ENotImplementedException
stanleyxu2005

6
@ stanleyxu2005, dafür kannst du die ENotImplementedAusnahme verwenden.
TLama

Ich habe einen Brauch EProgrammerException. Ich habe den Code eingegeben, um ihn zu vervollständigen, EProgr...als mir Code Insight zeigte EProgrammerNotFound. Leider kann ich nicht verwenden EProgrammerNotFound, da meine EProgrammerExceptionAbstammung von EInvisibleException; wie es als Kreuzung zwischen einem Assertionsfehler und einer EAbortAusnahme bedeutete (ich habe einen Programmierer erwischt, der etwas vermasselt hat, und ich werde hier aufhören).
Ian Boyd

24

Es wird in Verbindung mit der "Fix-Inline" -Technologie verwendet, bei der der Programmierer in die exe-Datei eingebunden werden muss ;-)


20

Es wurde in Delphi 2009, noch in Delphi 2010 und führte vor kurzem haben einige mehr Aufmerksamkeit auf das Internet .

Ich denke, es ist ein Osterei, ähnlich wie " EBCAK " (Fehler zwischen Stuhl und Tastatur) und das Überspringen von Delphi Version Nummer 13 .

EProgrammerNotFound

  • wird im Win32-Zweig der SysUtils-Einheit deklariert, jedoch nirgendwo in der RTL oder VCL verwendet
  • ist im Delphi-Prisma nicht vorhanden
  • wurde in Delphi 2009 eingeführt, ist also in VCL.NET nicht vorhanden
  • hat derzeit (Version 3.5) nichts ähnliches im .NET Framework (nicht sicher warum, diese Jungs haben Humor )

Ich glaube nicht, dass EProgrammerNotFound überhaupt dazu gedacht ist, verwendet zu werden, aber da es dort ist, werden die Leute es scherzhaft verwenden (ähnlich wie das Einfügen eines Streuners "const False = True; True = not False;" in einen anderen Quellcode).

- Jeroen


2
Hmm, Programmierer ist nicht nur eine Person, sondern auch ein Gerät (zum Programmieren zB Flash von eingebetteten Geräten). Rieche ich hier ein IPhone? Naah, dann wäre es in der IDE-Quelle, nicht in Sysutils.
Marco van de Voort

8
EBCAK? Ich habe es immer als PEBKAC ausgedrückt hören. (Problem besteht zwischen Tastatur und Stuhl).
Mason Wheeler


5

Es ist das Laufzeitanalog des Compilers "Syntaxfehler: Programer erwartet". ;>


2
Sie sollten den Build mit den in Jive lokalisierten Compiler-Strings gesehen haben!
Dthorpe

4

Es ist eine Art selbstbeschreibender Witz, Sie können diesen Code ausprobieren

raise EProgrammerNotFound.Create('Jack is away');

oder

raise ENotImplemented.Create('May be in future this will work');

Das obige funktioniert in Delphi 10 Seattle.


3

Beim Programmierer wird nicht auf den Programmierer verwiesen, der hinter Delphi sitzt. Ich denke, es wird für die Tatsache verwendet, dass in D2009 und höher geplant wurde (nie verwendet, weiß nicht, ob es funktioniert), dass jedes Objekt wartbar war.


Eigentlich ist es verwendbar. Sie können jedes Objekt an TMonitor.Enterund übergeben TMonitor.Exit. Und ich bin nicht sicher, ob es ein Osterei ist oder nicht ...
jpfollenius

1
Was hat ein wartbares Objekt mit Programmierern zu tun oder ob sie gefunden werden? Und auf welchen Programmierer wird verwiesen?
Rob Kennedy

0

Ich bin ein Programmierer, bin ich eine Ausnahme als?

Marco Cantù beschreibt dies auch in seinem Buch 'Delphi 2009 handbook' - Seite 242. Er sagt, dass es im VCL-Quellcode nie verwendet wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.