มีข้อยกเว้นแนวคิด OOP หรือไม่


37

เมื่ออ่านโพสต์เมื่อวานนี้ฉันรู้ว่าฉันไม่รู้เกี่ยวกับที่มาของข้อยกเว้นมากนัก เป็นแนวคิดที่เกี่ยวข้องกับ OOP เท่านั้นหรือไม่ ฉันมักจะคิดว่ามันเป็น แต่อีกครั้งมีข้อยกเว้นฐานข้อมูล


ฉันเคยอ่านว่า "นาย Goodenuf" (หรือคล้ายกัน) คิดค้นข้อยกเว้นเพื่อตอบสนอง "ไม่เป็นไรมัน Goodenuf ใช่มั้ย!" การรังแกสไตล์ ฉันไม่สามารถหาข้อมูลอ้างอิงได้ในตอนนี้ - บางทีคนอื่นสามารถทำได้ มันจะน่าสนใจที่จะรู้ว่าภาษาที่พวกเขาถูกเพิ่มไปก่อน
Steve314

7
Haskell มีข้อยกเว้นและไม่ใช่ OOP เลย
jozefg

1
แม้ว่าข้อยกเว้นตัวเองจะไม่ได้มุ่งเน้นวัตถุอย่างเคร่งครัดการปฏิบัติร่วมกันของการกำหนดข้อยกเว้นเป็นวัตถุและการขว้างปาและจับอินสแตนซ์ของวัตถุเหล่านี้อย่างชัดเจนเป็น OOP มาก
Dougvj

ความแตกต่างระหว่างข้อยกเว้นกับ GOTO จะเป็นคำถามที่น่าสนใจ
Austin Henley

2
@Austin - วิธีการเกี่ยวกับ "แม้ว่าข้อยกเว้นพ่นละเมิดหลักการออกจากจุดเดียวที่บางส่วนของเหล่าสาวกที่เข้มงวดของโครงสร้างการเขียนโปรแกรมการสนับสนุนเป็นแน่นอนพวกเขาไม่อนุญาตให้มีการควบคุมการไหล unconstrained ปาเก็ตตี้ในทางที่gotoไม่โดยเฉพาะอย่างยิ่งเป้าหมายของการ. การโยนจะพิจารณาจากบริบทอิงตามโครงสร้างของบล็อกเช่นนี้ข้อยกเว้นจะขึ้นอยู่กับรูปแบบการเขียนโปรแกรมที่มีโครงสร้างที่เข้มงวดน้อยกว่าเล็กน้อยซึ่งหลักการทางออกเดียวถูกนำมาใช้เป็นแนวทาง
Steve314

คำตอบ:


5

ข้อยกเว้นไม่ใช่แนวคิดของ OOP

แต่พวกมันไม่ได้เกี่ยวข้องอย่างสมบูรณ์ทั้งในจุดเล็ก ๆ จุดเดียว

ดังที่คำตอบอื่น ๆ ได้แสดง: แนวคิดของข้อยกเว้นทำให้เป็นภาษาที่ไม่ใช่ OOP หลายภาษา ไม่มีสิ่งใดในแนวคิดที่ต้องการบางอย่างจาก OOP

แต่ถ้าไม่ใช่ภาษา OOP ทั้งหมดที่ใช้ OOP อย่างจริงจังต้องมีข้อยกเว้นเนื่องจากวิธีการจัดการข้อผิดพลาดอื่นล้มเหลว ณ จุดหนึ่ง: ตัวสร้าง

หนึ่งในประเด็นของ OOP คือวัตถุจะต้องห่อหุ้มและจัดการสถานะภายในของมันอย่างสมบูรณ์และสม่ำเสมอ นี่ก็หมายความว่าใน OOP บริสุทธิ์คุณต้องมีแนวคิดในการสร้างวัตถุใหม่ที่มีสถานะคงที่ "atomically" - ทุกอย่างตั้งแต่การจัดสรรหน่วยความจำ (ถ้าจำเป็น) ไปจนถึงการเริ่มต้นไปสู่สถานะที่มีความหมาย (เช่น zeroing ง่าย ๆ ทำได้ในนิพจน์เดียว ดังนั้นตัวสร้างจะต้อง:

Foo myFoo = Foo("foo", "bar", 42);

แต่นี่หมายความว่าตัวสร้างสามารถล้มเหลวได้เนื่องจากข้อผิดพลาดบางอย่าง วิธีการเผยแพร่ข้อมูลข้อผิดพลาดจากตัวสร้างโดยไม่มีข้อยกเว้น?

  • ส่งคืนค่าหรือไม่ ล้มเหลวเนื่องจากในบางภาษาnewสามารถส่งคืนได้เท่านั้นnullแต่ไม่ใช่ข้อมูลที่มีความหมายใด ๆ ในภาษาอื่น (เช่น C ++) myFooไม่ใช่ตัวชี้ nullคุณไม่สามารถตรวจสอบกับ นอกจากนี้คุณไม่สามารถถามmyFooเกี่ยวกับข้อผิดพลาด - มันไม่ได้เริ่มต้นและดังนั้น "ไม่มีอยู่" ในการคิด OOP

  • ตั้งค่าสถานะข้อผิดพลาดส่วนกลางหรือไม่ มากเกี่ยวกับสภาวะห่อหุ้มแล้วมีตัวแปรทั่วโลกไหม? ไปที่ h ... ;-)

  • ส่วนผสม? ไม่มีทางดีกว่า

  • ?

ดังนั้นข้อยกเว้นเป็นแนวคิดพื้นฐานมากกว่า OOP แต่ OOP สร้างขึ้นบนพวกเขาด้วยวิธีธรรมชาติ


3
เท่าที่ฉันสามารถบอกได้คำเดียวใน "คำตอบ" นี้ที่ตอบคำถามจริงที่ถามคือ "ไม่" ส่วนที่เหลือดูเหมือนจะเกี่ยวกับข้อยกเว้นใน OOP - ด้วยความเคารพจากฉันทั้งหมดนี้อ่านที่ไหนสักแห่งระหว่างความสัมพันธ์ราง ๆและไม่เกี่ยวข้องทั้งหมด - อีกครั้งในบริบทของคำถามที่ถาม
ริ้น

@gnat: ยังบอกว่าเขาไม่ทราบเกี่ยวกับต้นกำเนิดของข้อยกเว้น ดังนั้นพื้นหลังเล็กน้อยทำไมข้อยกเว้นทุกที่ในที่ดิน OO ดูเหมือนจะโอเคสำหรับฉัน YMMV
AH

1
@AH ฉันต้องเห็นด้วยกับริ้นนอกเหนือจากบรรทัดเปิดมันไม่ได้ตอบคำถาม การตอบสนองของคุณกับริ้นคือ "บอกว่าเขาไม่รู้เกี่ยวกับต้นกำเนิดของข้อยกเว้น" แต่คุณไม่ได้ให้กำเนิดของข้อยกเว้นเพียงแค่ใช้ข้อยกเว้นแบบสุ่มบางอย่างระหว่างการสร้างวัตถุ

ผู้ชายอย่างจริงจัง? -1? คำตอบอื่น ๆ ส่วนใหญ่ไม่ได้ 100% เช่นกัน +1 จากฉันเพื่อชดเชย คำตอบนี้ให้คำแนะนำพื้นฐานที่ดีในโลกของการออกแบบชั้นเรียนที่ไม่ดี (การแก้ไข: ควรกล่าวถึงสิ่งก่อสร้างหลายขั้นตอนที่ต้องกล่าวถึง)
Jo

44

มันเกี่ยวข้องกับ OOP เท่านั้นหรือไม่

ไม่ได้ข้อยกเว้นและ OOP ไม่เกี่ยวข้องกัน

การจัดการข้อยกเว้นเป็นกลไกในการจัดการข้อผิดพลาด ข้อยกเว้นได้รับการจัดการโดยการบันทึกสถานะของการดำเนินการปัจจุบันในสถานที่ที่กำหนดไว้ล่วงหน้าและสลับการดำเนินการไปยังรูทีนย่อยเฉพาะที่เรียกว่าตัวจัดการข้อยกเว้น

การเปรียบเทียบ C ( ไม่ใช่ภาษา OOP จริง ๆมีความเป็นไปได้ที่จะเลียนแบบข้อยกเว้นใน C ) และ C ++ (OOP รองรับข้อยกเว้น) ไม่มีอะไรป้องกันคณะกรรมการมาตรฐานของ C จากการเพิ่มข้อยกเว้นในการจัดการ C มันจะยังไม่ทำให้ C เป็นภาษา OOP


2
คุณสามารถโต้แย้งได้ว่ามีข้อยกเว้นบางประการที่รองรับในระบบปฏิบัติการปกติแล้ว ปล่อยให้โปรแกรมของคุณทำงานผิดพลาด ("ข้อยกเว้น" ที่ไม่สามารถตรวจจับได้) และด้วยคอร์ดัมพ์และตัวดีบักคุณยังได้รับการติดตามสแต็ก
บา

12
แม้ MS พื้นฐานรูปแบบในช่วงต้นยุค 80 มีการจัดการข้อยกเว้น:ON ERROR GOTO xxxx
jwernerny

1
@bhaak นอกจากนี้เขายังสามารถพูดคุยเกี่ยวกับ Memory dumps ใน Windows
JohnL

11
@jwernerny การจัดการข้อผิดพลาด? แน่ใจ แต่ไม่มีใครเรียกการจัดการข้อยกเว้นนั้น ในความเป็นจริงมันเป็นประจำเมื่อเทียบกับการจัดการข้อยกเว้น (โครงสร้าง)
Konrad Rudolph

1
@ jwernerny ไม่แน่ใจว่าฉันติดตาม การจัดการข้อยกเว้นที่ฉันเข้าใจเป็นวิธีที่เฉพาะเจาะจงมากในการจัดการข้อผิดพลาด เมื่อฉันได้ยินข้อยกเว้นฉันคิดถึงtry catchโครงสร้างเสมอ
Andy

12

มีข้อยกเว้นคือสถานการณ์พิเศษที่ต้องการความสนใจและบ่อยครั้งที่การเปลี่ยนแปลงในการดำเนินการของโปรแกรม ตามคำจำกัดความนั้นข้อยกเว้นและการจัดการข้อยกเว้นไม่ จำกัด เฉพาะการวางแนวของวัตถุและข้อผิดพลาดของโปรแกรมอย่างง่ายถือเป็นรูปแบบของข้อยกเว้น

ภาษาเชิงวัตถุมักจะมีคลาสข้อยกเว้นเนทิฟและขึ้นอยู่กับบริบทคำว่า "ข้อยกเว้น" อาจอ้างถึงคลาสเนเชอรัลนั้นแทนแนวคิดทั่วไป การจัดการข้อยกเว้นเชิงวัตถุคือส่วนใหญ่ของการวางวัตถุน้ำตาล syntactic และสามารถเลียนแบบได้อย่างง่ายดายในภาษาที่ไม่ใช่เชิงวัตถุอย่างเด็ดขาด นี่คือตัวอย่าง C จากwikibook การเขียนโปรแกรม C :

#include <stdio.h>
#include <setjmp.h>

jmp_buf test1;

void tryjump()
{
    longjmp(test1, 3);
}

int main (void)
{
    if (setjmp(test1)==0) {
        printf ("setjmp() returned 0.");
        tryjump();
    } else {
        printf ("setjmp returned from a longjmp function call.");
    }
}

6
มันไม่ได้เป็นเพียงน้ำตาล syntactic การสร้างการคลายสแต็กเต็มรูปแบบใหม่และตัวจัดการ catch-based แบบพิมพ์เป็นเรื่องยากกับ setjmp นอกจากนี้การรวบรวมพิเศษของข้อยกเว้นทำให้เกิดข้อได้เปรียบซึ่งไม่สามารถเลียนแบบได้โดย setjmp
edA-qa mort-ora-y

3
ฉันเกลียดการยกเว้นคำอธิบายเป็นสถานการณ์พิเศษ ฉันอยากจะบอกว่าควรสร้างข้อยกเว้น (โยน) เมื่อสถานการณ์ข้อผิดพลาดไม่สามารถแก้ไขได้ด้วยบริบทปัจจุบันเพราะมีข้อมูลไม่เพียงพอในบริบทปัจจุบันเพื่อแก้ไขข้อผิดพลาดได้อย่างถูกต้อง
Martin York

+1 สำหรับsetjmp.h
gnat

9

คำตอบคือไม่ง่าย

ตัวอย่างที่ดีสำหรับภาษาที่ไม่ใช่ OO ที่มีข้อยกเว้นคือ ADA


4
หืมทำไม ADA ไม่ใช่ภาษา OO ได้รับแล้ว ADA83 ขาดความหลากหลาย แต่มันก็ยังสามารถพิจารณาได้ว่าเป็นวัตถุ นอกจากนี้เนื่องจาก ADA95 ภาษามีการวางวัตถุอย่างสมบูรณ์
yannis

เท่าที่ฉันรู้ว่าการจัดการข้อยกเว้นนั้นเก่ากว่า ADA83 ดังนั้น ADA ในตัวเองจึงไม่ใช่ OO ที่มีการจัดการข้อยกเว้น
Uwe Plonus

2
@YannisRizos: Ada83 มีแพ็คเกจและแพ็คเกจทั่วไป แต่ไม่มีวัตถุ พวกเขาได้รับการแนะนำให้รู้จักกับ Ada95
mouviciel

2
@Yannis - วัตถุที่ไม่มี polymorphism ก็เหมือนกับการเขียนโปรแกรมที่มีโครงสร้างโดยไม่มีบล็อกซ้อนอยู่ ความแตกต่างเป็นหนึ่งในลักษณะที่กำหนดของ OOP แม้แต่ใน Ada95 ประเภทที่สนับสนุนการรวมรันไทม์จะเรียกว่า "ประเภทที่ติดแท็ก" แทนที่จะเป็น "คลาส" แต่แน่นอนว่าเป็นเพียงการสะกดคำ Ada 83 มีเร็กคอร์ดที่ผันแปรและประเภทอื่น ๆ หลากหลาย แต่ไม่มีประเภทใดที่ให้คุณสมบัติที่เฉพาะเจาะจงกับ OOP Ada 83 นั้นเป็นแบบแยกส่วนและมีโครงสร้าง แต่ไม่ได้มุ่งเน้นวัตถุ
Steve314

3
@Yanis - โดยทั่วไปบางคนในชุมชน Ada (เช่นผู้สนับสนุนภาษาส่วนใหญ่) ไม่สามารถยอมรับได้ว่าคุณลักษณะสามารถดี แต่ยังไม่ได้นำไปใช้ในภาษาที่พวกเขาชื่นชอบ ถึงกระนั้นก็ไม่ใช่ว่าภาษาที่ดีจะต้องมีคุณสมบัติทางภาษาที่ดีทั้งหมด (แม้ว่าจะเชื่อได้ง่ายว่าผู้ออกแบบ Ada คิดเช่นนั้น) ฉันไม่ใช่ผู้เชื่อในแนวทางการออกแบบภาษาที่เรียบง่าย แต่ภาษา maximalist ก็ไม่ได้สมบูรณ์แบบเช่นกัน
Steve314

7

คำตอบที่ดีมากอยู่ที่นี่แล้ว ตัวอย่างอื่น ๆ สำหรับภาษาการเขียนโปรแกรมที่ไม่ใช่ OOP ที่มีข้อยกเว้น:

  • Oracle PL / SQL

  • คลาสสิค Visual Basic (V6 และต่ำกว่า "On Error Goto" เป็นรูปแบบการจัดการข้อยกเว้น IMHO)

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


อย่างน้อยเวอร์ชัน QuickBASIC ในภายหลังบน DOS (ซึ่งได้รับการคาดการณ์ไว้ของ Visual Basic; QB 4.5 คือ 1988 ตาม Wikipedia, VB 1.0 1991) มีข้อผิดพลาดในการจัดการโดยใช้ON ERROR GOTOไวยากรณ์ แม้แต่ QuickBASIC ก็มีแนวคิดที่คล้ายกันบางอย่างของ OO (ฉันคิดว่า QB 4.5 ยังรองรับคลาสบางประเภท) แต่คุณจะกดยากที่จะเรียกภาษา BASIC แบบดั้งเดิมเป็นภาษาเชิงวัตถุที่เหมาะสม [Wikipedia ]
CVn

5

แนวคิดพื้นฐานที่อยู่เบื้องหลังข้อยกเว้นคือการล้างการไหลของโปรแกรมเพื่อให้โปรแกรมเมอร์สามารถติดตามเส้นทางการดำเนินการ "ปกติ" ได้ง่ายขึ้น พิจารณากรณีง่าย ๆ ในการเปิดไฟล์ใน C. ทันทีหลังจากพยายามเปิดไฟล์โปรแกรมเมอร์จำเป็นต้องตรวจสอบการตอบสนองจากการเรียก fopen () และตัดสินใจว่าการโทรสำเร็จหรือไม่ หากการโทรไม่สำเร็จโปรแกรมเมอร์จะต้องตอบสนองอย่างเหมาะสม การเรียกครั้งต่อไปในพา ธ การเรียกใช้งาน "ปกติ" อาจเป็นการเรียกไปยัง fread () หรือ fwrite () ซึ่งจะปรากฏขึ้นหลังจากจัดการกับข้อผิดพลาดหรือความล้มเหลว นั่นอาจเป็นในหน้าจอถัดไป

ด้วยภาษาที่มีข้อยกเว้นการโทร fopen () ที่เทียบเท่าสามารถติดตามได้ทันทีโดย fread () หรือ fwrite () ไม่มีการจัดการข้อผิดพลาดที่ซ่อน "ขั้นตอนถัดไป" ของเส้นทางการดำเนินการ "ปกติ" โปรแกรมเมอร์สามารถเห็นเส้นทางปกติมากขึ้นในหน้าจอเดียวและสามารถติดตามการดำเนินการได้ง่ายขึ้น การจัดการข้อผิดพลาดถูกย้ายไปยังส่วนอื่นของโปรแกรม

การยกเว้นตัวเองไม่ใช่แนวคิดของ OOP แต่มักจะนำไปใช้โดยใช้แนวคิดของ OOP ซึ่งทำให้สะดวกและมีประสิทธิภาพมากขึ้น ตัวอย่างเช่นข้อยกเว้นอาจถูกกำหนดด้วยลำดับชั้นการสืบทอด การใช้ตัวอย่างการเปิดและการอ่านหรือเขียนไฟล์ของเราการเรียกแต่ละครั้งนั้นอาจสร้างข้อยกเว้นที่หลากหลาย - FileClosedException, DeviceFullException, NoSuchFileException, InsufficientFilePermissionsException ฯลฯ แต่ละสายนั้นอาจสืบทอดมาจาก IOException สืบทอดจาก GenericException

หากโปรแกรมเมอร์กำลังทำการติดตั้งที่รวดเร็วและสกปรกเพื่อทดสอบแนวคิดเขาอาจละเลยการจัดการข้อยกเว้นเป็นส่วนใหญ่และใช้ตัวจัดการเดียวสำหรับ GenericException ตัวจัดการนั้นจะจัดการ GenericException และข้อยกเว้นใด ๆ ที่สืบทอดจาก GenericException ถ้าเขาต้องการจัดการกับข้อยกเว้นที่เกี่ยวข้องกับไฟล์ด้วยวิธีเดียวกันเขาสามารถเขียน handler สำหรับ FileException ที่จะถูกเรียกใช้สำหรับ FileExceptions และข้อยกเว้นใด ๆ ที่สืบทอดจาก FileException หากเขาต้องการเขียนโปรแกรมที่จะตอบสนองต่อเงื่อนไขข้อผิดพลาดต่าง ๆ เขาสามารถเขียน handler เฉพาะสำหรับข้อยกเว้นเฉพาะแต่ละข้อ


3

บางคนก็ตอบว่า "ไม่" อย่างถูกต้องพร้อมตัวอย่างภาษา ฉันคิดว่าฉันสามารถขยายได้โดยการเพิ่มตัวอย่างเกี่ยวกับวิธีเพิ่มข้อยกเว้นให้กับภาษาโดยไม่เกี่ยวข้องกับ OOP

ฉันจะทำสิ่งนี้ในกรณีของ DSKL (Declarative Sequential Kernel Language) ของOZซึ่งเป็นภาษาที่เหมาะสำหรับสถาบันการศึกษาเช่นนี้ DSKL (หรือ DKL) สามารถดูได้ที่นี่ (ผลการค้นหาแบบสุ่ม) ส่วน Statement และ Values คำจำกัดความที่แน่นอนนั้นไม่สำคัญนอกเหนือจากนี้เป็นภาษาที่ง่ายมากโดยไม่มีตัวแปรที่แก้ไขได้ (จะถูกประกาศและผูกไว้ภายหลัง) และไม่มีการสร้าง OOP

ไม่สามารถเพิ่ม OOP เป็นภาษานามธรรมสำหรับภาษาเคอร์เนลนี้ได้ โดยการเพิ่มชื่อเฉพาะให้กับภาษาเคอร์เนล (NewName) และการใช้การกำหนดขอบเขตแบบท้องถิ่นสามารถทำให้การห่อหุ้มสำเร็จได้ หรือโดยการเพิ่มสถานะที่ไม่แน่นอนให้กับภาษาเคอร์เนล (NewCell) และการใช้การกำหนดขอบเขตที่เหมาะสมของ OOP ด้วยการห่อหุ้มสามารถทำได้ แต่ไม่สามารถทำได้ด้วยภาษาเคอร์เนลที่ระบุเพียงอย่างเดียว

หากเราเพิ่มข้อยกเว้นในภาษาเคอร์เนลเราจะมีภาษาที่ไม่มีการสนับสนุน OOP แต่มีข้อยกเว้น ให้ฉันแสดงวิธี:

การนิยามเครื่องนามธรรมด้วยสแต็กและที่เก็บข้อมูลเราสามารถกำหนดสิ่งที่แต่ละคำสั่งในภาษาของเราควรทำ ( ความหมายของคำสั่ง) ตัวอย่างเช่นskipในสแต็กไม่ควรทำอะไรเลยA = 3ในสแต็กควรผูก (/ รวม) A ถึง (/ ด้วย) 3

เราเริ่มต้นด้วยการเพิ่มไวยากรณ์ของการกำหนดข้อยกเว้นของเรา เราทำสิ่งนี้โดยการเพิ่มอนุประโยคอีกสองข้อลง<statement>ใน DKL

<statement>  ::== ... (old stuff)
                 | try <statement> catch <id> then <statement> end
                 | raise <id> end

นี่คือการลอง / จับที่รู้จักและวิธีการยก / โยนข้อยกเว้น

เรากำหนดความหมายของพวกเขาโดยวิธีที่พวกเขาควรทำงานบนเครื่องนามธรรม:

ลองใช้
คำสั่ง semantic คือ: (try <statement1> catch <id> then <statement2> end)
Do:

  1. กดลงบนสแต็กคำสั่ง semantic (catch <id> then <statement2> end)
  2. กดลงบนสแต็กคำสั่ง semantic (<statement1>)

โปรดทราบว่าคำสั่ง 1 จะอยู่ด้านบนสุดของสแต็กและลองดำเนินการก่อน

เพิ่ม
คำสั่งทางความหมายคือ: (raise <id> end)
ทำ:

  1. หากไม่มีอะไรเพิ่มเติมอยู่ในสแต็กให้หยุดและรายงานข้อยกเว้นที่ไม่ได้ตรวจสอบ
  2. มิฉะนั้นให้เปิดข้อความสั่งความหมายแรกจากสแต็ก ถ้าไม่ใช่คำสั่ง catch ให้ไปที่ขั้นตอนที่ 1
  3. เราได้รับการจับบนแบบฟอร์ม(catch <id> then <statement> end)
    กด(<statement>)ลงบนกองซ้อน

Catch
ถ้าเราเห็นคำสั่ง catch ในระหว่างการดำเนินการตามปกติหมายความว่าสิ่งใดก็ตามที่ถูกดำเนินการภายในโดยไม่มีการยกระดับขึ้นไปยกเว้นระดับนี้ ดังนั้นเราแค่ป๊อปอัพcatchสแต็คและไม่ทำอะไรเลย

QED เรามีภาษาที่มีข้อยกเว้นและไม่มีความเป็นไปได้ของ OOP

ฉันได้ลบส่วนของสภาพแวดล้อมออกจากเครื่องนามธรรมเพื่อให้ง่ายขึ้น


1

เลขที่

IIRC มีข้อยกเว้นปรากฏขึ้นก่อนภาษา OO แรก AFAIK ข้อยกเว้นได้รับการสนับสนุนเป็นครั้งแรกโดยการนำ LISP ไปใช้ก่อน ภาษาที่มีโครงสร้างต้น (เช่น ALGOL) และภาษา OO ตอนต้น (เช่น SIMULA) ไม่สนับสนุนข้อยกเว้น


แน่นอนว่า ALGON 68 มีข้อยกเว้น ("เหตุการณ์") แต่ก็มีทุกอย่างอื่นเช่นกัน PL / ฉันมีพวกเขา ("ON เงื่อนไข") ด้วยและมีวรรณกรรมจาก 1969 อธิบายการใช้งานของพวกเขา
Ross Patterson
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.