---
title: "الدالة الطويلة"
type: "code-smell"
slug: "long-method"
url: "http://localhost:3000/ar/smells/long-method.md"
category: "المتضخمات"
description: "تحتوي الدالة على عدد كبير جداً من أسطر الكود. بشكل عام، أي دالة يزيد طولها عن عشرة أسطر يجب أن تدفعك إلى التساؤل."
---
# الدالة الطويلة

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

## Signs and Symptoms

تحتوي الدالة على عدد كبير جداً من أسطر الكود. بشكل عام، أي دالة يزيد طولها عن عشرة أسطر يجب أن تدفعك إلى التساؤل.

## Reasons for the Problem

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

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

## Payoff

* من بين جميع أنواع الكود كائني التوجه، تعيش الكلاسات ذات الدوال القصيرة أطول عمراً. كلما طالت الدالة أو الوظيفة، زادت صعوبة فهمها وصيانتها.
* فضلاً عن ذلك، توفر الدوال الطويلة مخبأً مثالياً للكود المكرر غير المرغوب فيه.

## Performance

هل يؤثر ازدياد عدد الدوال سلباً على الأداء، كما يدّعي كثيرون؟ في جميع الحالات تقريباً يكون التأثير ضئيلاً جداً لدرجة أنه لا يستحق القلق.

علاوة على ذلك، بعد أن أصبح كودك واضحاً ومفهوماً، ستكون أكثر قدرة على إيجاد أساليب فعّالة حقيقية لإعادة هيكلة الكود وتحقيق مكاسب أداء حقيقية حين تدعو الحاجة.
## Relations

**Treated by**

- [استخراج الدالة](/ar/extract-method.md)
- [استبدال المتغير المؤقت باستعلام](/ar/replace-temp-with-query.md)
- [إدخال كائن المعاملات (Introduce Parameter Object)](/ar/introduce-parameter-object.md)
- [الحفاظ على الكائن كاملاً (Preserve Whole Object)](/ar/preserve-whole-object.md)
- [استبدال الدالة بكائن دالة](/ar/replace-method-with-method-object.md)
- [تفكيك التعبيرات الشرطية](/ar/decompose-conditional.md)


## Detected by

- **sonar** `S138` — يجب ألا تحتوي الدوال على أسطر كود كثيرة جداً (https://rules.sonarsource.com/java/RSPEC-138/)
- **eslint** `max-lines-per-function` — تطبيق حد أقصى لعدد الأسطر في كل دالة (https://eslint.org/docs/latest/rules/max-lines-per-function)
- **eslint** `max-statements` — تطبيق حد أقصى لعدد العبارات المسموح بها في كتل الدوال (https://eslint.org/docs/latest/rules/max-statements)
- **pylint** `R0915` — too-many-statements (https://pylint.readthedocs.io/en/latest/user_guide/messages/refactor/too-many-statements.html)
- **rubocop** `Metrics/MethodLength` — Metrics/MethodLength (https://docs.rubocop.org/rubocop/cops_metrics.html#metricsmethodlength)
