---
title: "قائمة المعاملات الطويلة"
type: "code-smell"
slug: "long-parameter-list"
url: "http://localhost:3000/ar/smells/long-parameter-list.md"
category: "المتضخمات"
description: "أكثر من ثلاثة أو أربعة معاملات في الدالة."
---
# قائمة المعاملات الطويلة

> أكثر من ثلاثة أو أربعة معاملات في الدالة.

## Signs and Symptoms

أكثر من ثلاثة أو أربعة معاملات في الدالة.

## Reasons for the Problem

قد تنشأ قائمة طويلة من المعاملات بعد دمج عدة أنواع من الخوارزميات في دالة واحدة. وقد تُنشأ هذه القائمة الطويلة للتحكم في الخوارزمية التي ستُنفَّذ وكيفية تنفيذها.

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

يصعب فهم مثل هذه القوائم، التي تصبح متناقضة وصعبة الاستخدام كلما طالت. بدلاً من قائمة طويلة من المعاملات، يمكن للدالة استخدام بيانات كائنها الخاص. إذا لم يحتوِ الكائن الحالي على جميع البيانات اللازمة، يمكن تمرير كائن آخر (سيحصل على البيانات اللازمة) كمعامل للدالة.

## Payoff

* كود أكثر وضوحاً وأقصر.
* قد تكشف إعادة الهيكلة عن كود مكرر لم يُلاحَظ من قبل.
## Relations

**Treated by**

- [استبدال المعامل باستدعاء دالة](/ar/replace-parameter-with-method-call.md)
- [الحفاظ على الكائن كاملاً (Preserve Whole Object)](/ar/preserve-whole-object.md)
- [إدخال كائن المعاملات (Introduce Parameter Object)](/ar/introduce-parameter-object.md)


## Detected by

- **sonar** `S107` — يجب ألا تحتوي الدوال على عدد كبير جداً من المعاملات (https://rules.sonarsource.com/java/RSPEC-107/)
- **eslint** `max-params` — تطبيق حد أقصى لعدد المعاملات في تعريفات الدوال (https://eslint.org/docs/latest/rules/max-params)
- **eslint** `@typescript-eslint/max-params` — تطبيق حد أقصى لعدد المعاملات (مع دعم TypeScript) (https://typescript-eslint.io/rules/max-params/)
- **pylint** `R0913` — too-many-arguments (https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/too-many-arguments.html)
- **checkstyle** `ParameterNumber` — ParameterNumber (https://checkstyle.org/checks/sizes/parameternumber.html)
