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.


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!"


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 ;-)


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


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


5

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


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.


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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.