2010-01-18 31 views
87

Trong Delphi 2009, SysUtils.pas chứa này trong dòng 425:EProgrammerKhông có ngoại lệ trong Delphi?

EProgrammerNotFound = class(Exception); 
  • Đây có phải là chỉ đơn giản là một easter egg hoặc một cái gì đó nghiêm trọng?
  • Khi nào ngoại lệ này nên được nâng lên?
  • Nó cũng tồn tại trong lăng kính Delphi và/hoặc Pascal miễn phí?

Hỏi: Lớp học ngoại lệ này vẫn được khai báo trong Delphi (hiện tại XE7)? A: Có, và thậm chí là documented!

Nonstandard way to indicate software faults.

You can use EProgrammerNotFound as an alternative to indicate software faults detected at run time.

+3

Ngoại lệ này gần đây đã được đề cập trong [answer] (http://stackoverflow.com/a/13383962/80901) về Android [UserManager] (http://developer.android.com/reference/android/os /UserManager.html). [IsUserAGoat()] (http://developer.android.com/reference/android/os/UserManager.html#isUserAGoat()) function – mjn

+2

[System.SysUtils.EProgrammerNotFound XE7] (http://docwiki.embarcadero.com/Libraries/XE7/en/System.SysUtils.EProgrammerNotFound) – bummi

Trả lời

116

Nó chỉ là kết quả của một ngày dài và chúng tôi đã nhận được một chút ham chơi. Đối với nhiều, nhiều năm (kể từ khi tôi tham gia vào nhóm), 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 với một thông báo tương tự. Trong nội bộ chúng tôi đã luôn luôn đùa và chọc ghẹo vui vẻ ở những thứ khác nhau và con người (chủ yếu là trên bản thân đội). Nếu bạn không có cảm giác 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 nêu ra ngoại lệ EProgrammerNotFound trong hàm đó."
"LOL! Chúng ta nên thêm ngoại lệ đó và xem ai là người thông báo."
"Tôi tự hỏi 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 trong tay chúng tôi; -) ... Buwahahaha! Pwned!"

+9

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

+1

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

+4

@ stanleyxu2005, vì vậy bạn có thể sử dụng ngoại lệ ['ENotImplemented'] (http://docwiki.embarcadero.com/Libraries/XE2/en/System.SysUtils.ENotImplemented). – TLama

7

Nguồn gốc là gây tranh cãi, nhưng nó được biết đến với một thời gian ...
Marco Cantu nói đùa về nó trong một "Fun Side của Delphi" phiên.
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ĩ rằng nó tồn tại trong Delphi Prism, FreePascal hoặc C# (nhưng nó nên). <G>

1

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

+0

Thực ra, nó có thể sử dụng được. Bạn có thể truyền bất kỳ đối tượng nào cho 'TMonitor.Enter' và' TMonitor.Exit'. Và tôi không chắc chắn nếu nó là một quả trứng Phục sinh hay không ... – jpfollenius

+1

Một đối tượng được chờ đợi phải làm gì với các lập trình viên hoặc cho dù chúng được tìm thấy? Và lập trình viên * đang * được tham chiếu là gì? –

17

Nó được sử dụng kết hợp với "sửa chữa-inline" công nghệ đòi hỏi rằng các lập trình viên phải được liên kết vào file exe ;-)

0

Tôi là một lập trình viên, tôi là một ngoại lệ hơn?

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

17

Nó đã được giới thiệu trong Delphi 2009, vẫn có mặt tại Delphi 2010 và recently nhận được một số sự chú ý more trên internet.

Tôi nghĩ rằng đó là trứng Phục sinh, tương tự như "EBCAK" (Lỗi giữa ghế và bàn phím) và skipping of Delphi version number 13.

EProgrammerNotFound

  • được khai báo trong các chi nhánh Win32 của đơn vị SysUtils, nhưng không được sử dụng bất cứ nơi nào trong RTL hoặc VCL
  • là không có mặt trong Delphi Prism
  • đã được giới thiệu trong Delphi 2009, vì vậy không có mặt trong VCL.NET
  • hiện có (phiên bản 3.5) không có gì tương tự trong.NET framework (không chắc chắn lý do tại sao, những kẻ do have humour)

Tôi không nghĩ EProgrammerNotFound là thực sự có nghĩa là để được sử dụng ở tất cả, nhưng vì nó là ở đó, mọi người sẽ sử dụng nó đùa (tương tự như cách đặt một đi lạc " const False = True; True = không False; "trong một người nào đó elses sourcecode).

--jeroen

+1

Hmm, lập trình viên không chỉ là một người, mà còn là một thiết bị (cho lập trình, ví dụ: 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ẽ có trong nguồn IDE, không phải sysutils. –

+0

Hỗ trợ thiết bị Delphi. Hmm ... –

+5

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ế). –

3

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

+0

Tôi muốn biết mã nào tạo ra lỗi trình biên dịch đó :-) –

+2

Bạn nên xem phần xây dựng với các chuỗi trình biên dịch được bản địa hóa thành Jive! – dthorpe

0

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

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

hoặc

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

Các công trình trên trong Delphi 10 Seattle.

Các vấn đề liên quan