---
title: "دمج التعبيرات الشرطية"
type: "refactoring-technique"
slug: "consolidate-conditional-expression"
url: "http://localhost:3000/ar/consolidate-conditional-expression.md"
category: "تبسيط التعبيرات الشرطية"
description: "المشكلة: لديك شروط متعددة تؤدي إلى نفس النتيجة أو الإجراء. الحل: ادمج كل هذه الشروط في تعبير شرطي واحد."
languages: ["java", "csharp", "php", "python", "typescript"]
---
# دمج التعبيرات الشرطية

> المشكلة: لديك شروط متعددة تؤدي إلى نفس النتيجة أو الإجراء. الحل: ادمج كل هذه الشروط في تعبير شرطي واحد.

## المشكلة

لديك شروط متعددة تؤدي إلى نفس النتيجة أو الإجراء.

## الحل

ادمج كل هذه الشروط في تعبير شرطي واحد.

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

يحتوي الكود الخاص بك على العديد من العمليات المتناوبة التي تؤدي إجراءات متطابقة. وليس من الواضح سبب تقسيم هذه العمليات.

الغرض الرئيسي من الدمج هو استخراج الشرط إلى دالة منفصلة لمزيد من الوضوح.

## الفوائد

* يزيل كود تدفق التحكم المكرر. يساعد دمج الشروط المتعددة التي لها نفس "الوجهة" في إظهار أنك تقوم بفحص معقد واحد فقط يؤدي إلى إجراء واحد.
* من خلال دمج جميع العمليات، يمكنك الآن عزل هذا التعبير المعقد في دالة جديدة باسم يوضح الغرض من الشرط.

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

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

1. ادمج الشروط في تعبير واحد باستخدام معاملات الربط `and` و `or`. كقاعدة عامة عند الدمج:

  * الشروط المتداخلة (nested) يتم ربطها باستخدام `and`.
  * الشروط المتتالية (consecutive) يتم ربطها باستخدام `or`.
2. قم بتطبيق طريقة [استخراج الدالة](/extract-method) على شروط العملية وامنح الدالة اسماً يعكس الغرض من التعبير.
## Relations

**Eliminates smells**

- [الكود المكرر](/ar/smells/duplicate-code.md)

## Code Examples

### java

```java
// Before
double disabilityAmount() {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // حساب مبلغ الإعاقة.
  // ...
}

// After
double disabilityAmount() {
  if (isNotEligibleForDisability()) {
    return 0;
  }
  // حساب مبلغ الإعاقة.
  // ...
}
```

### csharp

```csharp
// Before
double DisabilityAmount() 
{
  if (seniority < 2) 
  {
    return 0;
  }
  if (monthsDisabled > 12) 
  {
    return 0;
  }
  if (isPartTime) 
  {
    return 0;
  }
  // حساب مبلغ الإعاقة.
  // ...
}

// After
double DisabilityAmount()
{
  if (IsNotEligibleForDisability())
  {
    return 0;
  }
  // حساب مبلغ الإعاقة.
  // ...
}
```

### php

```php
// Before
function disabilityAmount() {
  if ($this->seniority < 2) {
    return 0;
  }
  if ($this->monthsDisabled > 12) {
    return 0;
  }
  if ($this->isPartTime) {
    return 0;
  }
  // حساب مبلغ الإعاقة
  ...

// After
function disabilityAmount() {
  if ($this->isNotEligibleForDisability()) {
    return 0;
  }
  // حساب مبلغ الإعاقة
  ...
```

### python

```python
// Before
def disabilityAmount():
    if seniority < 2:
        return 0
    if monthsDisabled > 12:
        return 0
    if isPartTime:
        return 0
    # حساب مبلغ الإعاقة.
    # ...

// After
def disabilityAmount():
    if isNotEligibleForDisability():
        return 0
    # حساب مبلغ الإعاقة.
    # ...
```

### typescript

```typescript
// Before
disabilityAmount(): number {
  if (seniority < 2) {
    return 0;
  }
  if (monthsDisabled > 12) {
    return 0;
  }
  if (isPartTime) {
    return 0;
  }
  // حساب مبلغ الإعاقة.
  // ...
}

// After
disabilityAmount(): number {
  if (isNotEligibleForDisability()) {
    return 0;
  }
  // حساب مبلغ الإعاقة.
  // ...
}
```

