# نوع بيانات

في علوم الحاسوب وبرمجة الحاسوب، يعد نوع البيانات (بالإنجليزية: Data Type)‏ أو الكتابة ببساطة سمة من سمات البيانات التي تخبر المحول البرمجي أو المفسر كيف ينوي المبرمج استخدام البيانات. تدعم معظم لغات البرمجة أنواع البيانات الأساسية للأرقام الصحيحة (بأحجام مختلفة) وأرقام الفاصلة العائمة (التي تقارب الأرقام الحقيقية) والأحرف والمنطقية. يقيد نوع البيانات القيم التي قد يتخذها تعبير، مثل متغير أو دالة. يحدد نوع البيانات هذا العمليات التي يمكن إجراؤها على البيانات، ومعنى البيانات، والطريقة التي يمكن بها تخزين قيم هذا النوع. يوفر نوع البيانات مجموعة من القيم التي يمكن للتعبير (أي المتغير، الوظيفة، إلخ) أن يأخذ منها قيمه.
نحتاج في حياتنا اليومية للتعامل مع الأرقام والأحرف والنصوص والعلامات المنطقية صح (Truth) أو خطأ (False)..إلخ، جميع ماذكر سابقا يسمى أنواع البيانات، كذلك في علم الحاسوب تحتاج لغات البرمجة إلى تلك الأنواع لتتعامل مع الذاكرة، يجب أن تعلم أن جميع لغات البرمجة تجتمع في الجوهر نفسه بالنسبة للأنواع إلا أن الاختلاف بينهما يكون عادة بالمصطلحات مثلا: في لغة C++ يسمى العدد العشري float أما في لغة Visual Basic يسمى single عشري.

## مفهوم

تُستخدم أنواع البيانات داخل أنظمة النوع، والتي تقدم طرقًا مختلفة لتعريفها وتنفيذها واستخدامها. تضمن أنظمة الأنواع المختلفة درجات متفاوتة من نوع الأمان.
تتضمن جميع لغات البرمجة تقريبًا بشكل صريح مفهوم نوع البيانات، على الرغم من أن اللغات المختلفة قد تستخدم مصطلحات مختلفة.
تشمل أنواع البيانات الشائعة:
* عدد صحيح
* حسابات الفاصلة المتحركة رقم Floating-point
* رمز (Character)
* سلسلة (string)
* نوع البيانات المنطقية (boolean)
على سبيل المثال، في لغة برمجة Java، يمثل النوع int مجموعة الأعداد الصحيحة 32 بت التي تتراوح قيمتها من −2,147,483,648 إلى 2,147,483,647، بالإضافة إلى العمليات التي يمكن إجراؤها على الأعداد الصحيحة، مثل الجمع والطرح والضرب. من ناحية أخرى، يمكن تمثيل اللون بثلاثة بايتات تشير إلى مقادير كل من الأحمر والأخضر والأزرق، وسلسلة تمثل اسم اللون.
تسمح معظم لغات البرمجة أيضًا للمبرمج بتحديد أنواع بيانات إضافية، عادةً عن طريق الجمع بين عناصر متعددة من أنواع أخرى وتحديد العمليات الصالحة لنوع البيانات الجديد. على سبيل المثال، قد يقوم المبرمج بإنشاء نوع بيانات جديد يسمى «عدد مركب» يتضمن أجزاء حقيقية وخيالية. يمثل نوع البيانات أيضًا قيدًا يتم وضعه على تفسير البيانات في نظام النوع، ويصف تمثيل وتفسير وهيكل القيم أو الكائنات المخزنة في ذاكرة الكمبيوتر. يستخدم نظام النوع معلومات نوع البيانات للتحقق من صحة برامج الكمبيوتر التي تصل إلى البيانات أو تتعامل معها.
معظم أنواع البيانات في الإحصاء لها أنواع قابلة للمقارنة في برمجة الكمبيوتر والعكس صحيح كما هو موضح في الجدول التالي:
| Statistics | Programming |
| قيمة (مستويات القياس) | حسابات الفاصلة المتحركة |
| قيمة (مستويات القياس) | حسابات الفاصلة المتحركة |
| count data (usually non-negative) | عدد صحيح |
| بيانات ثنائية | نوع البيانات المنطقية |
| متغير نوعي | enumerated type |
| random vector | list or array |
| تجمع مصفوفة غاوسية | two-dimensional array |
| random tree $^{[لغاتأخرى]}$‏ | tree |

