EProgrammerNotFound eccezione in Delphi?


132

In Delphi 2009, SysUtils.pas contiene questo nella riga 425:

EProgrammerNotFound = class(Exception);
  • È semplicemente un uovo di Pasqua o qualcosa di serio?
  • Quando dovrebbe essere sollevata questa eccezione?
  • Esiste anche in Delphi Prism e / o Free Pascal?

D: Questa classe di eccezioni è ancora dichiarata in Delphi (attualmente XE7)? A: Sì, ed è persino documentato !

Modo non standard per indicare i guasti del software.

È possibile utilizzare EProgrammerNotFound come alternativa per indicare i guasti del software rilevati in fase di esecuzione.


4
Questa eccezione è stata recentemente citata in una risposta su Androids UserManager . isUserAGoat) ( funzione
MJN


Penso che questo modello di design meriti un nome formale. Lo vedo anche qui: YourCodeSucksException
Gungwald

Risposte:


152

È solo il risultato di una lunga giornata e ci siamo fatti un po 'le vertigini. Per molti, molti anni (da quando ero stato nel team), avevamo sempre scherzato sulla sostituzione di alcuni messaggi di errore nel compilatore per uno degli errori più comuni con un messaggio simile. Internamente abbiamo sempre scherzato e preso in giro cose e persone diverse (principalmente nella squadra stessa). Se non hai il senso dell'umorismo, sei destinato a una fossa precoce.

È stata una semplice conversazione;

"Oh, avresti dovuto sollevare l'eccezione EProgrammerNotFound in quella funzione."
"LOL! Dovremmo aggiungere quell'eccezione e vedere chi se ne accorge."
"Mi chiedo quanta speculazione ci sarà sul perché sia ​​lì?"

Quindi, suppongo che tutto ciò che posso dire è: "Avete giocato tutti nelle nostre mani; -) ... Buwahahaha! Arato!"


9
Non è questa l'eccezione più comune in Tron?
LaKraven,

1
È abbastanza ragionevole avere una simile eccezione. Considero sempre questa eccezione come ENotImplementedException
stanleyxu2005,

6
@ stanleyxu2005, per questo puoi usare l' ENotImplementedeccezione.
TLama,

Ho un personalizzato EProgrammerException. Stavo digitando il codice per completare EProgr...quando mi è stato mostrato il codice EProgrammerNotFound. Purtroppo non posso usare EProgrammerNotFound, poiché il mio EProgrammerExceptiondiscende da EInvisibleException; poiché significava un incrocio tra un fallimento di un'asserzione e EAbortun'eccezione (ho visto un programmatore che stava rovinando qualcosa e mi fermerò qui).
Ian Boyd,

24

È usato insieme alla tecnologia "fix-inline" che richiede che il programmatore debba essere collegato nel file exe ;-)


20

È stato introdotto in Delphi 2009, ancora presente in Delphi 2010, e recentemente ha ottenuto maggiore attenzione su Internet .

Penso che sia un uovo di Pasqua, simile a " EBCAK " (errore tra sedia e tastiera), e il salto della versione numero 13 di Delfi .

EProgrammerNotFound

  • è dichiarato nel ramo Win32 dell'unità SysUtils, ma non viene utilizzato in nessun punto di RTL o VCL
  • non è presente nel prisma di Delfi
  • è stato introdotto in Delphi 2009, quindi non presente in VCL.NET
  • non ha attualmente (versione 3.5) nulla di simile nel framework .NET (non so perché, questi ragazzi hanno umorismo )

Non penso che EProgrammerNotFound sia realmente pensato per essere usato, ma dato che è lì, le persone lo useranno scherzosamente (simile come mettere un vagabondo "const False = True; True = not False;" in qualcuno elcodecode).

--jeroen


2
Hmm, il programmatore non è solo una persona, ma anche un dispositivo (per la programmazione, ad esempio il flash di dispositivi integrati). Sento odore di un iPhone qui? Naah, allora sarebbe nella fonte IDE, non nei sysutils.
Marco van de Voort,

8
EBCAK? L'ho sempre sentito espresso come PEBKAC. (Il problema esiste tra tastiera e sedia).
Mason Wheeler,


5

È l'analogo di runtime dell'errore di sintassi del compilatore: programmatore previsto. ;>


2
Avresti dovuto vedere la build con le stringhe del compilatore localizzate su Jive!
dthorpe,

4

È una specie di scherzo che descrive se stesso, puoi provare questo codice

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

o

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

Quanto sopra funziona in Delphi 10 Seattle.


3

Con il programmatore, non è il programmatore seduto dietro a Delphi a cui viene fatto riferimento. Penso che sia usato per il fatto che in D2009 e oltre hanno pianificato (mai usato non so se funziona) che ogni oggetto era attendibile.


In realtà, è utilizzabile. Puoi passare qualsiasi oggetto a TMonitor.Entere TMonitor.Exit. E non sono sicuro che sia un uovo di Pasqua o no ...
jpfollenius,

1
Cosa ha a che fare un oggetto in attesa con i programmatori o se vengono trovati? E a quale programmatore viene fatto riferimento?
Rob Kennedy,

0

Sono un programmatore, sono un'eccezione di?

Marco Cantù lo descrive anche nel suo libro "Manuale Delphi 2009" - pagina 242. Dice che non è mai stato escluso dal codice sorgente VCL.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.