Exceção EProgrammerNotFound no Delphi?


132

No Delphi 2009, o SysUtils.pas contém isso na linha 425:

EProgrammerNotFound = class(Exception);
  • Isso é simplesmente um ovo de páscoa ou algo sério?
  • Quando essa exceção deve ser levantada?
  • Também existe no Delphi Prism e / ou Free Pascal?

P: Essa classe de exceção ainda está declarada no Delphi (atualmente XE7)? A: Sim, e até está documentado !

Maneira não padrão de indicar falhas de software.

Você pode usar o EProgrammerNotFound como uma alternativa para indicar falhas de software detectadas no tempo de execução.


4
Esta exceção foi mencionada recentemente em uma resposta sobre o AndroidManager do Android . ) isUserAGoat ( função
MJN


Eu acho que esse padrão de design merece um nome formal. Vejo-o aqui também: YourCodeSucksException
Gungwald

Respostas:


152

É apenas o resultado de um longo dia e ficamos um pouco tontos. Por muitos e muitos anos (desde que eu fazia parte da equipe), sempre brincávamos em substituir alguma mensagem de erro no compilador por um dos erros mais comuns por uma mensagem semelhante. Internamente, sempre brincamos e zombamos de coisas e pessoas diferentes (principalmente do próprio time). Se você não tem senso de humor, está destinado a um túmulo precoce.

Foi uma conversa simples;

"Ah, você deveria ter gerado a exceção EProgrammerNotFound nessa função."
"LOL! Devemos adicionar essa exceção e ver quem nota."
"Eu me pergunto quanta especulação haverá sobre o porquê de estar lá?"

Então, acho que tudo o que posso dizer é: "Vocês todos jogaram direto em nossas mãos; -) ... Buwahahaha! Pwned!"


9
Essa não é a exceção mais comum em Tron?
precisa saber é o seguinte

1
É bastante razoável ter essa exceção. Eu sempre considerar essa exceção como ENotImplementedException
stanleyxu2005

6
@ stanleyxu2005, para isso você pode usar a ENotImplementedexceção.
TLama

Eu tenho um costume EProgrammerException. Eu estava digitando o código para concluir EProgr...quando o insight do código me mostrou EProgrammerNotFound. Infelizmente eu não posso usar EProgrammerNotFound, como meu EProgrammerExceptiondescende EInvisibleException; pois isso significava um cruzamento entre uma falha de declaração e uma EAbortexceção (eu peguei um programador estragando algo e vou parar por aqui).
Ian Boyd

24

É usado em conjunto com a tecnologia "fix-inline", que requer que o programador seja vinculado ao arquivo exe ;-)


20

Foi introduzido no Delphi 2009, ainda presente no Delphi 2010, e recentemente recebeu mais atenção na internet .

Eu acho que é um ovo de páscoa, semelhante ao " EBCAK " (erro entre cadeira e teclado), e o pulo da versão número 13 do Delphi .

EProgrammerNotFound

  • é declarado na ramificação Win32 da unidade SysUtils, mas não é usado em nenhum lugar na RTL ou na VCL
  • não está presente no Delphi Prism
  • foi introduzido no Delphi 2009, portanto, não está presente no VCL.NET
  • atualmente (versão 3.5) não tem nada parecido no framework .NET (não sabe por que, esses caras têm humor )

Eu não acho que o EProgrammerNotFound realmente seja para ser usado, mas como ele está lá, as pessoas o brincam (de forma semelhante a colocar um "const False = True; True = not False;" perdido em alguém do código fonte).

--jeroen


2
Hmm, programador não é apenas uma pessoa, mas também um dispositivo (para programação, por exemplo, flash de dispositivos incorporados). Sinto o cheiro de um iPhone aqui? Naah, então seria na fonte IDE, não sysutils.
Marco van de Voort

8
EBCAK? Eu sempre ouvi isso expresso como PEBKAC. (Existe um problema entre o teclado e a cadeira).
Mason Wheeler


5

É o análogo do tempo de execução do "Erro de sintaxe: o programador é esperado". ;>


2
Você deveria ter visto a compilação com as seqüências de caracteres do compilador localizadas no Jive!
Dthorpe 5/07

4

É uma espécie de piada auto-descritiva, você pode tentar este código

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

ou

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

O acima funciona em Delphi 10 Seattle.


3

Com o programador, não é o programador que está sentado atrás do Delphi que é referenciado. Eu acho que é usado pelo fato de que no D2009 e acima eles planejaram (nunca usaram, não sabem se funciona) que todos os objetos eram esperáveis.


Na verdade, é utilizável. Você pode passar qualquer objeto para TMonitor.Entere TMonitor.Exit. E eu não tenho certeza se é um ovo de Páscoa ou não ...
jpfollenius

1
O que um objeto aguardável tem a ver com os programadores ou se eles são encontrados? E qual programador está sendo referenciado?
Rob Kennedy

0

Eu sou um programador, sou uma exceção do que?

Marco Cantù também descreve isso em seu livro 'Manual do Delphi 2009' - página 242. Ele diz que nunca foi usado no código-fonte da VCL.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.