---
title: "الهوس بالأنواع الأساسية"
type: "code-smell"
slug: "primitive-obsession"
url: "http://localhost:3000/ar/smells/primitive-obsession.md"
category: "المتضخمات"
description: "استخدام الأنواع الأساسية (primitives) بدلاً من الكائنات الصغيرة للمهام البسيطة (مثل العملة، النطاقات، سلاسل النصوص الخاصة بأرقام الهواتف، إلخ.) استخدام الثوابت لترميز المعلومات (مثل الثابت USER_ADMIN_ROLE = 1 للإشارة إلى المستخدمين الذين لديهم صلاحيات المسؤول.) استخدام الثوابت النصية كأسماء حقول للاستخدام في مصفوفات البيانات."
---
# الهوس بالأنواع الأساسية

> استخدام الأنواع الأساسية (primitives) بدلاً من الكائنات الصغيرة للمهام البسيطة (مثل العملة، النطاقات، سلاسل النصوص الخاصة بأرقام الهواتف، إلخ.) استخدام الثوابت لترميز المعلومات (مثل الثابت USER_ADMIN_ROLE = 1 للإشارة إلى المستخدمين الذين لديهم صلاحيات المسؤول.) استخدام الثوابت النصية كأسماء حقول للاستخدام في مصفوفات البيانات.

## العلامات والأعراض

* استخدام الأنواع الأساسية (primitives) بدلاً من الكائنات الصغيرة للمهام البسيطة (مثل العملة، النطاقات، سلاسل النصوص الخاصة بأرقام الهواتف، إلخ.)
* استخدام الثوابت لترميز المعلومات (مثل الثابت `USER_ADMIN_ROLE = 1` للإشارة إلى المستخدمين الذين لديهم صلاحيات المسؤول.)
* استخدام الثوابت النصية كأسماء حقول للاستخدام في مصفوفات البيانات.

## أسباب المشكلة

مثل معظم الروائح الأخرى، يولد الهوس بالأنواع الأساسية في لحظات الضعف. قال المبرمج: "مجرد حقل لتخزين بعض البيانات!". إن إنشاء حقل أساسي أسهل بكثير من إنشاء فئة جديدة تماماً، أليس كذلك؟ وهكذا تم الأمر. ثم دعت الحاجة لحقل آخر وتمت إضافته بنفس الطريقة. وبمرور الوقت، أصبحت الفئة ضخمة ويصعب التعامل معها.

غالباً ما تُستخدم الأنواع الأساسية "لمحاكاة" الأنواع. فبدلاً من وجود نوع بيانات منفصل، يكون لديك مجموعة من الأرقام أو النصوص التي تشكل قائمة القيم المسموح بها لبعض الكيانات. ثم تُعطى أسماء سهلة الفهم لهذه الأرقام والنصوص المحددة عبر الثوابت، ولهذا السبب تنتشر على نطاق واسع.

مثال آخر على الاستخدام السيئ للأنواع الأساسية هو محاكاة الحقول. تحتوي الفئة على مصفوفة كبيرة من البيانات المتنوعة، وتُستخدم الثوابت النصية (المحددة في الفئة) كفهارس (indices) للمصفوفة للحصول على هذه البيانات.

## المردود

* يصبح الكود أكثر مرونة بفضل استخدام الكائنات بدلاً من الأنواع الأساسية.
* فهم وتنظيم أفضل للكود. تكون العمليات على بيانات معينة في نفس المكان بدلاً من أن تكون مبعثرة. لا مزيد من التخمين حول سبب كل هذه الثوابت الغريبة وسبب وجودها في مصفوفة.
* سهولة أكبر في العثور على الكود المكرر.
## Relations

**Treated by**

- [استبدال قيمة البيانات بكائن](/ar/replace-data-value-with-object.md)
- [إدخال كائن المعاملات (Introduce Parameter Object)](/ar/introduce-parameter-object.md)
- [الحفاظ على الكائن كاملاً (Preserve Whole Object)](/ar/preserve-whole-object.md)
- [استبدال كود النوع بفئة](/ar/replace-type-code-with-class.md)
- [استبدال كود النوع بفئات فرعية](/ar/replace-type-code-with-subclasses.md)
- [استبدال كود النوع بالحالة/الاستراتيجية](/ar/replace-type-code-with-state-strategy.md)
- [استبدال المصفوفة بكائن (Replace Array with Object)](/ar/replace-array-with-object.md)


## Detected by

- **sonar** `S109` — يجب عدم استخدام الأرقام السحرية (https://rules.sonarsource.com/java/RSPEC-109/)
- **sonar** `S1192` — يجب عدم تكرار النصوص الحرفية (https://rules.sonarsource.com/java/RSPEC-1192/)
- **eslint** `no-magic-numbers` — no-magic-numbers (نواة ESLint) (https://eslint.org/docs/latest/rules/no-magic-numbers)
- **eslint** `sonarjs/no-duplicate-string` — sonarjs/no-duplicate-string (https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/no-duplicate-string.md)
