كما هو المُبتدئ كان الخبير، من منهم لم يواجه مشكلة في شفرة جافا؟
و كل البدايات تتشابه، لذا تتشابهُ المشاكل التي يُعاني منها المبتدئون عموماً، هذه المشاكل من المُمكن أن نُسميها مشاكل البدايات.
وكلما تتطور المبرمج في عمله و علمه قلّت لديه هذه الأخطاء حتى تتلاشى.
هنا أذكُر لك من المشاكل التي تواجه المُبتدئين في لغة الجافا و كيف يتغلّب عليها.
1. اختلاف اسم الفئة عن إسم الملف
إذا لم تكن من مستخدمي محررات الجافا المتقدمة فلا بد أنك عانيت هذه المشكلة في شفرة الجافا.
يطلب من متعلمي الجافا المبتدئين في الجامعات و المعاهد عادة إستخدام محرر بدائي مثل notepad حتى يتعودوا على أساسيات الجافا و يحفظوا أساسياتها الضرورية.
وجود هذه المشكلة سيواجهك ما دُمت تستخدم محرراً عادياً، ولكن بإنتقالك إلى المحررات الأكثر تطوراً سيهتم المحرر بهذا الأمر بدلاً عنك.
هذا مثال للمشكلة حيثُ اختلف الإسمان بنقص الحرف r في نهاية إسم الفئة.
كيف تتغلب على هذه المشكلة: إذا كان الإسم معقداً أو طويلاً إنسخه بدلاً عن كتابته، و ما لم يكُن إستخدامك للمحررات البدائية ضرورياً إنتقل إلى محرر أحدث.
2. نسيان الفاصلة
هذه المشكلة في شفرة الجافا يقعُ فيها المبتدئ و الخبير على حدٍ سواء.
وضعُ الفاصلة في نهاية الجملة في جافا يحدد نهاية الجملة التي سيتم تنفيذها، و نسيانُها من الأخطاء المتكررة.
كيف تتغلب على هذه المشكلة: لا يوجد حل مباشر لحل هذه المشكلة سوى الإهتمام بوضعها عند نهاية الجمل.
3. حلقة تكرارية بلا نهاية
الحلقة التكرارية اللا نهائية تؤدي إلى عمل البرنامج بصورة مستمرة.
بمعنى آخر تعليق البرنامج في نقطة محددة لا يتقدم ولا يتأخر.
هذا الخطأ من الأخطاء المنطقية و التي يصعُب إيجادها في البرامج الكبيرة خاصة.
من مسببات الحلقات التكرارية اللا نهائية حدوث أخطاء في شرط التوقف للحلقة التكرارية، و هنا أعطيك مثالاً لمثل هذه الحالة.
كيف تتغلب على هذه المشكلة: الخطأ المنطقي ليس من الممكن التغلب عليه إلا بالمنطق، لذا فللتأكد من أن الشفرة البرمجية تصل إلى مكان محدد إطبع جملة بعد الحلقة التكرارية للتأكد من أن التنفيذ يصل إلى هذه النقطة أم لا، هذا طبعاً إن لم تكن تستخدم المصحح debugger.
4. switch case بدون break
العبارة switch تُستخدم لإختيار إجراء لمدخل واحد.
ما يحدث في الرد الآلي لدى شركات الإتصالات “للحصول على رصيدك إضغط الرقم 1، لإنهاء المكالمة إضغط الرقم 2” مثالٌ مناسب لإستخدام العبارة switch.
بناءً على المُدخل يتم تنفيذ عدة خطوات، و المُتوقع بنهاية هذه الخطوات الخاصة بالإدخال رقم 1 مثلاً أن لا يتم تنفيذ أي شئ متعلق بالرقم 2 أو 3.
ولكن عند نسيان عبارة break بنهاية الخطوات الخاصة بالرقم 1 سينتقل التنفيذ تلقائياً إلى الخطوات التالية دون إعتبار إلى أي رقم تنتمي هذه الخطوات.
هذا مثالٌ لهذه الحالة
بينما تتوقع الحصول على هذه النتيجة
ستجد أنك قد حصلت على هذه النتيجة
كيف تتغلب على هذه المشكلة: إبدأ بإنشاء الهكيل العام لـ switch مع وضع break في كل حالة ثم أدخل المنطق.
5. خطأ في الدالة main
هذا الخطأ في تعريف الدالة main نفسها، و السبب الرئيسي هو قلة التعود على كتابتها بالطريقة الصحيحة.
فهناك مجموعة من المبرمجين يفضلون حفظ الدوال – ما هو أسلوبك مع الدوال: هل أنت المبرمج الذي يحفظ أم المبرمج الذي يبحث؟ – ويحدث الخطأ كثيراً بنسيان الأقواس مثل هذه الحالة
أو بنسيان جزء من تعريف الدالة مثل هذه الحالة
طريقة التغلب عليها: عوّد نفسك على كتابتها و احفظها مثل اسمك.
6. قوس مفقود
يعتبر القوس المفقود من المشاكل التي تصاحب كلّ شفرة برمجية غير منظمة و إن صغُرت.
كما أنها تصاحب البرمجيات الكبيرة أحياناً، و تقل كلّما كانت الشفرة المصدرية مُنظمة.
كيف تتغلب على هذه المشكلة: إبدأ بوضع الأقواس قبل كتابة أي إجراءات داخلها، ولا تفتح أيّ قوس دون إغلاقه فوراً، و استخدم التعليقات بنهاية الأقواس.
7. استخدام = للمقارنة بدلاً عن ==
هذه المشكلة في شفرة جافا قد يكون سببُها النسيان أو عدم المعرفة.
للمقارنة بين رقمين من النوع int يتم إستخدام عبارة == بدلاً عن = و التي تُتسخدم لإسناد القيمة.
فبدلاً عن إستخدام المقارنة في عبارة if بهذه الطريقة
يجب كتابتها هكذا
كيف تتغلب على هذه المشكلة: إعلم أن المقارنة تتم بـ == ، لا شيء آخر.
8. مقارنة قيم الكائنات بإستخدام ==
إن استطعت تجاوز النقطة السابقة فيجب أن تتفادى هذه المشكلة أيضاً.
حين تكونُ المقارنة بين قيم الكائنات يقع بعضُ المبتدئين في خطأ مقارنة الكائنات بعبارة ==
كيف تتغلب على هذه المشكلة: تأكد أن كل كائن تتم مقارنته عن طريق الدالة equals.
9. نسيان return في نهاية الدالة
مالم تكُن الدالة void أي لا ترجع شيئاً يجب أن تحتوي في نهايتها على عبارة return.
نسيان return مشكلة شائعة أيضاً في الشفرات المصدرية لجافا، مثل هذه الحالة.
كيف تتغلب على هذه المشكلة: أكتب هيكل الدالة كاملاً قبل كتابتك لأي إجراءات داخلها.
10. كتابة النص في أكثر من سطر
عند كتابة الشفرات المصدرية لجافا بإستخدام محرر نصوص عادي يحاول المبرمج أحياناً الإنتقال إلى السطر التالي بإستخدام مفتاح Enter.
عند تعريف متغير من النوع String و الذي يحتوي على جملة طويلة من الممكن أن يقع المبرمج في مشكلة محاولة المحافظة على جميع النص تحت ناظريه بإستخدام Enter للإنتقال إلى السطر التالي.
وهذا هو ما لا تتقبله الجافا.
كيف تتغلب على هذه المشكلة: للإنتقال إلى سطر جديد أنهِ الجملة البرمجية ثم أضف ما تبقى من العبارة إلى المتغير السابق.
11. كتابة s بحرف صغير بدلاً عن الكبير في String
يستغربُ المبرمج أحياناً من أن تعريف المتغير من النوع String لا يعمل رغم كتابته بطريقة صحيحة!
لا يوجد إختلاف كبير بين الشكل الصغير و الكبير لحرف الـ s، لذا تقع هذه المشكلة.
كيف تتغلب على هذه المشكلة: لا يوجد حل فعلي غير التأكد من إستخدام الحرف s الكبير، إذا ظهرت لك المشكلة بإمكانك البحث عن كلمة string (بالحرف الصغير) و تحديد البحث المطابق وفق حالة الأحرف ثم التصليح.
لماذا الناتج صفر في اي معالة اعملها
أستاذي الفاضل
آسف جدا على كثرة التعليقات…اكتشفت للتو خطئي أو اخطائي على الأصح:
أولا وضع الفاصلة بعد جملة الحلقة for
ثانيا وضع علامة ناقص بدلا من يساوي سهوًا مني
ولكن مع ذلك يبقى السؤال: هل تلك الأقواس الحاضنة مهمة جدا في الجافا؟
ملاحظة:
حتى بعد أن أرفع الجملتين الأخيرتين وأضعهما قبل القوس، هكذا:
System.out.print(“-*-*-**-*–**-**-** \n”);
for (int i=1; i<=4; i-i+1);
System.out.print("Riad ");
System.out.print("\n");
}
تظل المشكلة هي نفسها
الأستاذ مصطفى الطيب
شكرا على الشرح الجميل والمتقن.
تمنيت لو تعرضت بالشرح المفصل لمشكلة الأقواس الحاضنة في محرر الجافا وهي التي تكون بالشكل التالي:
}
}
حيث أنني أجد داخل محرر الNetBeans عدة أقواس وأعجر تماما عن التعامل معها، وحتى أعطيك مثالا واضحا، فهذا شكل نتيجة أحد تماريني:
public static void main(String[] args) {
String loop;
loop= “ma premiere boucle”;
for (int i=1; i<=7; i=i+1);
System.out.print(loop+"\n");
System.out.print("-*-*-**-*–**-**-** \n");
for (int i=1; i<=4; i-i+1);
}
System.out.print("Riad ");
System.out.print("\n");
والنتيجة: خطأ.
السؤال: أين يقع خطئي هنا؟ وكيف أصححه وأتعامل بشكل صائب مع تلك الأقواس، بحيث أضع كل جملة في مكانها الدقيق؟؟
السلام عليكم / الله يعطيك العافية
أنا مشكلتي مش بكتابة الأكواد فالكود ممتاز
المشكلة في أمر الادخال Scanner
إذا وضعت أمر إدخال من نوع int قبل ادخال من نوع String
يتجاوز أمر إدخال String وينفذ باقي البرنامج
أما العكس يقوم بتنفيذ الأمر int
عندي نسخة NetBeans 11.2
المشكلة في البرنامج ولا كيف ؟
غالباً المشكلة في شفرتك المصدرية، إذا نسختها في رد هنا من الممكن أن يؤشر لك قراء المدونة على مصدر الخطأ.
عندما احذف اقواس النهايه في الجافا كيف استرجعهن
بإعادة كتابتها بالضغط على shift و قوس ] في لوحة المفاتيح.
سلام استاذ
انا كمبتدئ في لغة جافا ايه افضل لي عشان اكتب فيو الكود تكست باد او نتبينز ???????????
مرحباً بك أخي عبدالله،
كمبتدئ يفضل أن تبدأ الكتابة في محرر نصوص عادي (Notepad مثلاً) حتى تتعود على الأساسيات و تتعرف على أكبر قدر من المشاكل المحتملة.
أما استخدام بيئات التطوير فهو من أجل إستغلال الأدوات المصاحبة لها، ولكل بيئة تطوير أدوات ومميزات.
فعندما يكون هدفة هو زيادة سرعة التطوير و إنتاج البرامج قم بدراسة شاملة لأدوات التطوير و اختر ما يناسب مشروعك الذي تعمل عليه.
بتمني مذيد من هذا
جزاك الله خيرا ونرجوا المزيد من شرح للجافا للمبتدئين فى تعلم هذه اللغه
و جزاكُم الجنّة، بإذن الله المزيد قادم عن لغة الجافا.
شكرا على هذا الشرح الجميل و المبسط
عفواً معاذ، كُل التوفيق لك.