EProgrammerNotFound excepción en Delphi?

132

En Delphi 2009, SysUtils.pas contiene esto en la línea 425:

EProgrammerNotFound = class(Exception);
  • ¿Es esto simplemente un huevo de pascua o algo serio?
  • ¿Cuándo debe plantearse esta excepción?
  • ¿Existe también en Delphi Prism y / o Free Pascal?

P: ¿Esta clase de excepción todavía se declara en Delphi (actualmente XE7)? A: Sí, ¡e incluso está documentado !

Manera no estándar de indicar fallas de software.

Puede usar EProgrammerNotFound como una alternativa para indicar fallas de software detectadas en tiempo de ejecución.

mjn
fuente
44
Esta excepción se ha mencionado recientemente en una respuesta sobre el Administrador de usuarios de Android . isUserAGoat () la función
Mjn
Creo que este patrón de diseño merece un nombre formal. Lo veo aquí también: YourCodeSucksException
Gungwald

Respuestas:

152

Es solo el resultado de un largo día y nos pusimos un poco mareados. Durante muchos, muchos años (desde que había estado en el equipo), siempre bromeamos acerca de reemplazar algún mensaje de error en el compilador por uno de los errores más comunes con un mensaje similar. Internamente, siempre bromeamos y nos burlamos de diferentes cosas y personas (principalmente en el propio equipo). Si no tienes sentido del humor, estás destinado a una tumba temprana.

Fue una conversación simple;

"Oh, deberías haber planteado la excepción EProgrammerNotFound en esa función".
"¡LOL! Deberíamos agregar esa excepción y ver quién se da cuenta".
"Me pregunto cuánta especulación habrá sobre por qué está ahí".

Entonces, supongo que todo lo que puedo decir es: "Todos ustedes han jugado directamente en nuestras manos; -) ... Buwahahaha! Pwned!"

Allen Bauer
fuente
9
¿No es esta la excepción más común en Tron?
LaKraven
1
Es bastante razonable tener tal excepción. Siempre considero esta excepción como ENotImplementedException
stanleyxu2005
66
@ stanleyxu2005, para eso puedes usar la ENotImplementedexcepción.
TLama
Tengo un encargo EProgrammerException. Estaba escribiendo el código para completar EProgr...cuando la información del código me mostró EProgrammerNotFound. Lamentablemente no puedo usar EProgrammerNotFound, ya que mi EProgrammerExceptiondesciende de EInvisibleException; ya que significaba un cruce entre un fallo de afirmación y una EAbortexcepción (atrapé a un programador que estaba arruinando algo, y voy a parar aquí).
Ian Boyd
24

Se utiliza junto con la tecnología "fix-inline" que requiere que el programador tenga que estar vinculado al archivo exe ;-)

Uwe Raabe
fuente
20

Fue introducido en Delphi 2009, todavía presente en Delphi 2010, y recientemente recibió más atención en Internet .

Creo que es un huevo de pascua, similar a " EBCAK " (Error entre la silla y el teclado), y la omisión de la versión 13 de Delphi .

EProgrammerNotFound

  • se declara en la rama Win32 de la unidad SysUtils, pero no se usa en ninguna parte del RTL o VCL
  • no está presente en Delphi Prism
  • se introdujo en Delphi 2009, por lo que no está presente en VCL.NET
  • actualmente (versión 3.5) no tiene nada similar en el marco .NET (no estoy seguro de por qué, estos tipos tienen humor )

No creo que EProgrammerNotFound esté destinado a usarse en absoluto, pero como está allí, la gente lo usará en broma (similar a poner un "const False = True; True = not False;" en el código fuente de alguien más).

--jeroen

Jeroen Wiert Pluimers
fuente
2
Hmm, el programador no es solo una persona, sino también un dispositivo (para programar, por ejemplo, flash de dispositivos integrados). ¿Huelo un iPhone aquí? No, entonces estaría en la fuente IDE, no en sysutils.
Marco van de Voort
8
EBCAK? Siempre lo escuché expresado como PEBKAC. (El problema existe entre el teclado y la silla).
Mason Wheeler
5

Es el tiempo de ejecución análogo del "error de sintaxis del compilador: se espera un programador". ;>

dthorpe
fuente
2
¡Deberías haber visto la compilación con las cadenas del compilador localizadas en Jive!
dthorpe
4

Es una especie de broma de autodescripción, puedes probar este código

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

o

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

Lo anterior funciona en Delphi 10 Seattle.

LaBracca
fuente
3

Con el programador, no se hace referencia al programador que está sentado detrás de Delphi. Creo que se usa por el hecho de que en D2009 y superiores planearon (nunca lo usaron, no sé si funciona) que cada objeto era esperable.

Ritsaert Hornstra
fuente
En realidad, es utilizable. Puede pasar cualquier objeto a TMonitor.Entery TMonitor.Exit. Y no estoy seguro de si es un huevo de Pascua o no ...
jpfollenius
1
¿Qué tiene que ver un objeto que se puede esperar con los programadores o si se encuentran? ¿Y a qué programador se hace referencia?
Rob Kennedy el
0

Soy programador, ¿soy una excepción que?

Marco Cantù también describe esto en su libro 'Delphi 2009 handbook' - página 242. Él dice que nunca se ha incluido en el código fuente de VCL.

Edelcom
fuente