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

معاملات جافا: الحسابية والمقارنة والمنطقية والإسناد

كيف تعمل معاملات جافا - الحسابية والمقارنة والمنطقية والإسناد والزيادة والمعامل الثلاثي - إضافة إلى القسمة الصحيحة والأسبقية والمزالق التي توقع المبتدئين.

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

ما الذي تفعله المعاملات

المعاملات هي الرموز التي تجمع القيم لحساب قيم جديدة. أنت تستخدمها بالفعل بشكل عفوي - + يجمع، و> يقارن - وتجمعها جافا في عدة عائلات: الحسابية والمقارنة والمنطقية والإسناد، إضافة إلى بعض المعاملات الخاصة مثل الزيادة والمعامل الثلاثي.

تأخذ معظم المعاملات قيمتين (واحدة قبل الرمز وأخرى بعده) وتنتج نتيجة. الحيلة تكمن في معرفة نوع تلك النتيجة والترتيب الذي تُطبّق به - وهنا بالضبط يتعثر المبتدئون.

المعاملات الحسابية

تعمل المعاملات الحسابية الخمسة على الأعداد: + و- و* و/ و% (الباقي).

المعامل % هو الباقي بعد القسمة: الناتج 17 % 5 هو 2 لأن العدد 5 يدخل في 17 ثلاث مرات ويتبقى 2. إنه الأداة اليومية لاختبار القابلية للقسمة - فـ n % 2 == 0 هو الفحص المعتاد لـ «هل n زوجي؟».

لاحظ أيضاً أن + يقوم بدور مزدوج: مع الأعداد يجمع، لكن مع وجود String على أي من الطرفين فإنه يدمج النصوص.

يُقرأ السطر الأول بالتسلسل من البداية إلى النهاية: "Total: " + 3 هو بالفعل سلسلة نصية، لذا يُضاف 4 كنص. ضع العملية الحسابية بين قوسين عندما تريد حسابها أولاً.

مزلق القسمة الصحيحة

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

للحصول على نتيجة عشرية، اجعل أحد المعاملَين على الأقل من النوع double - إما بكتابته مع .0، أو بتحويل أحد الطرفين باستخدام (double). أما (double)(5 / 2) فإنه لا يفيد، لأن القسمة الصحيحة 5 / 2 قد حدثت بالفعل قبل التحويل؛ فعليك تحويل أحد المعاملَين، لا النتيجة.

معاملات المقارنة

تطرح معاملات المقارنة سؤالاً بنعم/لا وتُرجع قيمة boolean. وعددها ستة: == و!= و< و> و<= و>=.

انتبه للفرق بين = (الإسناد - «ضع هذه القيمة هنا») و== (المقارنة - «هل هما متساويان؟»). الخلط بينهما خطأ كلاسيكي.

تنبيه مهم: == يقارن مراجع الكائنات لا محتواها. وللسلاسل النصية، استخدم .equals().

استخدم == مع الأنواع البدائية مثل int وboolean، واستخدم .equals() كلما قارنت محتوى كائنات مثل String.

المعاملات المنطقية

تجمع المعاملات المنطقية القيم المنطقية: && (و)، و|| (أو)، و! (نفي). بهذه الطريقة تعبّر عن شروط مثل «بالغ بما يكفي و يملك تذكرة».

يُجري && و|| تقييماً بالدائرة القصيرة: تتوقف جافا عن التقييم بمجرد أن تصبح الإجابة مؤكدة. مع &&، إذا كان الطرف الأول false فلن يُفحص الطرف الثاني أبداً؛ ومع ||، إذا كان الطرف الأول true فيُتخطّى الطرف الثاني. هذا ليس مجرد تحسين أداء - بل يمكنك الاعتماد عليه من أجل الأمان:

if (text != null && text.length() > 0) { ... }

إذا كان text يساوي null، فإن الطرف الأول يكون false ولا يُستدعى text.length() أبداً، مما يتجنّب حدوث NullPointerException. اعكس الترتيب وسينهار البرنامج.

الإسناد والزيادة

= يُسند، لكن جافا تملك أيضاً إسنادات مركّبة تدمج عملية مع الإسناد: += و-= و*= و/= و%=. أما ++ / -- فيضيفان أو يطرحان واحداً.

يأتي ++ بصيغتين: اللاحقة (count++) تُرجع القيمة القديمة ثم تزيد؛ والسابقة (++count) تزيد أولاً ثم تُرجع القيمة الجديدة. لا يهم هذا الفرق إلا عندما تستخدم النتيجة ضمن التعبير نفسه:

عندما يكون ++ في سطر مستقل بذاته، لا فرق بين اللاحقة والسابقة - لذا فضّل الصيغة الأوضح قراءةً، ولا تحشر عمليات الزيادة داخل تعبيرات أكبر.

المعامل الثلاثي

المعامل الثلاثي condition ? a : b هو صيغة if/else مختصرة تنتج قيمة: إذا كان الشرط true فإنه يُقيَّم إلى a، وإلا إلى b.

يتألق في عمليات الإسناد القصيرة من نوع «هذا أو ذاك». قاوم تداخل المعاملات الثلاثية داخل بعضها - فهذا يصبح غير قابل للقراءة بسرعة، وصيغة if/else العادية أوضح.

الأسبقية والأقواس

تُطبّق المعاملات بترتيب ثابت، يشبه إلى حد كبير الرياضيات: * و/ و% ترتبط أقوى من + و-، اللذين يرتبطان أقوى من معاملات المقارنة، التي ترتبط أقوى من &&، ثم ||.

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

التالي: تحويل الأنواع (Casting)

عدد من المزالق هنا - القسمة الصحيحة، وخلط int مع double - يعود في جوهره إلى الأنواع. يُسمّى التحويل المتعمّد بين الأنواع العددية التحويل (Casting)، وهو موضوع الصفحة التالية.

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

ماذا يفعل المعامل % في جافا؟

% هو معامل الباقي (modulo) - يعطي ما يتبقى بعد القسمة الصحيحة. الناتج 7 % 3 هو 1، والناتج 10 % 2 هو 0. إنه الطريقة المعتادة لاختبار القابلية للقسمة (n % 2 == 0 يعني أن n زوجي) ولحصر قيمة ضمن نطاق معيّن.

لماذا يعطي 5 / 2 في جافا الناتج 2 بدلاً من 2.5؟

عندما يكون كلا المعاملَين عددين صحيحين، يُجري / قسمة صحيحة ويتخلص من الجزء الكسري - لذا فإن 5 / 2 هو 2 وليس 2.5. للحصول على 2.5 يجب أن يكون أحد المعاملَين على الأقل من النوع double: اكتب 5.0 / 2 أو 5 / 2.0، أو حوّل أحد الطرفين باستخدام (double) 5 / 2.

ما الفرق بين == و equals() في جافا؟

== يقارن الأنواع البدائية بالقيمة، لكنه مع الكائنات (بما فيها String) يقارن المراجع - أي هل هما نفس الكائن في الذاكرة. لمقارنة محتوى الكائنات، استخدم .equals(). قد تُرجع مقارنة سلسلتين نصيتين بـ == القيمة false حتى لو تطابق النص، لذا استخدم دائماً "a".equals(b) مع السلاسل النصية.

Coddy programming languages illustration

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

ابدأ الآن