أنواعُ البيّـانات (Data Types)
مُـقدِّمة
أنواعُ البياناتِ هي الهُويَّةُ التي تحملُها كلُّ قيمةٍ في عالمِ برنامجِكَ، والطبيعةُ التي تُحدِّدُ ماهيَّتَها وحدودَ إمكانياتِها.
كما أنَّ لكلِّ شيءٍ في الوجودِ صنفًا وخصائصَ تميِّزُه عن غيرِهِ، فإنَّ لِكُـلِّ معلومةٍ في ذاكرةِ الحاسوبِ نوعًا يُعرِّفُها ويرسمُ حدودَ ما تستطيعُ وما لا تستطيعُ.
النوعُ هو العَـقـدُ المُبرمُ بين البَرنامـجِ والذاكـرة، يُجيب عن ثلاثةِ أسئلةٍ جوهرية :
-
كم من المساحة تحتاجُ هذه القيمة في الذاكرة؟
-
وأيُّ العملياتِ يجـوزُ تطبيقُـها عَليـها وأيُّهـا يُحظرُ؟
-
وكـيف تُفسَّـرُ البِتَّـاتُ المُخزَّنـةُ وتُحوَّلُ إلى معنىً مفهوم؟
النوعُ يحمي بَرنامجًا من الفوضى والأخطاء. يضمن أنَّ كُـلَّ عَمليـةٍ تَجـري على أرضٍ صلبةٍ من المعنى والمنطق، فلا تُجمع الحروفُ مع الأعدادِ عبثًا، ولا تُقسمُ النصوصُ على الأصفارِ سفهًا، ولا تُستخدمُ قيمةٌ منطقيةٌ في عمليةٍ حسابية. إنه الحارسُ الأمينُ الذي يمنعُ الخلطَ ويوجـهُ كُـلَّ قيـمةٍ إلى مَسارٍهـا الصحيحِ، ويُنبهُ المبرمجَ حينَ يُحاولُ استخدامَ قيمةٍ بطريقةٍ لا تناسبُ طبيعتَـها.
هَـذهِ المُستنداتُ غيرُ مُكتملةٍ حاليًا, إذا كُـنتَ مُهتمًا, تفضَّـل بزيارةِ هذهِ المُستنداتِ على Github.
مُلاحظات هامة
في اللغاتِ ذاتِ الأنواعِ الثابتةٍ يُحدَّدُ نَوْعُ كُـلَّ مُتَغَـيِّـرٍ عِنـدَ إعلانهِ ولا يتغيرُ طُوالَ حَياتهِ - وهَذا يَمنحُ البَرنامجَ قُوةً وأمانًا.
لغةُ كيميت تتبعُ نظامَ الأنواعِ الثابتةِ، مما يعني أنَّ كُـلَّ مُتَغَـيِّـرٍ يَجِبُ أن يَحملَ نوعًا واضحًا، إمَّـا بالتصريحِ المباشرِ أو بالاستنتاجِ من القيمةِ الأوليةِ, وهذا يَضمنُ الأمانَ والوضوحَ في كُـلِّ سَطرٍ مِنَ البَرنامج.
قواعد إضافية
-
استنتاج الأنواع: المُترجمُ قادرٌ على استنتاجِ النَوْعِ مِنَ القِـيمةِ الأوَّليَّـةِ فـي كثيـرٍ مِـنَ الحالات، لكن التصريحُ الصريحُ يُحسّنُ الوضوح.
let x = 42; // cint
let y : i64 = 42; // i64 -
تحويلُ الأنواع: التحويلُ بينَ الأنواعِ يجبُ أن يكونَ صريحًا في معظمِ الحالاتِ لتجنبِ فُـقدانِ البياناتِ غيرِ المقصود.
let x : i32 = 100;
let y : i64 = x as i64; // تحويل صريح
let y : i64 = i64(x); // طريقة أخرى لكتابة صيغة التحويل -
الأنواع المُتوافقة: بعضُ الأنواعِ يُمكنُ استخدامُها بِشكلٍ مُتبادلٍ في سِياقاتٍ مُعينةٍ إذا كانت مُتوافقة.
-
حجم الأنواع: كُـلُّ نوعٍ لَـهُ حَجـمٌ مُحددٌ في الذاكرةِ، ويُمكنُ الحُصولُ عَليهِ باستخدامِ
sizeof(Type).let size = sizeof i32; // 4 بايت
خاتمة
أنواعُ البياناتِ في لغةِ كيميت توفِّرُ نظامًا قويًّا ومرنًا لتمثيلِ المعلوماتِ والتحكمِ فيها. من الأنواعِ البدائيةِ البسيطةِ إلى الأنواعِ المُركبةِ المُعقدةِ، ومن الأنواعِ الثابتةِ الآمنةُ إلى المَرِنَةِ القابلةِ للتكيُّـفِ - كلُّ نوعٍ له مكانُهُ وغرضُه.
فَهْمُ الأنواعِ وحُسْنُ اختيارِها يُشكِّلُ أساسًا متينًا لبناءِ برامجَ صَحيحةً وفَعَّـالة. النوعُ الصحيحُ في المكانِ الصحيحِ يمنعُ الأخطاءَ قبلَ وُقوعِها، وَيجعلُ نيةَ البَرنامجَ واضحةً لكلِّ مَن يَقرأُ الكود.