---
title: "استبدال الرقم السحري بثابت رمزي"
type: "refactoring-technique"
slug: "replace-magic-number-with-symbolic-constant"
url: "http://localhost:3000/ar/replace-magic-number-with-symbolic-constant.md"
category: "تنظيم البيانات"
description: "المشكلة: يستخدم الكود الخاص بك رقمًا له معنى معين. الحل: استبدل هذا الرقم بثابت له اسم مقروء ومفهوم يوضح معنى الرقم."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# استبدال الرقم السحري بثابت رمزي

> المشكلة: يستخدم الكود الخاص بك رقمًا له معنى معين. الحل: استبدل هذا الرقم بثابت له اسم مقروء ومفهوم يوضح معنى الرقم.

## المشكلة

يستخدم الكود الخاص بك رقمًا له معنى معين.

## الحل

استبدل هذا الرقم بثابت له اسم مقروء ومفهوم يوضح معنى الرقم.

## لماذا نقوم بإعادة الهيكلة

الرقم السحري (magic number) هو قيمة عددية تظهر في الكود المصدري ولكن ليس لها معنى واضح. هذا "النمط المضاد" (anti-pattern) يجعل من الصعب فهم البرنامج وإعادة هيكلة الكود.

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

## الفوائد

* يمكن أن يعمل الثابت الرمزي كتوثيق حي لمعنى قيمته.
* تعديل قيمة الثابت أسهل بكثير من البحث عن هذا الرقم في كامل قاعدة الكود، دون المخاطرة بتغيير نفس الرقم المستخدم في مكان آخر لغرض مختلف بالخطأ.
* تقليل التكرار في استخدام الرقم أو السلسلة النصية في الكود. هذا مهم بشكل خاص عندما تكون القيمة معقدة وطويلة (مثل `3.14159` أو `0xCAFEBABE`).

## كيفية إعادة الهيكلة

1. قم بالتصريح عن ثابت وتعيين قيمة الرقم السحري له.
2. ابحث عن جميع مواضع ذكر الرقم السحري.
3. لكل رقم تجده، تحقق جيدًا من أن الرقم السحري في هذه الحالة المحددة يتوافق مع الغرض من الثابت. إذا كان الأمر كذلك، فاستبدل الرقم بالثابت الخاص بك. هذه خطوة مهمة، لأن نفس الرقم قد يعني أشياء مختلفة تمامًا (ويتم استبداله بثوابت مختلفة، حسب الحالة).
## Code Examples

### java

```java
// Before
double potentialEnergy(double mass, double height) {
  return mass * height * 9.81;
}

// After
static final double GRAVITATIONAL_CONSTANT = 9.81;

double potentialEnergy(double mass, double height) {
  return mass * height * GRAVITATIONAL_CONSTANT;
}
```

### csharp

```csharp
// Before
double PotentialEnergy(double mass, double height) 
{
  return mass * height * 9.81;
}

// After
const double GRAVITATIONAL_CONSTANT = 9.81;

double PotentialEnergy(double mass, double height) 
{
  return mass * height * GRAVITATIONAL_CONSTANT;
}
```

### php

```php
// Before
function potentialEnergy($mass, $height) {
  return $mass * $height * 9.81;
}

// After
define("GRAVITATIONAL_CONSTANT", 9.81);

function potentialEnergy($mass, $height) {
  return $mass * $height * GRAVITATIONAL_CONSTANT;
}
```

### python

```python
// Before
def potentialEnergy(mass, height):
    return mass * height * 9.81

// After
GRAVITATIONAL_CONSTANT = 9.81

def potentialEnergy(mass, height):
    return mass * height * GRAVITATIONAL_CONSTANT
```

### typescript

```typescript
// Before
potentialEnergy(mass: number, height: number): number {
  return mass * height * 9.81;
}

// After
static const GRAVITATIONAL_CONSTANT = 9.81;

potentialEnergy(mass: number, height: number): number {
  return mass * height * GRAVITATIONAL_CONSTANT;
}
```

