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.


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!”


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 ;-)


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


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


5

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


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.


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ł.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.