טיפול בחריגות – הבדלי גרסאות

תוכן שנמחק תוכן שנוסף
מ קטלוג תבנית עריכה
מ בוט: החלפת טקסט אוטומטית (-([א-תְֱֲֳִֵֶַָֹֻּּׁׂ]\W*)(?:‎|‏)+ +\1, -(?:‎|‏)+(\W*[א-תְֱֲֳִֵֶַָֹֻּּׁׂ]) +\1)
שורה 29:
 
==התפתחות הטיפול בחריגות==
מנגנון הטיפול בחריגות פותח לאחר הצגת שפת [[C Plus Plus|C++]] והתקבל מאוחר יותר על ידי ה-[[ANSI]]. המהדר של [[בורלנד]] תומך בטיפול בחריגות, החל מגרסה 4.0 המשתמשת בספריית המחלקות 2OWL.3. גרסאות מוקדמות של סביבת הפיתוח [[Visual C Plus Plus|Visual C++]] אפשרו טיפול חלקי בחריגות באמצעות פקודות מאקרו. לאחר מכן אפשרה סביבת הפיתוח Visual Studio .NET טיפול מלא בחריגות.
 
==טיפול בחריגות בשפות תכנות שונות==
שורה 43:
אם בשפה קיימת ספריית מחלקות לטיפול בחריגות, ניתן להגדיר מחלקה יורשת מהן, המותאמת לצורכי תוכנית כלשהי.
 
===[[C Plus Plus|C++]]===
ב++C ניתן לזרוק '''כל אובייקט שהוא''', כולל מספרים, מצביעים או טיפוסים שהוגדרו על ידי המשתמש. השפה מאפשרת - אך לא מחייבת - הגדרה בחתימת הפונקציה של רשימת האובייקטים אותם הפונקציה עשויה לזרוק. פונקציה המשתמשת באפשרות הזאת איננה יכולה לזרוק חריגות אחרות.
 
בעבר נהגו מתכנתי C++ לכתוב בעצמם את המחלקות המטפלות בחריגות, אך עם השנים פותחו עבור השפה מחלקות המטפלות בחריגות. בתקן ה-[[ANSI]] ל++C צורפו אליו פקודות סטנדרטיות לטיפול בחריגות.
 
כאשר נזרקת חריגה ב++C, הבקרה לא מופנית ישירות אל הנקודה שבה יתבצע הטיפול בחריגה, אלא עולה בהיררכיית הקריאות תוך קריאה לdestructor של כל אובייקט שהוקצה על המחסנית ויצא מטווח הקריאה (scope). כך נמנעת אפשרות שלא יתבצע destructor עבור משתנים מקומיים לפונקציה בזמן יציאה ממנה, דבר שעלול לגרום דליפות זיכרון ובמקרים מסוימים להתנהגות לא מוגדרת של התוכנית. טכניקת תכנות נפוצה מנצלת תכונה זו על מנת לדאוג לכך שכל משאב מוגבל שנתפס - זיכרון שהוקצה דינמית, קובץ שנפתח, [[מנעול (מדעי המחשב)|מנעול]] וכדומה - ישוחרר בכל מקרה, על ידי יצירת אובייקט שכל תפקידו הוא לבצע את השחרור של המשאב בזמן ההריסה (לדוגמה, מצביעים חכמים לטיפול בהקצאות זיכרון דינמיות).
שורה 62:
 
===שפות [[NET.]] ===
שפות כדוגמת [[C sharp|C#]], שנכתב עבורן מהדר העומד בתקן [[Common Language Specification|CLS]] יכולות לנצל את יתרונות סביבת הריצה [[Common Language Runtime|CLR]] של [[NET Framework.]] ובהן מחלקות מוכנות רבות לטיפול בחריגות – כגון: Exception, או ArithmeticException – הקיימות ב[[מרחב שמות|מרחב השמות]] הראשי System ובמרחבי השמות שתחתיו.
 
ניתן לזרוק חריגה תקנית של .Net Framework, בתוכנית הכתובה בשפת .Net אחת ולקלוט את החריגה בתוכנית הכתובה בשפת .Net אחרת.
 
===[[Visual Basic]]===
עד גרסה 6.0 (כולל) – הטיפול בחריגות נעשה באמצעות פקודות השייכות לשפה אשר מפעילות שגרת טיפול. העברת נתונים לגבי החריגה התבצעה באמצעות האובייקט Err אשר נוצר בעת התרחשות שגיאה.
החל מגרסה 7.0 הנקראת Visual Basic .NET – ניתן להשתמש במחלקות החריגות של .NET Framework
 
===[[Perl]]===
שורה 82:
==לקריאה נוספת==
* מאיר סלע, '''JAVA על כוס קפה''' – מרכז ההדרכה 2000.
* Bradley L. Jones‎, '''C# סדנת לימוד''' – SAMS והוד־עמי.
* Stroustrup, Bjarne (2000). The C++ Programming Language, Special Edition, Addison-Wesley. ISBN 0-201-70073-5.