Wyjątek EProgrammerNotFound w Delphi?

135

W Delphi 2009 SysUtils.pas zawiera to w wierszu 425:

EProgrammerNotFound = class(Exception);
  • Czy to po prostu jajko wielkanocne czy coś poważnego?
  • Kiedy należy zgłosić ten wyjątek?
  • Czy istnieje również w Delphi Prism i / lub Free Pascal?

P: Czy ta klasa wyjątku jest nadal deklarowana w Delphi (obecnie XE7)? O: Tak, i jest to nawet udokumentowane !

Niestandardowy sposób wskazywania błędów oprogramowania.

Możesz użyć EProgrammerNotFound jako alternatywy do wskazywania błędów oprogramowania wykrytych w czasie wykonywania.

mjn
źródło
4
Ten wyjątek został niedawno wspomniany w odpowiedzi na temat UserManager systemu Android . isUserAGoat) ( funkcja
MJN
Myślę, że ten wzór projektowy zasługuje na formalną nazwę. Widzę to również tutaj: YourCodeSucksException
Gungwald

Odpowiedzi:

153

To tylko wynik długiego dnia i trochę oszołomiliśmy. Przez wiele, wiele lat (odkąd byłem w zespole), zawsze żartowaliśmy o zamianie jakiegoś komunikatu o błędzie w kompilatorze na jeden z najczęstszych błędów podobnym komunikatem. Wewnętrznie zawsze żartowaliśmy i żartowaliśmy z różnych rzeczy i ludzi (głównie z samego zespołu). Jeśli nie masz poczucia humoru, jesteś skazany na wczesny grób.

To była prosta rozmowa;

„Och, powinieneś był zgłosić wyjątek EProgrammerNotFound w tej funkcji”.
„LOL! Powinniśmy dodać ten wyjątek i zobaczyć, kto to zauważy”.
„Zastanawiam się, ile będzie spekulacji na temat tego, dlaczego tak jest?”

Więc chyba wszystko, co mogę powiedzieć, to: „Wszyscy zagraliście w nasze ręce; -) ... Buwahahaha! Pwned!”

Allen Bauer
źródło
9
Czy to nie jest najczęstszy wyjątek w Tron?
LaKraven
1
Taki wyjątek jest całkiem rozsądny. Zawsze uważam ten wyjątek za ENotImplementedException
stanleyxu2005
6
@ stanleyxu2005, w tym celu możesz użyć ENotImplementedwyjątku.
TLama
Mam zwyczaj EProgrammerException. Wpisywałem kod, aby zakończyć, EProgr...gdy pokazał mi się wgląd w kod EProgrammerNotFound. Niestety nie mogę używać EProgrammerNotFound, ponieważ mój EProgrammerExceptionpochodzi z EInvisibleException; ponieważ oznaczało to skrzyżowanie błędu asercji i EAbortwyjątku (złapałem programistę, który coś schrzanił, i na tym zakończę).
Ian Boyd,
24

Jest używany w połączeniu z technologią "fix-inline", która wymaga, aby programista był dowiązany do pliku exe ;-)

Uwe Raabe
źródło
20

Został wprowadzony w Delphi 2009, nadal jest obecny w Delphi 2010, a ostatnio zyskał więcej uwagi w Internecie .

Myślę, że to easter egg, podobny do „ EBCAK ” (Error Between Chair and Keyboard) i pomijanie wersji Delphi numer 13 .

EProgrammerNotFound

  • jest zadeklarowany w gałęzi Win32 jednostki SysUtils, ale nie jest używany nigdzie w RTL ani VCL
  • nie występuje w Delphi Prism
  • został wprowadzony w Delphi 2009, więc nie występuje w VCL.NET
  • obecnie (wersja 3.5) nie ma nic podobnego we frameworku .NET (nie wiem dlaczego, ci goście mają humor )

Nie wydaje mi się, aby EProgrammerNotFound w ogóle był przeznaczony do użycia, ale ponieważ istnieje, ludzie będą go żartobliwie używać (podobnie jak umieszczanie zbłąkanego "const False = True; True = not False;" w innym kodzie źródłowym).

--jeroen

Jeroen Wiert Pluimers
źródło
2
Hmm, programista to nie tylko osoba, ale także urządzenie (do programowania np. Flashowania urządzeń embedded). Czy czuję tu iPhone'a? Nie, to byłoby w źródle IDE, a nie w sysutils.
Marco van de Voort
8
EBCAK? Zawsze słyszałem to jako PEBKAC. (Problem występuje między klawiaturą a krzesłem).
Mason Wheeler
11

Pochodzenie jest dyskusyjne, ale było znane od jakiegoś czasu ...
Marco Cantu zażartował na ten temat podczas sesji „Fun Side of Delphi”.
IMO, powinno być używane częściej ;-)

Czytaj dalej:
http://wings-of-wind.com/2010/01/12/best-programming-feature-ever/
http://blog.barrkel.com/2008/11/reference-counted-pointers-revisited .html

PS: Myślę, że nie istnieje w Delphi Prism, FreePascal lub C # (ale powinno). <G>

Francesca
źródło
5

Jest to analogiczne działanie w czasie wykonywania kompilatora „Błąd składniowy: oczekiwano programisty”. ;>

dthorpe
źródło
2
Powinieneś zobaczyć kompilację z napisami kompilatora zlokalizowanymi na Jive!
dthorpe
4

Jest to rodzaj samoopisującego żartu, możesz wypróbować ten kod

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

lub

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

Powyższe działa w Delphi 10 Seattle.

LaBracca
źródło
3

W przypadku programisty to nie programista siedzący za Delphi jest przywoływany. Myślę, że jest to wykorzystywane do tego, że w D2009 i nowszych planowali (nigdy nie używali, nie wiem, czy to działa), że każdy obiekt będzie czekał.

Ritsaert Hornstra
źródło
Właściwie to jest użyteczne. Możesz przekazać dowolny obiekt do TMonitor.Enteri TMonitor.Exit. I nie jestem pewien, czy to jajko wielkanocne, czy nie ...
jpfollenius
1
Co obiekt oczekujący ma wspólnego z programistami lub czy został znaleziony? I co programista jest ich odwoływać?
Rob Kennedy
0

Jestem programistą, czy jestem wyjątkiem niż?

Marco Cantù opisuje to również w swojej książce „Podręcznik Delphi 2009” - strona 242. Mówi, że nigdy nie zostało to użyte w kodzie źródłowym VCL.

Edelcom
źródło