EProgrammerNotНайдено исключение в Delphi?

132

В Delphi 2009 SysUtils.pas содержит это в строке 425:

EProgrammerNotFound = class(Exception);
  • Это просто пасхальное яйцо или что-то серьезное?
  • Когда следует вызывать это исключение?
  • Он также существует в Delphi Prism и / или Free Pascal?

В: Этот класс исключения все еще объявлен в Delphi (в настоящее время XE7)? О: Да, и это даже задокументировано !

Нестандартный способ обозначить программные ошибки.

Вы можете использовать EProgrammerNotFound в качестве альтернативы для индикации ошибок программного обеспечения, обнаруженных во время выполнения.

MJN
источник
4
Это исключение недавно упоминалось в ответе о UserManager Android . isUserAGoat () функция
MJN
Я думаю, что этот шаблон проектирования заслуживает официального названия. Я также вижу это здесь: YourCodeSucksException
Gungwald

Ответы:

152

Это просто результат долгого дня, и у нас немного закружилась голова. В течение многих-многих лет (с тех пор, как я был в команде), мы всегда шутили о замене сообщения об ошибке в компиляторе на одну из наиболее распространенных ошибок аналогичным сообщением. Внутренне мы всегда шутили и подшучивали над разными вещами и людьми (в основном над самой командой). Если у вас нет чувства юмора, вас ждет ранняя могила.

Это был простой разговор;

«О, вы должны были вызвать исключение EProgrammerNotFound в этой функции».
«LOL! Мы должны добавить это исключение и посмотреть, кто это заметит».
«Интересно, сколько будет предположений о том, почему это так?»

Так что, думаю, все, что я могу сказать, это: «Вы все сыграли нам на руку; -) ... Бууахахаха!

Аллен Бауэр
источник
9
Разве это не самое распространенное исключение в Троне?
LaKraven
1
Такое исключение вполне разумно. Я всегда рассматриваю это исключение как ENotImplementedException
stanleyxu2005
6
@ stanleyxu2005, для этого можно использовать ENotImplementedисключение.
TLama
У меня есть обычай EProgrammerException. Я набирал код для завершения, EProgr...когда мне показалось понимание кода EProgrammerNotFound. К сожалению, я не могу использовать EProgrammerNotFound, поскольку EProgrammerExceptionпроисходит от меня EInvisibleException; поскольку это означало нечто среднее между ошибкой утверждения и EAbortисключением (я поймал программиста, который что-то напортачил, и я собираюсь остановиться на этом).
Ian Boyd
24

Он используется вместе с технологией "fix-inline", которая требует, чтобы программист был связан с файлом exe ;-)

Уве Раабе
источник
20

Он был введен в Delphi 2009, все еще присутствует в Delphi 2010, а в последнее время получили некоторое больше внимания на интернете .

Я думаю, что это пасхальное яйцо, похожее на « EBCAK » (Ошибка между стулом и клавиатурой) и пропуск версии Delphi № 13 .

EProgrammerNotFound

  • объявлен в ветке Win32 модуля SysUtils, но не используется нигде в RTL или VCL
  • отсутствует в Delphi Prism
  • был представлен в Delphi 2009, поэтому отсутствует в VCL.NET
  • в настоящее время (версия 3.5) не имеет ничего похожего в .NET framework (не знаю почему, у этих ребят есть юмор )

Я не думаю, что EProgrammerNotFound вообще предназначен для использования, но поскольку он есть, люди будут использовать его в шутку (аналогично тому, как поставить случайное «const False = True; True = not False;» в исходный код другого пользователя).

--jeroen

Йерун Виерт Плюмерс
источник
2
Хм, программист - это не только человек, но и устройство (например, для программирования flash встроенных устройств). Я чувствую запах IPhone? Неа, тогда это было бы в исходниках IDE, а не в sysutils.
Марко ван де Вурт
8
EBCAK? Я всегда слышал, как это выражается как PEBKAC. (Проблема существует между клавиатурой и стулом).
Мейсон Уиллер,
11

Происхождение спорно, но это было известно некоторое время ...
Марко Канту шутили об этом в «Fun Side Дельфи» сессии.
ИМО, его надо использовать чаще ;-)

Читайте дальше:
http://wings-of-wind.com/2010/01/12/best-programming-feature-ever/
http://blog.barrkel.com/2008/11/reference-counted-pointers-revisited .html

PS: Я не думаю, что он существует в Delphi Prism, FreePascal или C # (но должен). <G>

Francesca
источник
5

Это аналог компилятора «Синтаксическая ошибка: ожидается программист» во время выполнения. ;>

dthorpe
источник
2
Вы должны были видеть сборку со строками компилятора, локализованными на Jive!
dthorpe 05
4

Это своего рода шутка с самоописанием, вы можете попробовать этот код

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

или

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

Вышеупомянутое работает в Delphi 10 Seattle.

LaBracca
источник
3

В случае с программистом речь идет не о программисте, сидящем за Delphi. Я думаю, это используется для того, что в D2009 и выше они планировали (никогда не использовали, не знаю, работает ли), что каждый объект ожидался.

Рицерт Хорнстра
источник
Собственно, это можно использовать. Вы можете передать любой объект в TMonitor.Enterи TMonitor.Exit. И я не уверен, пасхальное это яйцо или нет ...
jpfollenius
1
Какое отношение имеет ожидаемый объект к программистам или они найдены? И то , что программист является время ссылки?
Роб Кеннеди
0

Я программист, разве я исключение чем?

Марко Канто также описывает это в своей книге «Справочник по Delphi 2009» на стр. 242. Он говорит, что это никогда не было включено в исходный код VCL.

Edelcom
источник