EProgrammerNotFound ข้อยกเว้นใน Delphi?


132

ใน Delphi 2009 SysUtils.pas มีสิ่งนี้ในบรรทัดที่ 425:

EProgrammerNotFound = class(Exception);
  • นี่เป็นแค่ไข่อีสเตอร์หรืออะไรที่ร้ายแรง?
  • ข้อยกเว้นนี้ควรจะเพิ่มขึ้นเมื่อใด
  • มันมีอยู่ใน Delphi Prism และ / หรือ Free Pascal ด้วยหรือไม่?

ถาม: คลาสข้อยกเว้นนี้ยังคงประกาศอยู่ใน Delphi (ปัจจุบันคือ XE7) หรือไม่ ตอบ: ใช่และเป็นเอกสารด้วยซ้ำ!

วิธีที่ไม่เป็นมาตรฐานในการระบุข้อบกพร่องของซอฟต์แวร์

คุณสามารถใช้ EProgrammerNotFound เป็นทางเลือกในการระบุข้อบกพร่องของซอฟต์แวร์ที่ตรวจพบในขณะทำงาน


4
ข้อยกเว้นนี้เพิ่งได้รับการกล่าวถึงในคำตอบเกี่ยวกับหุ่นยนต์UserManager isUserAGoat () function
mjn


ฉันคิดว่ารูปแบบการออกแบบนี้สมควรได้รับชื่อที่เป็นทางการ ฉันเห็นที่นี่ด้วย: YourCodeSucksException
Gungwald

คำตอบ:


152

มันเป็นเพียงผลของวันที่ยาวนานและเราก็รู้สึกหวิว ๆ เป็นเวลาหลายปีแล้ว (นับตั้งแต่ฉันอยู่ในทีม) เรามักจะพูดติดตลกเกี่ยวกับการแทนที่ข้อความแสดงข้อผิดพลาดในคอมไพเลอร์สำหรับหนึ่งในข้อผิดพลาดที่พบบ่อยที่สุดด้วยข้อความที่คล้ายกัน ภายในเรามักจะพูดติดตลกและล้อเลียนสิ่งต่าง ๆ และผู้คน (ส่วนใหญ่ในทีมเอง) หากคุณไม่มีอารมณ์ขันแสดงว่าคุณถูกกำหนดให้เป็นหลุมฝังศพในช่วงต้น

มันเป็นการสนทนาที่เรียบง่าย

"โอ้คุณควรเพิ่มข้อยกเว้น EProgrammerNotFound ในฟังก์ชันนั้น"
"ฮ่า ๆ เราควรเพิ่มข้อยกเว้นนั้นและดูว่าใครสังเกตเห็น"
"ฉันสงสัยว่าจะมีการคาดเดามากแค่ไหนว่าทำไมถึงเป็นเช่นนั้น"

ดังนั้นฉันเดาทั้งหมดที่ฉันสามารถพูดได้คือ "คุณเล่นอยู่ในมือของพวกเราแล้ว; -) ... Buwahahaha! pwned!


9
นี่ไม่ใช่ข้อยกเว้นที่พบบ่อยที่สุดใน Tron หรือไม่?
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 " (Error Between Chair and Keyboard) และกระโดดของ Delphi รุ่นจำนวน 13

EProgrammerNotFound

  • ถูกประกาศในสาขา Win32 ของหน่วย SysUtils แต่ไม่ได้ใช้ที่ใดก็ได้ใน RTL หรือ VCL
  • ไม่มีอยู่ใน Delphi Prism
  • ได้รับการแนะนำใน Delphi 2009 ดังนั้นจึงไม่มีอยู่ใน VCL.NET
  • ขณะนี้มี (เวอร์ชัน 3.5) ไม่มีอะไรที่คล้ายกันในกรอบ. NET (ไม่แน่ใจว่าทำไมคนเหล่านี้ถึงมีอารมณ์ขัน )

ฉันไม่คิดว่า EProgrammerNotFound มีไว้เพื่อใช้งานเลย แต่เนื่องจากอยู่ที่นั่นผู้คนจะใช้มันอย่างติดตลก (คล้าย ๆ กับการใส่ "const False = True; True = not False;" ในซอร์สโค้ดของใครบางคน)

--jeroen


2
อืมโปรแกรมเมอร์ไม่เพียง แต่เป็นคนเท่านั้น แต่ยังเป็นอุปกรณ์ (สำหรับการเขียนโปรแกรมเช่นแฟลชของอุปกรณ์ฝังตัว) ฉันได้กลิ่น iPhone ที่นี่หรือไม่? Naah มันจะอยู่ในแหล่งที่มาของ IDE ไม่ใช่ sysutils
Marco van de Voort

8
EBCAK? ฉันมักจะได้ยินคำว่า PEBKAC (ปัญหาอยู่ระหว่างคีย์บอร์ดและเก้าอี้)
Mason Wheeler

11

ต้นกำเนิดเป็นที่ถกเถียงกัน แต่เป็นที่รู้กันมาระยะหนึ่งแล้ว ...
Marco Cantu พูดติดตลกเกี่ยวกับเรื่องนี้ในเซสชั่น "Fun Side of Delphi"
IMO ควรใช้บ่อยขึ้น;-)

อ่านต่อ:
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>


5

เป็นแอนะล็อกรันไทม์ของ "ข้อผิดพลาดทางไวยากรณ์: โปรแกรมเมอร์ที่คาดไว้" ของคอมไพเลอร์ ;>


2
คุณน่าจะได้เห็นบิลด์ที่มีสตริงคอมไพเลอร์ที่แปลเป็นภาษา Jive!
dthorpe

4

มันเป็นเรื่องตลกที่อธิบายตัวเองคุณสามารถลองใช้รหัสนี้

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

หรือ

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

ข้างต้นทำงานใน Delphi 10 Seattle


3

ด้วยโปรแกรมเมอร์ไม่ใช่โปรแกรมเมอร์ที่นั่งอยู่ข้างหลังเดลฟีที่ถูกอ้างถึง ฉันคิดว่ามันถูกใช้เพื่อความจริงที่ว่าใน D2009 ขึ้นไปที่พวกเขาวางแผนไว้ (ไม่เคยใช้มันไม่รู้ว่ามันใช้งานได้หรือไม่) ที่ทุกวัตถุรอได้


จริงๆแล้วมันใช้งานได้ คุณสามารถส่งผ่านวัตถุใด ๆ ไปและTMonitor.Enter TMonitor.Exitและฉันไม่แน่ใจว่าเป็นไข่อีสเตอร์หรือไม่ ...
jpfollenius

1
ออบเจ็กต์ที่ถูกสละสิทธิ์เกี่ยวข้องอะไรกับโปรแกรมเมอร์หรือไม่หรือว่าพบแล้ว และสิ่งที่โปรแกรมเมอร์จะถูกอ้างอิงถึง?
Rob Kennedy

0

ฉันเป็นโปรแกรมเมอร์ฉันมีข้อยกเว้นหรือไม่?

Marco Cantùยังอธิบายเรื่องนี้ไว้ในหนังสือ 'Delphi 2009 handbook' - หน้าที่ 242 เขาบอกว่าไม่เคยใช้ซอร์สโค้ด VCL

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.