Menu
flag Ar iconالعربيةdown icon

صياغة جافا: الأصناف والدوال والعبارات والأقواس المعقوفة

شكل برنامج جافا - الدالة main، العبارات والفواصل المنقوطة، الكتل والأقواس المعقوفة، والقواعد التي يفرضها المُصرِّف قبل أن يعمل برنامجك أصلاً.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

كيف يبدو برنامج جافا

في الصفحة السابقة شغّلت جافا. والآن لننظر إلى ما يتكوّن منه الكود نفسه فعلاً. جافا صارمة وصريحة: هناك شكل ثابت يجب أن يتبعه كل برنامج، ويتحقّق المُصرِّف من هذا الشكل قبل تنفيذ سطر واحد.

إليك أصغر برنامج جافا كامل ممكن. شغّله:

إنها كلمات كثيرة لطباعة سطر واحد، وعلى عكس بايثون أو جافاسكريبت لا يمكنك حذف أي منها. كل جزء مطلوب، لذا يستحق الأمر أن تفهم ما يفعله كل واحد. سنفكّكه من الخارج إلى الداخل.

كل شيء يوجد داخل صنف

ليس في جافا كود "سائب" يطفو في المستوى الأعلى من الملف. كل الكود يوجد داخل صنف، يُعلَن بالكلمة المفتاحية class واسمٍ ما:

public class Main {
    // everything goes in here
}

يحدّد القوس { الافتتاحي والقوس } الختامي المقابل له جسد الصنف. الاسم Main لك أن تختاره، مع قاعدة واحدة مهمة: في ملف .java عادي، يجب أن يطابق الصنف public اسم الملف تماماً. فالصنف public class Main ينتمي إلى الملف Main.java. إن أخطأت في حالة الأحرف رفض المُصرِّف بناءه.

ستتعلّم ما هي الأصناف حقاً في فصل الأصناف. أما الآن فعامِل public class Main { ... } بوصفه الغلاف المطلوب حول كودك.

الدالة main هي خط البداية

عندما تشغّل برنامج جافا، تبحث بيئة التشغيل عن دالة واحدة محدّدة لتبدأ التنفيذ منها:

public static void main(String[] args) {
    // your code starts here
}

هذا التوقيع غير قابل للتفاوض. لكل كلمة وظيفة:

  • public - تستطيع بيئة التشغيل الوصول إليها من خارج الصنف.
  • static - تعمل دون إنشاء كائن من الصنف أولاً.
  • void - لا تُعيد شيئاً عند انتهائها.
  • main - الاسم الدقيق الذي تبحث عنه بيئة التشغيل.
  • String[] args - مصفوفة بأي وسائط سطر أوامر مُرِّرت إلى البرنامج.

إذا أخطأت في كلمة واحدة - Static بدل static، أو String args بدل String[] args - فقد يُصرَّف كودك رغم ذلك، لكن تشغيله يفشل برسالة Error: Main method not found in class Main. وتعني هذه الرسالة في الغالب وجود خطأ طباعي في هذا السطر.

العبارات تنتهي بفاصلة منقوطة

العبارة أمر واحد مكتمل. في جافا، كل عبارة تنتهي بفاصلة منقوطة ;. يستخدم المُصرِّف الفاصلة المنقوطة ليعرف أين يتوقّف أمر وأين يبدأ التالي - أما فواصل الأسطر فلا تعنيه.

وبما أن فواصل الأسطر تُتجاهَل، يمكن أن توضع العبارات الثلاث كلها في سطر واحد وتظل تعمل - وإن كان لا أحد يكتب جافا بهذه الطريقة:

int score = 90; score = score + 5; System.out.println(score);

انسَ فاصلة منقوطة فيوقفك المُصرِّف قبل أن يعمل البرنامج:

int score = 90
System.out.println(score);
error: ';' expected
        int score = 90
                      ^

الفاصلة المنقوطة الناقصة هي خطأ التصريف الأكثر شيوعاً الذي ستواجهه كمبتدئ. حين يشير المُصرِّف إلى سطر، تفقّد أيضاً السطر الذي قبله - فهناك غالباً يكمن الإغفال الحقيقي.

الكتل والأقواس المعقوفة

تجمع الأقواس المعقوفة { } العبارات في كتلة. جسد الصنف كتلة، وجسد الدالة كتلة، وجسد if أو حلقة كتلة. ويمكن أن تتداخل الكتل داخل كتل أخرى:

لاحظ الفرق عن العبارات: السطر الذي يفتح كتلة ينتهي بـ { لا بفاصلة منقوطة، ولا تضع فاصلة منقوطة بعد القوس } الختامي لدالة أو صنف أو if أو حلقة. والخلط في هذا خطأ مبكر تقليدي:

public static void main(String[] args) {
    System.out.println("hi");
}; // <- this semicolon is unnecessary (and after a class/method, wrong)

الإزاحة في الأمثلة موجّهة للبشر تماماً. تتجاهلها جافا، لكن الإزاحة المتّسقة هي الطريقة التي تتتبّع بها أنت وغيرك أيّ { يطابق أيّ }. دع محرّرك يُزيح تلقائياً وستصطفّ الأقواس من أجلك.

جافا حسّاسة لحالة الأحرف

تعامل جافا الأحرف الكبيرة والصغيرة كأشياء مختلفة تماماً. فـ score وScore وSCORE ثلاثة أسماء منفصلة. وينطبق الأمر نفسه على الكلمات المفتاحية والأسماء المدمجة:

لو كتبت system.out.println (بحرف s صغير) أو String Name ثم حاولت استخدام name، لرفضه المُصرِّف. وإليك بضعة أسماء كثيراً ما يخطئ المبتدئون في حالة أحرفها:

  • System - بحرف S كبير. system.out.println(...) لا يُصرَّف.
  • String - بحرف S كبير. إنه صنف، بخلاف الأنواع البدائية المكتوبة بأحرف صغيرة.
  • void وint وpublic وstatic - كلها بأحرف صغيرة. إنها كلمات مفتاحية.

معظم أخطاء "cannot find symbol" ترجع إلى زلّة في حالة الأحرف. بل تخبرك الرسالة بالرمز الذي تعذّر عليها إيجاده - طابِق حالة أحرفه بما كتبته.

تجميع القطع معاً

إليك برنامجاً أكبر قليلاً يستخدم كل ما في هذه الصفحة - صنفاً، والدالة main، وعدة عبارات، وكتلة متداخلة، وحالة أحرف متّسقة:

اقرأه من أعلاه إلى أسفله: الصنف يغلّف كل شيء، وmain هي حيث يبدأ التنفيذ، وكل أمر ينتهي بـ ;، وجسد if مُجمَّع في كتلته الخاصة، وكل اسم مدمج مكتوب بحالة الأحرف الصحيحة. هذا هو الهيكل العظمي لكل برنامج جافا تقريباً ستكتبه.

التالي: التعليقات

تستطيع الآن قراءة بنية ملف جافا. الشيء التالي الذي تضيفه هو ملاحظات للبشر - نص يتجاهله المُصرِّف تماماً. تتناول الصفحة التالية التعليقات: صيغة السطر الواحد //، وصيغة الكتلة /* */، ومتى يستحق التعليق مكانه في الكود فعلاً.

الأسئلة الشائعة

ما الصياغة الأساسية لبرنامج جافا؟

كل برنامج جافا يوجد داخل صنف، ويبدأ التنفيذ في دالة لها التوقيع الدقيق public static void main(String[] args). تنتهي العبارات بفاصلة منقوطة، وتُجمَّع كتل الكود بأقواس معقوفة { }. أبسط برنامج هو public class Main { public static void main(String[] args) { System.out.println("Hi"); } }.

لماذا تحتاج جافا إلى public static void main(String[] args)؟

هذه هي بالضبط نقطة الدخول التي تبحث عنها بيئة تشغيل جافا. تسمح public لبيئة التشغيل باستدعائها من الخارج، وتعني static أنها تعمل دون إنشاء كائن أولاً، وتعني void أنها لا تُرجِع شيئاً، وتستقبل String[] args وسائط سطر الأوامر. غيّر أي كلمة - حتى حالة الأحرف - وسيُصرَّف البرنامج لكنه لن يبدأ، ويظهر Error: Main method not found.

هل تحتاج كل عبارات جافا إلى فاصلة منقوطة؟

كل عبارة تنتهي بفاصلة منقوطة: إعلانات المتغيرات، الإسنادات، استدعاءات الدوال. لكن الأسطر التي تنتهي بكتلة (if وfor وwhile، أو ترويسة صنف أو دالة) تنتهي بـ { بدلاً من ذلك، ولا تضع فاصلة منقوطة بعد القوس } الذي يُغلق تلك الكتل. نسيان الفاصلة المنقوطة هو خطأ التصريف الأكثر شيوعاً لدى المبتدئين في جافا.

Coddy programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن