EProgrammerNotFound exception dans Delphi?

132

Dans Delphi 2009, SysUtils.pas contient ceci à la ligne 425:

EProgrammerNotFound = class(Exception);
  • Est-ce simplement un œuf de Pâques ou quelque chose de grave?
  • Quand cette exception doit-elle être levée?
  • Existe-t-il également dans Delphi Prism et / ou Free Pascal?

Q: Cette classe d'exception est-elle toujours déclarée dans Delphi (actuellement XE7)? R: Oui, et c'est même documenté !

Manière non standard d'indiquer les défauts du logiciel.

Vous pouvez utiliser EProgrammerNotFound comme alternative pour indiquer les défauts logiciels détectés au moment de l'exécution.

mjn
la source
4
Cette exception a récemment été mentionnée dans une réponse sur Androids UserManager . isUserAGoat () fonction
MJN
Je pense que ce modèle de conception mérite un nom formel. Je le vois ici aussi: YourCodeSucksException
Gungwald

Réponses:

152

C'est juste le résultat d'une longue journée et nous étions un peu étourdis. Pendant de très nombreuses années (depuis que je faisais partie de l'équipe), nous avions toujours plaisanté sur le remplacement d'un message d'erreur dans le compilateur pour l'une des erreurs les plus courantes par un message similaire. En interne, nous avons toujours plaisanté et nous sommes moqués de différentes choses et personnes (principalement de l'équipe elle-même). Si vous n'avez pas le sens de l'humour, vous êtes destiné à une tombe précoce.

C'était une simple conversation;

"Oh, vous auriez dû lever l'exception EProgrammerNotFound dans cette fonction."
"LOL! Nous devrions ajouter cette exception et voir qui le remarque."
"Je me demande combien il y aura de spéculations sur la raison pour laquelle c'est là?"

Donc, je suppose que tout ce que je peux dire, c'est: "Vous avez tous joué entre nos mains; -) ... Buwahahaha! Pwned!"

Allen Bauer
la source
9
N'est-ce pas l'exception la plus courante à Tron?
LaKraven
1
Il est tout à fait raisonnable d'avoir une telle exception. Je considère toujours cette exception comme ENotImplementedException
stanleyxu2005
6
@ stanleyxu2005, pour cela, vous pouvez utiliser l' ENotImplementedexception.
TLama
J'ai une coutume EProgrammerException. J'étais en train de taper le code à compléter EProgr...lorsque la perspicacité du code m'a montré EProgrammerNotFound. Malheureusement, je ne peux pas utiliser EProgrammerNotFound, car mon EProgrammerExceptiondescend de EInvisibleException; comme cela signifiait comme un croisement entre un échec d'assertion et une EAbortexception (j'ai surpris un programmeur en train de bousiller quelque chose, et je vais m'arrêter ici).
Ian Boyd
24

Il est utilisé en conjonction avec la technologie "fix-inline" qui nécessite que le programmeur soit lié au fichier exe ;-)

Uwe Raabe
la source
20

Il a été introduit dans Delphi 2009, toujours présent dans Delphi 2010, et a récemment obtenu un peu plus d' attention sur Internet .

Je pense que c'est un œuf de Pâques, similaire à " EBCAK " (Erreur entre chaise et clavier), et le saut du numéro de version 13 de Delphi .

EProgrammerNotFound

  • est déclaré dans la branche Win32 de l'unité SysUtils, mais n'est utilisé nulle part dans le RTL ou la VCL
  • n'est pas présent dans Delphi Prism
  • a été introduit dans Delphi 2009, donc pas présent dans VCL.NET
  • n'a actuellement (version 3.5) rien de similaire dans le framework .NET ( je ne sais pas pourquoi, ces gars -là ont de l'humour )

Je ne pense pas que EProgrammerNotFound soit en fait destiné à être utilisé, mais comme il est là, les gens l'utiliseront en plaisantant (comme si l'on mettait un "const False = True; True = not False;" dans un autre code source).

--jeroen

Jeroen Wiert Pluimers
la source
2
Hmm, le programmeur n'est pas seulement une personne, mais aussi un appareil (pour programmer par exemple le flash des appareils embarqués). Est-ce que je sens un iPhone ici? Naah, alors ce serait dans la source IDE, pas dans sysutils.
Marco van de Voort
8
EBCAK? Je l'ai toujours entendu s'exprimer comme PEBKAC. (Un problème existe entre le clavier et la chaise).
Mason Wheeler
11

L'origine est discutable, mais elle est connue depuis un moment ...
Marco Cantu a plaisanté à ce sujet lors d'une session "Fun Side of Delphi".
IMO, il devrait être utilisé plus souvent ;-)

Lire sur:
http://wings-of-wind.com/2010/01/12/best-programming-feature-ever/
http://blog.barrkel.com/2008/11/reference-counted-pointers-revisited .html

PS: Je ne pense pas que cela existe en Delphi Prism, FreePascal ou C # (mais ça devrait). <G>

Francesca
la source
5

C'est l'analogue d'exécution de «Erreur de syntaxe: programmeur attendu» du compilateur. ;>

dthorpe
la source
2
Vous devriez avoir vu la construction avec les chaînes du compilateur localisées dans Jive!
dthorpe
4

C'est une sorte de blague auto-descriptive, vous pouvez essayer ce code

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

ou

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

Ce qui précède fonctionne dans Delphi 10 Seattle.

LaBracca
la source
3

Avec le programmeur, ce n'est pas le programmeur assis derrière Delphi qui est référencé. Je pense qu'il est utilisé pour le fait que dans D2009 et au-dessus, ils ont prévu (jamais utilisé, je ne sais pas si cela fonctionne) que chaque objet était attendable.

Ritsaert Hornstra
la source
En fait, il est utilisable. Vous pouvez transmettre n'importe quel objet à TMonitor.Enteret TMonitor.Exit. Et je ne sais pas si c'est un œuf de Pâques ou pas ...
jpfollenius
1
Qu'est-ce qu'un objet en attente a à voir avec les programmeurs ou s'ils sont trouvés? Et quel programmeur est référencé?
Rob Kennedy
0

Je suis programmeur, suis-je une exception?

Marco Cantù décrit également cela dans son livre «Manuel Delphi 2009» - page 242. Il dit que cela n'a jamais été justifié dans le code source de la VCL.

Edelcom
la source