Ngoại lệ EProgrammerNotFound trong Delphi?


132

Trong Delphi 2009, SysUtils.pas chứa điều này trong dòng 425:

EProgrammerNotFound = class(Exception);
  • Đây chỉ đơn giản là một quả trứng Phục sinh hoặc một cái gì đó nghiêm trọng?
  • Khi nào ngoại lệ này nên được nêu ra?
  • Nó cũng tồn tại trong Delphi Prism và / hoặc Free Pascal?

Q: Lớp ngoại lệ này có còn được khai báo trong Delphi (hiện là XE7) không? A: Vâng, và nó thậm chí còn được ghi nhận !

Cách không chuẩn để chỉ ra lỗi phần mềm.

Bạn có thể sử dụng EProgrammerNotFound như một giải pháp thay thế để chỉ ra lỗi phần mềm được phát hiện trong thời gian chạy.


4
Ngoại lệ này gần đây đã được đề cập trong một câu trả lời về Androids UserManager . isUserAGoat () chức năng
mjn


Tôi nghĩ rằng mẫu thiết kế này xứng đáng với một tên chính thức. Tôi cũng thấy nó ở đây: YourCodeSucksException
Gungwald

Câu trả lời:


152

Nó chỉ là kết quả của một ngày dài và chúng tôi đã có một chút ham chơi. Trong nhiều năm, kể từ khi tôi ở trong đội), chúng tôi luôn nói đùa về việc thay thế một số thông báo lỗi trong trình biên dịch cho một trong những lỗi phổ biến nhất bằng một thông báo tương tự. Trong nội bộ, chúng tôi luôn nói đùa và chọc vào những thứ khác nhau và mọi người (chủ yếu là trên chính đội). Nếu bạn không có khiếu hài hước, bạn sẽ đến một ngôi mộ sớm.

Đó là một cuộc trò chuyện đơn giản;

"Ồ, bạn nên đã đưa ra ngoại lệ EProgrammerNotFound trong chức năng đó."
"LOL! Chúng ta nên thêm ngoại lệ đó và xem ai thông báo."
"Tôi tự hỏi sẽ có bao nhiêu suy đoán về lý do tại sao nó ở đó?"

Vì vậy, tôi đoán tất cả những gì tôi có thể nói là, "Tất cả các bạn đã chơi ngay vào tay chúng tôi; -) ... Buwahahaha! Pwned!"


9
Đây không phải là ngoại lệ phổ biến nhất trong Tron sao?
LaKraven

1
Nó là khá hợp lý để có một ngoại lệ như vậy. Tôi luôn coi ngoại lệ này là ENotImcellenceedException
stanleyxu2005

6
@ stanleyxu2005, để bạn có thể sử dụng ENotImplementedngoại lệ.
TLama

Tôi có một phong tục EProgrammerException. Tôi đang gõ mã để hoàn thành EProgr...khi thông tin chi tiết về mã cho tôi thấy EProgrammerNotFound. Đáng buồn là tôi không thể sử dụng EProgrammerNotFound, khi tôi EProgrammerExceptionxuống từ EInvisibleException; vì nó có nghĩa là sự giao thoa giữa một thất bại khẳng định và một EAbortngoại lệ (tôi bắt gặp một lập trình viên đang làm hỏng cái gì đó, và tôi sẽ dừng lại ở đây).
Ian Boyd

24

Nó được sử dụng cùng với công nghệ "sửa lỗi nội tuyến" đòi hỏi người lập trình phải được liên kết vào tệp exe ;-)


20

Nó được giới thiệu trong Delphi 2009, vẫn có mặt trong Delphi 2010 và gần đây đã được chú ý nhiều hơn trên internet .

Tôi nghĩ rằng đó là một quả trứng Phục sinh, tương tự như " EBCAK " (Lỗi giữa Ghế và Bàn phím) và bỏ qua phiên bản số 13 của Delphi .

EProgrammerNotFound

  • được khai báo trong nhánh Win32 của đơn vị SysUtils, nhưng không được sử dụng ở bất kỳ đâu trong RTL hoặc VCL
  • không có trong Lăng kính Delphi
  • đã được giới thiệu trong Delphi 2009, vì vậy không có trong VCL.NET
  • Hiện tại (phiên bản 3.5) không có gì tương tự trong .NET framework (không hiểu tại sao, những kẻ này có khiếu hài hước )

Tôi không nghĩ EProgrammerNotFound thực sự có nghĩa là được sử dụng, nhưng vì nó ở đó, mọi người sẽ đùa cợt sử dụng nó (tương tự như đặt một "const false = True; True = not false;" trong một ai đó sử dụng mã nguồn).

--jeroen


2
Hmm, lập trình viên không chỉ là một người, mà còn là một thiết bị (để lập trình, ví dụ như flash của các thiết bị nhúng). Tôi có ngửi thấy một chiếc iPhone ở đây không? Naah, sau đó nó sẽ ở trong nguồn IDE, không phải sysutils.
Marco van de Voort

8
EBCAK? Tôi luôn luôn nghe nó thể hiện như PEBKAC. (Vấn đề tồn tại giữa bàn phím và ghế).
Mason Wheeler

11

Nguồn gốc gây tranh cãi, nhưng nó đã được biết đến trong một thời gian ...
Marco Cantu đã nói đùa về nó trong một phiên "Mặt vui của Delphi".
IMO, nó nên được sử dụng thường xuyên hơn ;-)

Đọc trên:
http://wings-of-wind.com/2010/01/12/best-programming-feature-ever/
http://blog.barrkel.com/2008/11/reference-counted-pointers-revisited .html

PS: Tôi không nghĩ nó tồn tại trong Delphi Prism, FreePascal hoặc C # (nhưng nó nên). <G>


5

Đó là tương tự thời gian chạy của trình biên dịch "Lỗi cú pháp: Trình lập trình mong đợi." ;>


2
Bạn sẽ thấy bản dựng với các chuỗi trình biên dịch được bản địa hóa thành Jive!
dthorpe

4

Đây là một loại trò đùa tự mô tả, bạn có thể thử mã này

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

hoặc là

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

Các công việc trên ở Delphi 10 Seattle.


3

Với lập trình viên, không phải lập trình viên ngồi sau Delphi được tham chiếu. Tôi nghĩ rằng nó được sử dụng cho thực tế là trong D2009 trở lên họ đã lên kế hoạch (không bao giờ sử dụng nó không biết nếu nó hoạt động) mà mọi đối tượng đều có thể chờ đợi.


Trên thực tế, nó có thể sử dụng. Bạn có thể vượt qua bất kỳ đối tượng đến TMonitor.EnterTMonitor.Exit. Và tôi không chắc đó có phải là trứng Phục sinh hay không ...
jpfollenius

1
Một đối tượng có thể chờ đợi phải làm gì với các lập trình viên hoặc liệu họ có tìm thấy không? Và những gì lập trình viên đang được tham khảo?
Rob Kennedy

0

Tôi là một lập trình viên, tôi có phải là ngoại lệ không?

Marco Cantù cũng mô tả điều này trong cuốn sách 'Cẩm nang Delphi 2009' - trang 242. Ông nói rằng nó không bao giờ bị sử dụng trong mã nguồn VCL.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.