## مقدمة

أنواع البيانات تستخدم في نظام الأنواع، الذي يقدم عدة طرق مختلفة لتعريف الأنواع مثل: المتغيرات (variable) , الدوال (Functions) , الوحدات (Units). يمكن أن نعرف نوع البيانات أنه «كل خاصية في البرنامج نستطيع أن نحدده دون تنفيذ البرنامج». جميع لغات البرمجة خاصة الشائعة منها تستخدم أنواع البيانات، إلا أنها تختلف في المصطلحات(المسميات), بالنسبة للأنواع الأكثر شائعة فهي:
* عدد صحيح integer
* منطقي بوليان
* حرفي رمز (حوسبة)
* نصوص أبجدية سلسلة (علم الحاسوب)
* الفاصلة العائمة عدد فاصل عائم

## أنواع البيانات
### الأنواع المركبة

    الأنواع المركبة: هي أنواع مستمدة من أكثر من نوع أولي، ويمكن القيام بذلك بعدة طرق مختلفة، يطلق عليها وهي مجتمة تراكيب البيانات (أو هياكل البيانات) Data Structures, يجب أن تعلم أن هياكل البيانات تختلف عن البيانات الأولية، مثلا: مصفوفة من أعداد صحيحة تختلف عن النوع الصحيح نفسه integer.
   * المصفوفات: تقوم بتخزين عدد من العناصر من نفس النوع وبترتيب معين.
   * السجلات(وتسمى أيضا تركيبات): هي أبسط أنواع هياكل البيانات.
   * الاتحاد: يقوم بتعريف عدة أنواع أولية بداخلة، يتميز أنه لايقوم بتخزين إلا قيمة واحدة لجميع المتغيرات طيلة تنفيذ البرنامج.

#### التعدادات

    (بالإنجليزية: Enumerated type)‏ هي عبارة عن عدة ثوابت تحمل قيم مختلفة فيما بينها، يمكن أن تقارنها وأن تسندها إلى متغيرات أخرى.

#### النوع النصي

   * الحروف: هي عبارة عن حرف أبجدي، أرقام، رموز، علامات.
   * نصوص: هي عبارة عن سلسلة حرفية، تستخدم في الجمل والكلمات.

### أنواع آخرى
#### المؤشرات والمراجع

   * المؤشرات (Pointers) : هي عبارة عن أماكن في الذاكرة تقوم بتخزين عناوين المتغيرات فقط، تشتهر بها لغة C/C++ التي تتميز عن بعض اللغات التي لاتدعم هذا النوع من البيانات.
   * المراجع: هي عبارة عن مؤشرات ثابتة، تقوم بتخزين عنوان المتغير، وبالتالي تصبح تؤشر على عنوانه في الذاكرة، أي أن كل تغير في المرجع هو في الحقيقة تغير في المتغير الأصلى، يمكن أن نسمي المرجع أحيانا اسم آخر للمتغير.

#### الدوال (Functions)

    تقوم الدالة بإعادة قيمة بنفس النوع التي تحمله، مثلا دالة sine نقوم بإعطائها الزواية وهي تقوم بإعادة جيب الزاوية.

### أنواع البيانات المجردة

    أي نوع لايكون له هدف معين ليقوم بتنفيذه فهو نوع بيانات مجرد، مثلا المكدس هو نوع من أنواع البيانات المجردة، يمكنك تنفيذه كمصفوفة(هي عبارة عن قطع في الذاكرة متجاورة مع بعضها لها نفس النوع), أو يمكنك تنفيذه كقائمة مرتبطة (هي مجموعة من القطع في الذاكرة غير متجاورة تترابط مع بعضها بوساطة المؤشرات).

### أدوات أنواع البيانات

    لكي تريح نفسك، في اللغات عالية المستوى، يوجد أنواع بيانات محاكاة للواقع، مثلا هنالك أنواع تتعامل مع الوقت والتاريخ.. الخ، تسهل الكثير عند التعامل مع البرمجة.