CodeGym /وبلاگ جاوا /Random-FA /خطای کد بیانیه غیرقابل دسترس در جاوا
John Squirrels
مرحله
San Francisco

خطای کد بیانیه غیرقابل دسترس در جاوا

در گروه منتشر شد
یک عبارت کد غیرقابل دسترسی یک مشکل رایج در میان مبتدیان جاوا است. بسیاری از توسعه دهندگان مبتدی این خطا را با "کد مرده" اشتباه می گیرند - یکی دیگر از پدیده های مرتبط با جاوا. اگرچه این دو از نظر ظاهری مشابه هستند، اما تفاوت هایی وجود دارد که در این پست به آنها خواهیم پرداخت. به غیر از آن، خواهید فهمید که متداول‌ترین دلایلی که کامپایلر شما یک عبارت کد غیرقابل دسترس را برمی‌گرداند چیست و چند راه‌حل آسان برای راه‌اندازی مجدد کد خود و اجرای مجدد آن را کشف خواهید کرد.

کد دست نیافتنی چیست؟

طبق تعریف، عبارت غیرقابل دسترس عبارتی است که هنگام اجرای کد آماده برای استقرار توسط یک کامپایلر اجرا نمی شود. یک دستور بازگشت کد غیرقابل دسترس معمولاً نشانه یک خطای منطقی در برنامه است. اگرچه دلایل متعددی وجود دارد که چرا شما با چنین عبارتی مواجه می شوید، اما در همه موارد، کدهای غیرقابل دسترسی اضافی هستند، برنامه شما را به هم می ریزند و به هر قیمتی باید از آن اجتناب کنید.

کد دست نیافتنی در مقابل کد مرده

در جامعه توسعه، مفاهیم کد "غیر قابل دسترس" و "مرده" عملا مترادف هستند. با این حال، اگر هنگام خواندن مستندات سختگیر باشید، ممکن است ببینید که دستورالعمل‌های توسعه اغلب این دو را جداگانه ذکر می‌کنند. آیا تفاوتی بین کد مرده و غیرقابل دسترسی وجود دارد؟ اساساً تمایز بین این دو خطا در نحوه واکنش کامپایلر به آنها است. اگر کدی که در کامپایلر وارد می‌کنید غیرقابل دسترسی باشد ، در اعلان جاوا با خطای زمان اجرا کامپایل مواجه خواهید شد. اگر عبارت شما " کد مرده " باشد، هیچ خطایی در زمان اجرا وجود نخواهد داشت - یک توسعه دهنده اخطار سیستم زیر را دریافت می کند:
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" اجرا نخواهد شد.
  • حلقه بی نهایت - هیچ کدی که بعد از حلقه بی نهایت نوشته اید اجرا نمی شود زیرا سیستم به تکرار عمل حلقه ادامه می دهد. بنابراین، هنگام تبدیل کد شما به کد بایت، کامپایلر یک خطای کد غیرقابل دسترسی ارسال می کند.
برای کمک به پرچم‌گذاری و رفع این مشکلات، بیایید روی آنها بزرگنمایی کنیم.

اظهارات برگشتی

دستور بازگشت بخشی از گروه کلمه کلیدی Transfer است، به این معنی که روش شما را خاتمه می دهد. برای جدا کردن توابع مفید است و به خوانایی و تمیز نگه داشتن کد شما کمک می کند. با این حال، از آنجایی که پس از بازگشت = 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");
    }
}
در اینجا نحوه سوء استفاده از عبارت return در کامپایلر نمایش داده می شود:

prog.java:11: error: unreachable statement
System.out.println(“My code will run”);
^
1 error
برای تقویت آموخته هایتان، پیشنهاد می کنیم یک درس ویدیویی از دوره جاوا ما تماشا کنید
دستورات Break دستورات Break نوع دیگری از کلمات کلیدی هستند که باید هنگام نوشتن توابع جاوا مراقب آنها باشید. طبق تعریف، کلمه کلیدی break برای پایان دادن به یک حلقه استفاده می شود. در مثال زیر، هنگامی که یک توسعه دهنده از حلقه خارج می شود، دیگر نمی تواند دستور را در خط 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");
از آنجایی که قبل از "از دیدن شما خوشحالم" یک حلقه نامتناهی وجود دارد ، این دستور هرگز اجرا نمی‌شود و یک خطای کد غیرقابل دسترسی را باز می‌گرداند.

نتیجه

برای جلوگیری از دسترسی به کدهای غیرقابل دسترسی، باید مطمئن شوید که در تمام عبارات سیستم شما جریان دارد. اکثر مشکلات کد غیرقابل دسترس جاوا مربوط به مدیریت کلمات کلیدی و مدیریت ضعیف حلقه ها است. در پایان روز، بررسی مجدد کد تنها راه آزمایش شده و واقعی برای جلوگیری از اشتباهات غیرقابل دسترسی است. شما نیز نباید از آنها دلسرد شوید - عادت ایجاد کدهای جاوای روان با سالها تجربه و تمرین همراه است. بنابراین، بیایید IDE را بزنیم و شروع به ساختن محصولات نرم افزاری عالی کنیم.
نظرات
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION