Виняток EProgrammerNotFound в Delphi?


132

У Delphi 2009 SysUtils.pas містить це у рядку 425:

EProgrammerNotFound = class(Exception);
  • Це просто писанка або щось серйозне?
  • Коли цей виняток слід підвищувати?
  • Чи існує вона також у призмі Delphi та / або у вільному паскалі?

Питання: Чи все-таки цей клас виключень задекларований у Delphi (зараз XE7)? A: Так, і це навіть документально підтверджено !

Нестандартний спосіб вказувати на несправності програмного забезпечення.

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


4
Цей виняток нещодавно згадується у відповіді про Androids UserManager . isUserAGoat () функція
MJN


Я думаю, що ця модель дизайну заслуговує на офіційну назву. Я бачу це і тут: YourCodeSucksException
Гунгвальд

Відповіді:


152

Це просто результат довгого дня, і ми трохи запаморочилися. Протягом багатьох, багатьох років (відтоді, як я був у команді), ми завжди жартували про те, щоб замінити якесь повідомлення про помилку в компіляторі на одну з найпоширеніших помилок аналогічним повідомленням. Внутрішні ми завжди жартували і весело балувались з різними речами та людьми (переважно з боку самої команди). Якщо у вас немає почуття гумору, вам призначено ранню могилу.

Це була проста розмова;

"О, ви повинні підняти виключення EProgrammerNotFound у цій функції."
"LOL! Ми повинні додати цей виняток і подивитися, хто помітить."
"Цікаво, скільки буде спекуляцій щодо того, чому воно існує?"

Отже, я думаю, що все, що я можу сказати, - "Ви всі грали прямо в наші руки; -) ... Buwahahaha! Pwned!"


9
Хіба це не найпоширеніший виняток у Троні?
LaKraven

1
Цілком виправданим є такий виняток. Я завжди розглядаю цей виняток як ENotImplementedException
stanleyxu2005

6
@ stanleyxu2005, для цього можна використовувати ENotImplementedвиняток.
TLama

У мене є звичай EProgrammerException. Я набирав код, щоб завершити, EProgr...коли мені показали прозорливість коду EProgrammerNotFound. На жаль, я не можу використовувати EProgrammerNotFound, як моє EProgrammerExceptionпоходження EInvisibleException; як це означало як перехрес між невдачею твердження і EAbortвинятком (я зловив програміста, що щось викручує, і я збираюся зупинитися тут).
Ян Бойд

24

Він використовується в поєднанні з технологією "fix-inline", яка вимагає, щоб програміст був пов'язаний з файлом exe ;-)


20

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

Я думаю, що це писанка, схожа на " EBCAK " (Помилка між кріслом і клавіатурою), і пропуск Delphi версії №13 .

EProgrammerNotFound

  • оголошується у відділенні Win32 підрозділу SysUtils, але не використовується ніде в RTL або VCL
  • немає в призмі Дельфі
  • була представлена ​​в Delphi 2009, тому не присутня у VCL.NET
  • наразі (версія 3.5) нічого не схоже в .NET рамках (не впевнений, чому у цих хлопців є гумор )

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

--jeroen


2
Хм, програміст - це не лише людина, але й пристрій (для програмування, наприклад, спалаху вбудованих пристроїв). Я тут пахну IPhone? Ні, тоді це було б у джерелі IDE, а не систематики.
Марко ван де Ворт

8
EBCAK? Я завжди чув, що це виражається як PEBKAC. (Проблема існує між клавіатурою та стільцем).
Мейсон Уілер

11

Про походження є дискусійним, але про нього відомо вже деякий час ...
Марко Канту пожартував з цього приводу в сесії "Весела сторона Дельфі".
ІМО, його слід використовувати частіше ;-)

Читати на сайті:
http://wings-of-wind.com/2010/01/12/best-programming-feature-ever/
http://blog.barrkel.com/2008/11/reference-count-pointers-revisited .html

PS: Я не думаю, що він існує в призмі Delphi, FreePascal або C # (але це має бути). <G>


5

Це аналог часу виконання "Синтаксичної помилки компілятора: очікується програміст". ;>


2
Вам слід було бачити збірку із рядками компілятора, локалізованими на Jive!
dthorpe

4

Це свого роду опис жарту, ви можете спробувати цей код

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

або

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

Вищезазначене працює в Delphi 10 Сіетлі.


3

Що стосується програміста, то не той програміст, який сидить за Delphi, на який посилається. Я думаю, що це використовується для того, що в D2009 і вище вони планували (ніколи не використовували, не знаю, чи працює), що кожен об’єкт був чекаючим.


Насправді він є корисним. Ви можете передати будь-який об’єкт до TMonitor.Enterта TMonitor.Exit. І я не впевнений, це пасхальне яйце чи ні ...
jpfollenius

1
Який об’єкт, який очікує, має відношення до програмістів чи вони знайдені? І то , що програміст є час заслання?
Роб Кеннеді

0

Я програміст, чи я виняток, ніж?

Марко Кант так само описує це у своїй книзі "Довідник Delphi 2009" - стор. 242. Він говорить, що його ніколи не застосовують у вихідному коді VCL.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.