---
title: "الكود المكرر"
type: "code-smell"
slug: "duplicate-code"
url: "http://localhost:3000/ar/smells/duplicate-code.md"
category: "الزوائد"
description: "يبدو مقطعا الكود متطابقَين تقريباً."
---
# الكود المكرر

> يبدو مقطعا الكود متطابقَين تقريباً.

## Signs and Symptoms

يبدو مقطعا الكود متطابقَين تقريباً.

## Reasons for the Problem

يحدث التكرار عادةً عندما يعمل عدة مبرمجين على أجزاء مختلفة من البرنامج ذاته في الوقت ذاته. نظراً لعملهم على مهام مختلفة، قد لا يكونون على علم بأن أحد زملائهم قد كتب بالفعل كوداً مشابهاً يمكن إعادة توظيفه لاحتياجاتهم.

ثمة أيضاً تكرار أكثر خفاءً، حين تبدو أجزاء معينة من الكود مختلفة لكنها تؤدي في الحقيقة المهمة ذاتها. هذا النوع من التكرار يصعب اكتشافه وإصلاحه.

أحياناً يكون التكرار متعمداً. عند الاستعجال للوفاء بالمواعيد النهائية والكود الموجود «مناسب تقريباً» للمهمة، قد لا يستطيع المبرمجون المبتدئون مقاومة إغراء نسخ الكود المناسب ولصقه. وفي بعض الحالات، يكون المبرمج ببساطة كسولاً جداً للترتيب.

## Payoff

* يؤدي دمج الكود المكرر إلى تبسيط بنية الكود وجعله أقصر.
* التبسيط + القِصَر = كود أسهل في التطوير وأقل تكلفة في الدعم.
## Relations

**Treated by**

- [استخراج الدالة](/ar/extract-method.md)
- [رفع الحقل (Pull Up Field)](/ar/pull-up-field.md)
- [رفع متن الباني (Pull Up Constructor Body)](/ar/pull-up-constructor-body.md)
- [تكوين دالة القالب](/ar/form-template-method.md)
- [استبدال الخوارزمية](/ar/substitute-algorithm.md)
- [استخراج الفئة العليا](/ar/extract-superclass.md)
- [استخراج الفئة](/ar/extract-class.md)
- [دمج التعبيرات الشرطية](/ar/consolidate-conditional-expression.md)
- [دمج الأجزاء الشرطية المكررة](/ar/consolidate-duplicate-conditional-fragments.md)


## Detected by

- **sonar** `S4144` — يجب ألا تمتلك الدوال تطبيقات متطابقة (https://rules.sonarsource.com/java/RSPEC-4144/)
- **eslint** `sonarjs/no-identical-functions` — يجب ألا تمتلك الدوال تطبيقات متطابقة (https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/no-identical-functions.md)
- **pmd** `cpd` — CPD (كاشف النسخ واللصق) (https://pmd.github.io/pmd/pmd_userdocs_cpd.html)
- **eslint** `sonarjs/no-all-duplicated-branches` — يجب ألا تمتلك جميع فروع الشرط التطبيقَ ذاته (S3923) (https://github.com/SonarSource/eslint-plugin-sonarjs/blob/master/docs/rules/no-all-duplicated-branches.md)
- **sonar** `S1192` — يجب ألا تتكرر سلاسل النصوص الحرفية (https://rules.sonarsource.com/java/RSPEC-1192/)
