البرمجة

التعبيرات في جافا بالتفصيل

جدول المحتوى

التعبيرات (Expressions) في جافا: المفهوم، الأنواع، وآلية التنفيذ

في لغة البرمجة جافا، تعد التعبيرات (Expressions) جزءاً أساسياً من بناء البرنامج، فهي اللبنات الأساسية التي تُستخدم لإنشاء الجمل البرمجية والتي بدورها تُنفذ الأوامر وتُنتج القيم. تتكون التعبيرات من مجموعة من العوامل (operators) والقيم (operands) التي تُقيَّم وفق قواعد معينة لإنتاج قيمة واحدة. تتداخل التعبيرات في جميع الجوانب البرمجية، بدءاً من العمليات الحسابية والمنطقية، مروراً بالتعامل مع الكائنات والحقول، وصولاً إلى التعامل مع الحلقات والشروط.


أولاً: المفهوم العام للتعبير في جافا

في جافا، يُعرَّف التعبير بأنه أي جزء من الكود يُقيَّم (evaluated) إلى قيمة. على سبيل المثال:

java
int x = 5 + 3;

في هذا السطر، 5 + 3 هو تعبير يتم تقييمه إلى القيمة 8، والتي يتم بعد ذلك تعيينها إلى المتغير x.

التعبيرات يمكن أن تتراوح من بسيطة، مثل 2 أو "Hello"، إلى معقدة تتضمن استدعاءات دوال أو عمليات منطقية معقدة مثل:

java
(x > 5 && y < 10) || isAvailable()

كل تعبير يُقيَّم في النهاية إلى نوع بيانات محدد (int, boolean, String, وغيرها)، ويُستخدم داخل الجمل (statements) التي تؤدي إجراءات محددة.


ثانياً: الأنواع الأساسية للتعبيرات في جافا

1. التعبيرات الحسابية (Arithmetic Expressions)

تُستخدم لإجراء العمليات الحسابية باستخدام العوامل الحسابية، مثل: +, -, *, /, %.

أمثلة:

java
int result = 10 + 5 * 2;

في المثال أعلاه، يتم تطبيق أولوية العمليات: 5 * 2 = 10 ثم 10 + 10 = 20.

2. التعبيرات المنطقية (Logical Expressions)

تُستخدم في الشروط والتحقق، وعادة ما تُقيَّم إلى قيم Boolean (true أو false).

أمثلة:

java
boolean isValid = (x > 0 && x < 100);

العوامل المنطقية: &&, ||, !.

3. تعبيرات المقارنة (Relational Expressions)

تُستخدم لمقارنة القيم، وتُنتج أيضاً قيم Boolean.

أمثلة:

java
boolean isEqual = (a == b); boolean isGreater = (x > y);

4. تعبيرات التخصيص (Assignment Expressions)

هي تعبيرات تقوم بإعطاء قيمة لمتغير. العامل الأساسي فيها هو =.

أمثلة:

java
int a = 5; a += 10; // مكافئ لـ a = a + 10

العوامل المختلطة مثل +=, -=, *=, /=, %= تُعد أيضاً تعبيرات تخصيص.

5. تعبيرات السلسلة النصية (String Expressions)

في جافا، يتم تجميع النصوص باستخدام العامل +.

أمثلة:

java
String fullName = "Ali" + " " + "Hassan";

عند استخدام + بين سلسلتين نصيتين، يتم دمجهما في سلسلة واحدة.

6. التعبيرات الشرطية (Conditional Expressions)

وتُعرف أيضاً باسم التعبير الثلاثي (Ternary Expression)، وتُستخدم كاختصار لتعابير if-else.

الصيغة:

java
condition ? value_if_true : value_if_false;

مثال:

java
int min = (a < b) ? a : b;

7. تعبيرات الوصول إلى العناصر (Member Access Expressions)

تُستخدم للوصول إلى خصائص الكائنات أو استدعاء الدوال.

أمثلة:

java
System.out.println("Hello"); obj.name = "Java";

ثالثاً: تقييم التعبيرات (Expression Evaluation)

تخضع التعبيرات في جافا إلى قواعد التقييم التي تتبع ترتيب الأولويات (Precedence) والربط (Associativity).

ترتيب الأولويات:

