CodeGym /בלוג Java /Random-HE /שגיאת קוד הצהרה בלתי ניתנת להשגה ב-Java
John Squirrels
רָמָה
San Francisco

שגיאת קוד הצהרה בלתי ניתנת להשגה ב-Java

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

מהו קוד בלתי ניתן להשגה?

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

קוד בלתי ניתן להשגה לעומת קוד מת

בקהילת הפיתוח, המושגים "בלתי ניתן להשגה" ו"מת" הם למעשה מילים נרדפות. עם זאת, אם אתה עצבני בעת קריאת התיעוד, אתה עשוי לראות שהנחיות פיתוח מזכירות לעתים קרובות את השניים בנפרד. האם יש הבדל בין קוד מת וקוד בלתי ניתן להשגה? בעיקרון, ההבחנה בין שתי השגיאות היא באופן שבו המהדר מגיב אליהן. אם הקוד שהזנת במהדר אינו ניתן להשגה , תקבל שגיאת זמן ריצה של קומפילציה בהודעת Java. אם ההצהרה שלך היא " קוד מת ", לא יהיו שגיאות זמן ריצה - מפתח יקבל את אזהרת המערכת הבאה:
class DeadCode {
    void deadcode_Method(boolean b) {
    System.out.println("Reachable statement");
        if(true) {
        return;
        }
    System.out.println("Unreachable statement"); // dead code
    }
}
מכיוון שאין שגיאת מהדר ישירה במקרה של קוד מת, קשה יותר לזהות אותו. עם זאת, אם אתה עוקב בקפידה אחר החזרות System.out.printIn , תפיסת קוד מת לא אמורה לגרום לך לצרות.

מדוע אתה מקבל הצהרות קוד בלתי ניתנות להשגה

החדשות הטובות הן שקל לאתר את הגורם לבעיות קוד בלתי ניתנות להשגה. ישנן שלוש סיבות עיקריות לכך שהמהדר שלך ממשיך להחזיר שגיאות:
  • הצהרות העברה. אם תשבור את הקוד שלך עם הצהרת return, שום דבר אחרי "return = true" לא יתבצע.
  • לולאה אינסופית - אף קוד שכתבת אחרי הלולאה האינסופית לא יבוצע מכיוון שהמערכת תמשיך לחזור על פעולת הלולאה. לפיכך, בעת המרת הקוד שלך לקוד בתים, המהדר ישלח שגיאת קוד בלתי ניתנת להשגה.
כדי לעזור לך לסמן ולתקן את הבעיות האלה, בואו נתקרב אליהן.

החזר הצהרות

הצהרת החזרה היא חלק מקבוצת מילות המפתח העברה, כלומר היא מסיימת את השיטה שלך. זה מועיל להפרדת פונקציות ועוזר לשמור על הקוד שלך קריא ונקי. עם זאת, מכיוון שאינך יכול להוסיף הצהרות חדשות לפונקציה לאחר return = true, ניסיון להמשיך את הפונקציה לאחר מילת המפתח ייתן לך שגיאת מהדר "קוד בלתי ניתן להשגה". בואו נסתכל על דוגמה של טיפול שגוי "החזר = נכון" והדרך שבה מהדר מגיב אליו.
class GFG {
    public static void main(String args[])
    {

        System.out.println("My code will run");

        return;

        // ironically, this code will never run
        // here’s an unreachable code message a developer gets.
        System.out.println("My code will run");
    }
}
כך יוצג שימוש לרעה במשפט החזרה במהדר:

prog.java:11: error: unreachable statement
System.out.println(“My code will run”);
^
1 error
כדי לחזק את מה שלמדת, אנו מציעים לך לצפות בשיעור וידאו מקורס Java שלנו
Break statements Break statements הם סוג נוסף של מילות מפתח שעליך להיזהר איתן בעת ​​כתיבת פונקציות Java. לפי ההגדרה, מילת המפתח הפסקה משמשת לסיום לולאה. בדוגמה למטה, כאשר מפתח יוצא מהלולאה, הוא לא יוכל עוד לבצע את ההצהרה בשורה 8 - כך, המהדר יראה שגיאת הצהרה בלתי ניתנת להשגה. להלן הקוד לדוגמה שיגרום להצהרת קוד בלתי ניתנת להשגה:
public class JavaCodeGeeks
     {
    public static void main(String[] args) {
     for(int i=1;i<5;i++)
        {
        System.out.println(i);
        break;
        System.out.println("Code after break");
        }
    }
}
בהסתכלות על השגיאה מנקודת מבט של מהדר, תקבל את הצהרת השגיאה הבאה.

JavaCodeGeeks.java:8: error: unreachable statement
System.out.println("After break");
                ^
1 error

המשך בהצהרות

Continue היא מילת מפתח של בקרת לולאה המשמשת לחזרה על פעולות. בכל פעם שאתה רוצה שביצוע לולאה יתחיל מאפס מעצמו, הוסף המשך לקוד שלך. ההצהרה שימושית כדי לעזור למפתחים לבחור אילו הצהרות של הלולאה הם רוצים לחזור על ואלו שלא יכניסו באיטרציה. למרות שהמשך היא מילת מפתח פשוטה לשימוש, אי הבנה מלאה של איך זה עובד מוביל את המפתחים למלכודת "קוד בלתי ניתן להשגה". מכיוון שאחרי שנתקלה בהמשכה, מערכת תחזור על הלולאה, מילת המפתח לא תוכל להגיע להצהרות שאחריה. נגיד, יש לך את הקוד הבא:
public class JavaIsFun
{
    public static void main(String[] args) {
        for(int i=0;i<8;i++)
        {
            System.out.println(i);
            if(i==5)
            {
                continue;
                System.out.println("Coding after continue");
            }
        }
    }
}
המערכת לא תבצע את ההצהרה "Coding after continue" שלך - המהדר יודיע לך על כך מיד.
JavaIsFun.java:10: error: unreachable statement
                                System.out.println("Coding after continue");

לולאות אינסופיות

תרחיש הדומה לדוגמאות של מקרי שימוש במילות מפתח "הפסק" ו"המשך" הוא של לולאה אינסופית. כאשר מעצבים לולאה אינסופית, מפתח צריך לזכור ששום הצהרה אחריה לא תפעל לעולם. לפיכך, אם לא תשבור את הלולאה, כל הקוד שנכתב אחריו לא יהיה ניתן להשגה. הנה דוגמה מעניינת לטיפול שגוי בלולאה אינסופית שצריך לבדוק:
public class JavaCodeGym
{
    public static void main(String[] args) {
        while(true)
        {
            System.out.println("Hey there");
        }
        System.out.println("Nice to see you");
    }
}
האם אתה יכול לנחש היכן מסתתרת השגיאה? המהדר יצביע עליו מיד לאחר שתפעיל את הקוד שלך:
//unreachable code statement compiler error
JavaCodeGym.java:10: error: unreachable statement
                System.out.println("Nice to see you");
מכיוון שיש לולאה אינסופית לפני "נחמד לראות אותך" , ההצהרה לעולם לא תתבצע ותמשיך להחזיר שגיאת קוד בלתי ניתנת להשגה.

סיכום

כדי להימנע מקוד בלתי ניתן להשגה, עליך לוודא שיש זרימה לכל הצהרות המערכת שלך. רוב בעיות הקוד הבלתי ניתנות להשגה של Java קשורות לטיפול במילות מפתח וניהול לקוי של לולאות. בסופו של יום, בדיקה כפולה של הקוד שלך היא הדרך המנוסה והאמיתית היחידה להימנע משגיאות קוד בלתי ניתנות להשגה. גם אתה לא צריך להתייאש מהם - ההרגל ליצור קוד Java זורם מגיע עם שנים של ניסיון ותרגול. אז בואו נגיע ל-IDE ונתחיל לבנות מוצרי תוכנה מדהימים.
הערות
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION