CodeGym /مدونة جافا /Random-AR /خطأ في رمز البيان غير قابل للوصول في 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، فإن محاولة متابعة الوظيفة بعد الكلمة الأساسية ستعطيك خطأ في برنامج التحويل البرمجي "رمز غير قابل للوصول". دعونا نلقي نظرة على مثال لسوء التعامل مع "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 الخاصة بنا
عبارات الاستراحة هي نوع آخر من الكلمات الأساسية التي يجب عليك توخي الحذر معها عند كتابة وظائف Java. حسب التعريف، يتم استخدام الكلمة الأساسية 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");
            }
        }
    }
}
لن يقوم النظام بتنفيذ عبارة "الترميز بعد المتابعة" - وسيخبرك المترجم بذلك على الفور.
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