الأولوية العامل التوضيح
1 () القوسين لهما أعلى أولوية
2 ++, -- (prefix/postfix) الزيادة أو النقصان
3 *, /, % العمليات الضرب والقسمة
4 +, - الجمع والطرح
5 <<, >>, >>> إزاحة البتات
6 <, >, <=, >= المقارنات
7 ==, != المساواة
8 &, ^, ` `
9 &&, `
10 =, +=, -=... التخصيصات

الربط (Associativity):

بعض العوامل تُقيَّم من اليسار إلى اليمين (Left to Right)، وبعضها من اليمين إلى اليسار (Right to Left)، مثل عامل التخصيص =.


رابعاً: التعبيرات والكائنات (Object Expressions)

تعبيرات الكائنات تشمل:

  • إنشاء كائنات: new ClassName()

  • استدعاء دوال: object.method()

  • الوصول إلى خصائص: object.property

مثال:

java
Person p = new Person("Ali"); String name = p.getName();

في هذا المثال:

  • new Person("Ali") هو تعبير يُنتج كائناً من نوع Person.

  • p.getName() هو تعبير يُقيَّم إلى اسم الشخص.


خامساً: التعبيرات داخل الجمل (Statements)

رغم أن التعبير ليس جملة مستقلة، إلا أنه يُستخدم داخل الجمل لتنفيذ الأوامر. الفرق أن:

  • التعبير ينتج قيمة.

  • الجملة تُنفذ إجراءً، وقد تحتوي على تعبيرات.

مثال توضيحي:

java
int x = 5 + 3; // تعبير 5 + 3 يُقيَّم أولاً ثم يُستخدم في جملة التخصيص

سادساً: تعبيرات التحكم في التدفق

بعض التعبيرات تُستخدم داخل الشروط والتحكم في سير تنفيذ البرنامج، مثل:

java
if (x > 0 && y < 100) { // تنفيذ الكود }

هنا، (x > 0 && y < 100) هو تعبير منطقي يُقيَّم لتحديد تنفيذ الكتلة التالية.


سابعاً: تعبيرات الاستثناءات (Exception Expressions)

في جافا، يمكن أيضاً اعتبار بعض الأوامر المرتبطة بالتعامل مع الأخطاء كتعبيرات عند وجود قيمة تُعيدها، رغم أن استثناءات try, catch, throw تُعد جمل في الأساس.


ثامناً: تعبيرات Lambda

منذ Java 8، أصبح من الممكن إنشاء تعبيرات Lambda، وهي عبارة عن تعبيرات تُستخدم لتمرير سلوك كوسيط.

مثال:

java
(x, y) -> x + y

هذا التعبير هو اختصار لدالة تأخذ مدخلين وتُعيد ناتج جمعهما، وتُستخدم في البرمجة الدالية (Functional Programming).


تاسعاً: استخدام التعبيرات في الحلقات والشروط

تُستخدم التعبيرات لتحديد شرط التكرار أو الشروط في الحلقات:

java
for (int i = 0; i < 10; i++) { System.out.println(i); }

التعبير i < 10 هو الذي يتحكم في استمرار الحلقة.


عاشراً: الفرق بين التعبير والجملة في جافا

من المهم التمييز بين التعبير والجملة (Statement):

التعبير (Expression) الجملة (Statement)
يُنتج قيمة يُنفذ إجراء دون أن يُنتج بالضرورة قيمة
يمكن استخدامه ضمن جملة لا يمكن أن يُستخدم دائماً داخل تعبير
مثال: 5 + 3 مثال: if (x > 0) { ... }

الحادي عشر: التعبيرات المعقدة والمركبة

يمكن دمج أكثر من تعبير واحد لإنشاء تعبير مركب:

java
int result = (a + b) * (c - d) / e;

هنا يتم تقييم كل جزء على حدة حسب ترتيب الأولويات، ما يوضح قدرة جافا على بناء تعبيرات قوية ومعقدة بمرونة عالية.


الثاني عشر: تحليل تعبيرات جافا (Java Expression Parsing)

في السياقات المتقدمة مثل بناء مفسرات لغات برمجة (interpreters) أو أدوات تحليل الكود (static analyzers)، يُعتبر فهم تركيب التعبيرات وتحليلها (Parsing) خطوة جوهرية. حيث يتم تحويل التعبير إلى شجرة تحليل (Abstract Syntax Tree - AST) تمثل تركيب التعبير وكيفية تقييمه.


الثالث عشر: التعبيرات والأنماط البرمجية (Coding Patterns)

تُستخدم التعبيرات لتشكيل أنماط برمجية فعالة، مثل:

  • تعبيرات حراسة الشرط (Guard clauses)

  • تعبيرات المختصرات (Short-circuit evaluation)

  • تعبيرات الربط (Fluent interfaces)


الرابع عشر: الاعتبارات الأمنية في استخدام التعبيرات

عند كتابة تعبيرات يتم تنفيذها بناءً على مدخلات المستخدم، يجب توخي الحذر من مخاطر أمنية مثل:

  • استدعاء دوال بناءً على مدخلات غير موثوقة.

  • تنفيذ تعبيرات باستخدام مكتبات التعبير الديناميكي (مثل استخدام Java Reflection أو تعبيرات Groovy).


جدول: ملخص لأشهر أنواع التعبيرات في جافا

نوع التعبير ناتج التقييم مثال
حسابي (Arithmetic) عدد (int, double) 10 + 3 * 2
منطقي (Logical) Boolean (a > 0 && b < 5)
تخصيص (Assignment) القيمة المعينة x = 5, x += 2
شرطي (Ternary) يعتمد على الشرط (a > b) ? a : b
نصي (String Concatenation) String "Hello" + "World"
كائن (Object) كائن أو قيمة new Car(), obj.getName()
لامبدا (Lambda) دالة مجهولة (x, y) -> x + y

المصادر:

  1. Oracle Java Documentation: https://docs.oracle.com/javase/tutorial/java/nutsandbolts/expressions.html

  2. Java Language Specification – Expressions Chapter (JLS)