חיפוש ]

try…catch…finally בג'אווה סקריפט: טכניקות לטיפול בשגיאות​

הצהרת try...catch...finally בג'אווה סקריפט משמשת לטיפול ב exceptions ולניהול שגיאות בצורה אלגנטית. היא מאפשרת להריץ בלוק של קוד ולטפל בכל שגיאה שעלולה להתרחש במהלך ביצועו, ובכך למנוע את הקריסה של היישום כולו בשל שגיאות בלתי צפויות.

מבנה הצהרת try…catch…finally

המבנה הבסיסי של הצהרת try...catch...finally כולל שלושה בלוקים:

  • try: בלוק זה מכיל את הקוד שעלול להקפיץ שגיאה.
  • catch: בלוק זה מטפל בשגיאה אם היא מתרחשת בבלוק ה-try.
  • finally: בלוק זה מכיל קוד שיופעל תמיד, בין אם התרחשה שגיאה ובין אם לא.

דוגמה בסיסית

try {
        // קוד שעלול להקפיץ שגיאה
        let result = riskyFunction();
        console.log(result);
    } catch (error) {
        // טיפול בשגיאה
        console.error('An error occurred:', error);
    } finally {
        // קוד שתמיד יופעל
        console.log('Execution completed.');
    }
    

בדוגמה זו, בלוק ה-try מנסה לבצע את הפונקציה riskyFunction(). אם מתרחשת שגיאה, בלוק ה-catch יטפל בה, ובלוק ה-finally יופעל תמיד, ללא קשר לתוצאה.

שימוש ב-try…catch לאימות קלט

הצהרת try...catch יכולה מאד לעזור באימות קלט של משתמש ולטיפול בשגיאות בצורה אלגנטית.

function validateAge(age) {
        try {
            if (isNaN(age)) {
                throw new Error('Age must be a number');
            }
            if (age < 18) {
                throw new Error('Age must be at least 18');
            }
            console.log('Age is valid');
        } catch (error) {
            console.error('Validation error:', error.message);
        } finally {
            console.log('Validation attempt completed.');
        }
    }

    validateAge('abc'); // קלט לא תקין
    validateAge(15);    // גיל מתחת ל-18
    validateAge(25);    // גיל תקין
    

בדוגמה זו, פונקציית validateAge משתמשת בהצהרת try...catch...finally כדי לבדוק אם הקלט הוא גיל תקין. היא מקפיצה שגיאה אם הקלט אינו מספר או אם הוא מתחת לגיל 18.

הנה פוסט מפורט על הצהרת throw ב-JavaScript

דוגמה חיה – אימות גיל

שימוש בהצהרות try…catch מקוננות

ניתן גם לקנן הצהרות try...catch כדי לטפל בשגיאות ברמות שונות.

try {
        try {
            let result = riskyFunction();
            console.log(result);
        } catch (innerError) {
            console.error('Inner error:', innerError);
            throw new Error('An error occurred in the inner try block');
        }
    } catch (outerError) {
        console.error('Outer error:', outerError);
    } finally {
        console.log('Execution completed.');
    }
    

בדוגמה זו, בלוק try...catch פנימי מטפל בשגיאות מהפונקציה riskyFunction, בעוד שבלוק try...catch חיצוני מנהל שגיאות נוספות שעשויות להיזרק מבלוק ה-catch הפנימי.

סוגי שגיאות ב-JavaScript

JavaScript מזהה סוגים שונים של שגיאות שיכולות להתרחש במהלך ביצוע הקוד. הבנת סוגי שגיאות אלה יכולה לעזור בניפוי ותיקון בעיות בצורה יעילה:

  • SyntaxError: שגיאה זו מתרחשת כאשר קוד ה-JavaScript מכיל תחביר לא חוקי, למשל, חסר סוגר או סוגריים.
  • ReferenceError: שגיאה זו מתרחשת כאשר מפנים למשתנה שאינו קיים, לדוגמה, ניסיון להשתמש במשתנה שלא הוצהר.
  • TypeError: שגיאה זו מתרחשת כאשר ערך כלשהו אינו מהסוג המצופה, למשל, ניסיון לקרוא לפונקציה שאינה פונקציה.
  • RangeError: שגיאה זו מתרחשת כאשר ערך אינו בטווח המותר, למשל, ניסיון ליצור מערך עם אורך לא חוקי.
  • URIError: שגיאה זו מתרחשת כאשר יש שגיאה בקידוד או בפענוח של URI, לדוגמה, שימוש בתו לא חוקי בפונקציות URI.
  • EvalError: שגיאה זו מתרחשת כאשר נעשה שימוש שגוי בפונקציה eval(). אף על פי שהיא אינה נפוצה בשימוש מודרני, היא עדיין קיימת כשגיאה אפשרית.

RuntimeError: זהו מונח כללי לכל שגיאה שמתרחשת בזמן ריצת הקוד, וכוללת שגיאות מהסוגים שהוזכרו לעיל ושגיאות אחרות במצבים ספציפיים.

סיכום

הצהרת try...catch...finally היא כלי מאד חשוב ואף נפוץ ב-JavaScript לניהול שגיאות ו exceptions. שימוש במבנה זה יבטיח שהקוד שלכם יפעל בצורה חלקה ויטפל במצבים בלתי צפויים בצורה אלגנטית.

רועי יוסף
רועי יוסף

מפתח אתרים ותבניות וורדפרס. מספק אתרים עם ביצועים גבוהים, מותאמים למנועי חיפוש ובעלי קוד ולידי, סמנטי ונקי. צריכים עזרה? צרו איתי קשר.

0 תגובות...

תגובה חדשה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...