16 - سلسلة تبسيط البرمجة – أنواع المعطيات القياسية
السلام عليكم ورحمة الله وبركاته
بسم الله الرحمن الرحيم
ذكرنا أن تحديد أنواع المعطيات للمتغير عند حجزه وتعريفه لاستخدامه لاحقا أثناء البرنامج
هو لتوجيه المترجم كيف سيتعامل معه
فمثلا عند حجز متحول من النوع رقم تمثيله بالذاكرة مختلف عن متحول من النوع نصي
لأن الرقم يتم حجز له أربع بايتات ذاكرية وبالتالي نستطيع أن نحفظ فيه قيم من 0 وحتى 2 مرفوعة إلى اس 32 أي 4294967296
وفي حال أردنا أن يمثل الأرقام السالبة حينها نخصص البت الأخير لتمثيل الإشارة أي إن كانت 0 فالرقم موجب وإن كانت 1 فالرقم سالب وبهذا سينزاح مجال القيم ليرجع نصفه إلى المجال السالب أي سيكون المجال لدينا من سالب 2 مرفوع لقوة 31 إلى موجب نفس العدد ناقص واحد
أي من -2147483648 و حتى +2147483647
لاحظو الأن أنه يجب ضمان أن المتغيرات المحجوزة بهذا النوع يجب أن لا تتخطى هذه الحدود حتى لا يحدث خطأ يسمى الطفحان Overflow وفي حال احتجنا لتمثيل أرقام أعلى فيجب تعريف المتحول من نوع آخر مثلا الرقم الطويل long والذي يحجز 8 بايتات أي 64 بت وبالتالي سيكون مجاله من
-9223372036854775808
إلى
+9223372036854775807
الفرق بين الاثنين أنه إذا لم نكن بحاجة لأرقام كبيرة فلماذا نحجز مساحة أكبر من الذاكرة ونحن لسنا بحاجة إليها
ولا سيما عندما يتم حجز عدد كبير من المتحولات وخاصة المتغيرات المصفوفية
فلو احتجنا لمتغير مصفوفي من النوع الرقمي الطويل وبحجم 100000 حجرة
حينها سنحتاج إلى ذاكرة بحجم 800000 بايت لهذا المتغير فقط
وبالتالي لو كان برنامجنا ضخما واحتجنا متغيرات كثيرة فسنستفذ الذاكرة ويتجمد الحاسب
إذا لو كنت أعلم أن أرقامي هي في حدود العدد ذو الـ 4 بايت إذا أوفر الذاكرة للنصف
من هنا قلنا تحديد أنواع المعطيات يوفر الموارد
وخذوا مثالا آخر لو كان لدينا قيمة تعبر عن نسبة مئوية وبالتالي القيمة ستكون محصورة بين 0 و 100 فقط إذا لماذا نحجز لها ذاكرة بحجم 4 بايت علما أنا بايت واحد يكفيها ولهذا تم تعريف نوع معطيات اسمه بايت byte والذي يستطيع حفظ قيم من 0 وحتى 255
وفي حال احتجنا لقيم سالبة يوجد نوع اسمه sbyte و الحرف s هو اختصار كلمة signed أي ذو إشارة وبالتالي سيكون مجال القيم من -127 إلى 127
بعض الأنواع تحجز حجم ديناميكي من الذاكرة يتغير تبعا للقيمة
فالنوع الذي يمثل النصوص أو السلاسل الرمزية متغير فإن كان يحوي فراغ أو لا شي فهو يحجز 4 بايت فقط لاسم المتغير
وفي حال بدأت تتغير القيم فبحسب الحروف يزداد حجم الذاكرة حيث كل رمز character يحتاج لبايت واحد فقط وهو كود الأسكي Ascii والذي هو جدول الرموز القياسية وعددها 255 رمز ولهذا يكفيها بايت أما في حال الرموز Unicode من أجل اللغات المختلفة فالرمز يحتاج بايتين لأن عدد الرموز أصبح خارج نطاق جدول الأسكي القياسي وأصبحنا نستطيع تمثيل جدول رموز يصل إلى 2 قوة 16 أي 65536 وهذا العدد كافي حتى للغة الصينية بل اللغات مجتمعة أيضا.
إذا لو وضعنا في المتغير من النوع نص قيمة نصية هي مثلا "abc" فسيكون حجم الذاكرة المحجوز هو 3 بايت
ولو كانت القيمة "Hello World" فيزداد الحجم إلى 11 بايت لأن الفراغ يعتبر رمز وله كود ويحتاج إلى بايت
يوجد عدة أنواع قياسية للمعطيات وهي المعرفة من قبل النظام والتي يشتهر استخدامها
ومنها الأرقام أو النصوص أو التاريخ والوقت أو الأرقام العشرية والتي تدعى الأرقام ذات الفاصلة العائمة وذلك لتمثيل الأرقام كقسمين جزء صحيح وجزء كسري وهذه النوع له الشكل القصير float و الشكل الطويل double و الفرق هو أن الثاني يحجز ضعف الأول من الذاكرة
وكذلك يوجد نوع للتمثيل المنطقي ويدعى bool أي Boolean وتعني القيم البوليانية والتي تمثل حالتين إما [نعم / لا] أو [صح / خطأ] أو [محدد/غير] محدد وبالتالي يكفيها بايت لتحتفظ بالقيمة 0 تعبيرا عن الحالة نعم أو true
والقيمة 1 للتعبير عن الحالة لا أو false
وهذا النوع نحتاجه من أجل تمثيل حالات مثل اختيار الخيارات أو نتيجة التحقق من الشرط و للتمثيل المنطقي للحصول على نتيجة لعدة قيم بوليانية كأن يكون الشرط هو نتيجة تحقق عدة شروط معا أو تحقق إحداها
وسيتضح ذلك أكثر عندما نبرمج بشكل عملي
أكتفي لهذا اليوم والسلام عليكم ورحمة الله وبركاته
التعليقات