2010-01-18 8 views
87

In Delphi 2009, SysUtils.pas contiene questo in linea 425:Eccezione EProgrammerNotFound in Delphi?

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

D: E 'questa classe di eccezione ancora dichiarata in Delphi (attualmente XE7)? A: Sì, ed è anche documented!

Nonstandard way to indicate software faults.

You can use EProgrammerNotFound as an alternative to indicate software faults detected at run time.

+3

Questa eccezione è stata recentemente menzionata in una [risposta] (http://stackoverflow.com/a/13383962/80901) su Androids [UserManager] (http://developer.android.com/reference/android/os /UserManager.html). [IsUserAGoat()] (http://developer.android.com/reference/android/os/UserManager.html#isUserAGoat()) function – mjn

+2

[System.SysUtils.EProgrammerNotFound XE7] (http://docwiki.embarcadero.com/Libraries/XE7/en/System.SysUtils.EProgrammerNotFound) – bummi

risposta

116

E 'solo il risultato di una lunga giornata e avevamo ottenuto un po' stordita. Per molti, molti anni (da quando ero nel team), abbiamo 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 divertito con cose e persone diverse (principalmente nella squadra stessa). Se non hai il senso dell'umorismo, sei destinato a una tomba precoce.

Era una semplice conversazione;

"Oh, avresti dovuto sollevare l'eccezione EProgrammerNotFound in quella funzione."
"LOL! Dovremmo aggiungere quell'eccezione e vedere chi nota."
"Mi chiedo quante speculazioni ci saranno sul perché è lì?"

Quindi, immagino che tutto quello che posso dire sia, "Tutti avete giocato proprio nelle nostre mani; -) ... Buwahahaha! Pegno!"

+9

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

+1

È abbastanza ragionevole avere un'eccezione del genere. Considero sempre questa eccezione come ENotImplementedException – stanleyxu2005

+4

@ stanleyxu2005, per cui è possibile utilizzare l'eccezione ['ENotImplemented'] (http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.ENotImplemented). – TLama

1

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 sopra hanno pianificato (mai usato non so se funziona) che ogni oggetto era attendibile.

+0

In realtà, è utilizzabile. È possibile passare qualsiasi oggetto a 'TMonitor.Enter' e' TMonitor.Exit'. E non sono sicuro che sia un uovo di Pasqua o no ... – jpfollenius

+1

Che cosa ha a che fare un oggetto in attesa con i programmatori o se sono stati trovati? E a quale programmatore * viene * fatto riferimento? –

17

E 'utilizzato in combinazione con la tecnologia "fix-inline" che richiede che il programmatore deve essere collegato nel file exe ;-)

0

io sono un programmatore, io sono un'eccezione rispetto?

Marco Cantù lo descrive anche nel suo libro 'Delphi 2009 handbook' - pagina 242. Dice che non è mai stato messo in pausa nel codice sorgente VCL.

17

È stato introdotto a Delphi 2009, ancora presente a Delphi 2010, e recently ha ottenuto l'attenzione su internetmore.

Penso che sia un uovo di Pasqua, simile a "EBCAK" (Errore tra sedia e tastiera) e allo skipping of Delphi version number 13.

EProgrammerNotFound

  • è dichiarata nel ramo Win32 dell'unità SysUtils, ma non utilizzati in qualsiasi parte del RTL o VCL
  • non è presente in Delphi Prism
  • è stato introdotto nel Delphi 2009, in modo da non presente in VCL.NET
  • ha attualmente (versione 3.5) nulla di simile nel.NET framework (non so perché, questi ragazzi do have humour)

Non credo EProgrammerNotFound è in realtà pensato per essere utilizzato a tutti, ma dal momento che è lì, la gente scherzosamente lo uso (simile come mettere un randagio " const False = True; True = not False; "in qualcun altro codice sorgente).

--jeroen

+1

Hmm, il programmatore non è solo una persona, ma anche un dispositivo (per la programmazione, ad esempio, il flash di dispositivi incorporati). Sento odore di un IPhone qui? Naah, quindi sarebbe nella fonte IDE, non in sysutils. –

+0

Supporto per dispositivi Delphi. Hmm ... –

+5

EBCAK? L'ho sempre sentito espresso come PEBKAC. (Esiste un problema tra tastiera e sedia). –

3

È l'analogo di runtime del "Errore di sintassi: programmatore previsto" del compilatore. ;>

+0

Voglio sapere quale codice genera l'errore del compilatore :-) –

+2

Dovresti aver visto la build con le stringhe del compilatore localizzate su Jive! – dthorpe

0

Si tratta di una sorta di auto descrivere scherzo, si può provare questo codice

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

o

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

Le opere di cui sopra in Delphi 10 Seattle.