!مفاهيم جافا الجزء السادس – القيم الأساسية هي ليست أغراض

في الدرس السابق تعلمنا بأن المتحولات لاتحتوي الأغراض ولكنها تشير إليها.
الأمر مختلف بالنسبة للقيم الأساسية. المتحولات تحتوي القيم الأساسية
لم أفهم ؟ أليست القيم الأساسية عبارة عن أغراض؟ ماهي القيم الأساسية؟
القيم الأساسية ليست أغراض , القيم الأساسية هي :
  • قيم منطقية boolean
  • قيم حرفية char
  • قيم رياضية صحيحة:  byte, short, int, long
  • قيم عشرية: float, double
هل يعتبر ال String قيمة أساسية او غرض؟
سلسلة الاحرف في الجافا تعتبر غرض. ولكنها غرض من نوع خاص . اي ان في كل مرة نسند عبارة جديدة للمتحول سترمي بالغرض القديم وتنشيء غرض جديد ( لايهم هذا ولكن وجب التنويه)
هل تعتبر المصفوفة قيمة أساسية او غرض؟

تعتبر المصفوفات في الجافا عبارة عن اغراض. عند إنشاء مصفوفة فإننا ننشئ غرض.

لماذا تشير المتحولات للأغراض بينما تحتوي للقيم الأساسية؟

لتبسيط الفكرة دعونا نتذكر في الدرس السابق تخيلنا بأن المتحولات التي تشير للأغراض هي عبارة عن يد تحكم تتحكم بالغرض عن بعد. لكي تتعرف على الغرض يجب  بأن يمتلك الغرض رقم هوية أو مايعرف بعنوان داخلي يميزه عن غيره من الأغراض.

القيم الأساسية ليست كل الأغراض هي عبارة عن قيم رياضية أو منطقية , اما الاغراض تحتوي  توابع ومتحولات .

القيم الأساسية لاتحوي على رقم هوية يميزها عن غيرها!  قد ذكرنا سابقا بأن المتحولات كيد التحكم تحتاج إلى رقم هوية للتحكم في الأغراض  !  لكن الوضع مختلف للقيم الأساسية, القيم الأساسية متحولاتها من نوع مختلف فعوض عن إيدي التحكم سوف تحصل على صناديق عند تعريف متحولات قيم أساسية

فلنتخيل بأن هناك محل مصنع للمتحولات ,لكي يعطيك يد التحكم يجب بأن تعطيه نوع المتحول وسيقوم بإعطائك المقبض المناسب. لكن الفكرة في لحظة طلب متحول من نوع أساسي سيقوم بإعطائك صندوق بدل من يد تحكم … “لن تحتاج في التحكم بالقيم الأساسية يمكنك وضعها مباشرة داخل هذا الصندوق” .

لماذا احتاج إلى كل هذا التبسيط لشرح الفكرة؟ المتحول متحول سيحوي قيم في النهاية. لماذا عليي تبسيط آلية عمله؟
بالفعل كان من الممكن بأن نختصر الفكرة. ولكن هذا المفهوم من أهم المفاهيم البرمجية في الجافا غالبا مايتم بالتخفيف من الية العمل بالأغراض  والقيم الأساسية. أكثر الأخطاء في البرمجة تحدث بشكل خاص لأن المبرمجين يخطأون ويظنون بأن إسناد متحول لمتحول اخر سيقوم بنسخه , ولكن في الحقيقة بأنه فقط يقوم بالإشارة للغرض نفسه . دعونا نلقي نظرة على الكود التالي لنفهم اهمية الفرق

برأيكم ما النتيجة التي سيقوم طباعتها هذا الكود؟

الحقيقة إن ظننت بأن النتيجة هي red ستكون مخطأ , فالمتحولان الآن يشيران إلى نفس الغرض وهذا تمام ماقمنا بشرحه , متحولات الأغراض هي متحولات إشارة. لذلك النتيجة ستكون greenالآن دعونا ننظر للكود التالي

نعم يا سادة , النتيجة ستكون ١ . القيم الأساسية تسكن داخل المتحولات كالصناديق, وعند إسناد متحول لمتحول فإنه سيقوم بنسخ قيمته ووضعها بداخله وليس الإشارة إليه.إلى هنا قد نكون إنتهينا ولكن هنالك سؤال لم نجب عليه. لماذا جسدنا في الرسم صناديق القيم الأساسية بأحجام مختلفة؟
الجواب لأن أنواع القيم الأساسية مختلفة الأحجام
Byte = 8 bits , short = 16 bits, int = 32 bits, long = 64 bitsوهذا يعني إذا قمنا بإسناد قيم متحولات من نوع اصغر الى متحولات من نوع اكبر فهذا الأمر ممكن , تماما كما في الصناديق الصغيرة, ان قمت بوضع محتويات مافي الصندوق الصغير بصندوق اكبر فليس هنالك مشكلة

أما المشكلة اذا قررنا بأن نضع محتويات صندوق كبير في صندوق صغير. هنا سيعترض ال compiler
ولحل هذه المشكلة سنقوم بشكل واضح بإخبار ال compiler بأننا نريد على تحويل قيمتنا الكبيرة إلى قيمة اصغر

كما لاحظت النتيجة غير متوقعة , لم يقم المتحول ذو الصندوق الأصغر بحفظ القيمة الأصلية وإنما قد حافظ عليها بشكل جديد يتسع ل١٦ بيت.

نرجو دائما تذكر الفرق بين متحولات الإشارة ومتحولات القيم الأساسية
Reference variables and Primitive value variables

إلى هنا نكون قد انتهينا , نتمنى أن تنتظرونا في الدرس القادم لشرح مفاهيم أخرى مهمة في الجافا
 

لميس

إسمي لميس, اعمل كمهندسة برمجيات في شركة إكسينغ في ألمانيا. بدأت في رحلة العمل في المجال البرمجي منذ أكثر من ١٠ سنوات في سنة ٢٠٠٣ كانت بداية رحلتي المهنية حيث كانت بدايتي مع ألعاب الفلاش.. حالياََ انا استخدم العديد من الأدوات البرمجية في العمل فنحن بحاجة ماسة للإطلاع على احدث التقنيات. هدفي هو نقل ما أتعلمه للمشاركة به وتبادل الخبرات مع الجميع

One thought on “!مفاهيم جافا الجزء السادس – القيم الأساسية هي ليست أغراض

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *