سؤال

إجراءات يمكن أن يكون لها المعلمات ، أي أخبار.يمكنك تحديد العديد من المعلمات كما قد تحتاج ، ولكن الكثير منهم سوف تجعل الروتين الخاص بك من الصعب أن نفهم والحفاظ عليها.

بالطبع يمكنك استخدام منظم متغير كحل:وضع كل تلك المتغيرات في واحد البنية وتمريرها إلى روتين.في الواقع, استخدام هياكل لتبسيط قوائم المعلمة هي واحدة من التقنيات وصفها ستيف ماكونيل في رمز كاملة.ولكن كما قال تعالى:

حذرا المبرمجين تجنب تجميع بيانات أكثر مما هو منطقيا ضروريا.

حتى إذا الروتين الخاص بك لديها الكثير من المعلمات أو يمكنك استخدام البنية تمويه كبيرة قائمة المعلمة, ربما كنت تفعل شيئا خاطئا.هذا هو أنك لا تبقي اقتران فضفاضة.

سؤالي هو ، متى يمكنني النظر في قائمة المعلمة كبير جدا ؟ أعتقد أن أكثر من 5 معلمات كثيرة جدا.ماذا تعتقد ؟

هل كانت مفيدة؟

المحلول

عندما أمر يعتبر ذلك فاحشة يمكن شيء يمكن أن ينظم على الرغم من 1st التعديل تضمن حرية التعبير ؟ وفقا العدالة بوتر ستيوارت "أنا أعرف أنه عندما أراه." نفس الشيء هنا.

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

أود أن أقترح أن طرح السؤال في المقام الأول ، وتأهيل سؤالك بقدر ما فعلت أنك تعرف كل هذا.الحل الأمثل هنا هو عدم الاعتماد على الصعب و سريع عدد, ولكن بدلا من التطلع نحو تصميم الاستعراضات رمز الآراء بين الأقران الخاصة بك لتحديد المناطق التي لديك منخفضة التماسك و ضيق اقتران.

لا تخافوا لإظهار زملاء العمل الخاص بك.إذا كنت تخشى أن هذا ربما يكون أكبر علامة على أن هناك شيئا خطأ مع رمز ، وأن بالفعل تعرف ذلك.

نصائح أخرى

وظيفة يمكن أن يكون لديك الكثير من المعلمات إن بعض المعلمات هي زائدة عن الحاجة.إن جميع المعلمات تستخدم الدالة يجب أن يكون العدد الصحيح من المعلمات.خذ هذا غالبا ما تستخدم الدالة:

HWND CreateWindowEx
(
  DWORD dwExStyle,
  LPCTSTR lpClassName,
  LPCTSTR lpWindowName,
  DWORD dwStyle,
  int x,
  int y,
  int nWidth,
  int nHeight,
  HWND hWndParent,
  HMENU hMenu,
  HINSTANCE hInstance,
  LPVOID lpParam
);

12 المعلمات (9 إذا كنت حزمة x,y,w h على شكل مستطيل) و هناك أيضا معايير مشتقة من اسم الفئة أيضا.كيف يمكنك تقليل هذا ؟ هل ترغب في خفض عدد أكثر من نقطة ؟

لا تدع عدد من المعلمات يزعجك, فقط تأكد من أنها منطقية وموثقة والسماح التحسس* تساعدك.

* الترميز الأخرى مساعدين المتاحة!

في رمز نظيفة, روبرت C.مارتن خصص أربعة صفحات هذا الموضوع.وهنا جوهر:

العدد المثالي من حجج وظيفة صفر (niladic).ثم يأتي واحد (بعملية) ، تليها اثنين (الديناميكية).ثلاث حجج (الثلاثية) ينبغي تجنبها قدر الإمكان.المزيد من ثلاثة (polyadic) يتطلب جدا خاصة مبرر -- ثم لا ينبغي أن تستخدم على أي حال.

بعض التعليمات البرمجية عملت معهم في الماضي تستخدم المتغيرات العالمية فقط لتجنب تمرير معلمات كثيرة جدا في جميع أنحاء.

من فضلك لا تفعل ذلك!

(عادة.)

إذا كنت تبدأ الحاجة إلى الاعتماد عقليا من المعلمات في التوقيع ومطابقتها المكالمة ، ثم حان الوقت ريفاكتور!

شكرا جزيلا على كل ما تبذلونه من الإجابات:

  • كان قليلا من المستغرب أن تجد الناس الذين يعتقدون أيضا (كما أفعل) 5 معلمات جيد حد التعقل من التعليمات البرمجية.

  • عموما, الناس يميلون إلى الموافقة على أن الحد ما بين 3 و 4 هو قاعدة جيدة من الإبهام.هذا هو المعقول كما أن الناس عادة سيئة الوقت عد أكثر من 4 أشياء.

  • كما ميلان نقاط, في المتوسط الناس يمكن أن تبقى أكثر أو أقل من 7 أشياء في رأسه في وقت واحد.ولكن أعتقد أنه لا يمكن أن ننسى أنه عند تصميم/صيانة/دراسة روتينية يجب أن نأخذ في الاعتبار أشياء أكثر من مجرد المعلمات.

  • بعض الناس يرى أن روتين يجب أن يكون لديك العديد من الحجج كما أنها بحاجة إلى.أتفق معك, ولكن فقط عدد قليل من الحالات المحددة (المكالمات إلى نظام التشغيل واجهات برمجة التطبيقات ، الروتينية حيث الأمثل هو المهم ، إلخ).أقترح أن يخفي تعقيد هذه الإجراءات عن طريق إضافة طبقة من التجريد فقط فوق هذه المكالمات كلما كان ذلك ممكنا.

  • نيك وقد بعض الأفكار المثيرة للاهتمام على هذا.إذا كنت لا تريد أن تقرأ تعليقاته ، وأنا ألخص لك:باختصار ، ذلك يعتمد:

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

    المغزى هنا هو لا تخافوا من عرض التعليمات البرمجية الخاصة بك إلى زملائك, يناقش معهم ومحاولة "تحديد المجالات التي لديك منخفضة التماسك و ضيق اقتران".

  • أخيرا أعتقد wnoise الكثير يتفق مع نيك, ويخلص له الساخرة مساهمة مع هذه الرؤية الشعرية (انظر التعليقات الواردة أدناه) فن البرمجة:

    البرمجة ليست الهندسية.المنظمة من التعليمات البرمجية هو الفن لأنه يعتمد على العوامل البشرية التي تعتمد كثيرا على السياق لأي القاعدة الصلبة.

هذه الإجابة تفترض OO اللغة.إذا كنت لا تستخدم واحدة--تخطي هذا الجواب (هذا ليس تماما لغة-الملحد الإجابة في كلمات أخرى.

إذا كنت تمر أكثر من 3 أو حتى المعلمات (وخاصة الجوهرية أنواع الكائنات) ، ليس أنه "كثيرة جدا" ولكن هذا قد يكون في عداد المفقودين على فرصة إنشاء كائن جديد.

البحث عن مجموعات من المعلمات التي تم تمريرها إلى أكثر من طريقة واحدة--حتى مجموعة مرت في طريقتين تقريبا الضمانات التي يجب أن يكون كائن جديد هناك.

ثم ريفاكتور الوظيفة في موضوع لن تصدق كم أنه يساعد كل من التعليمات البرمجية الخاصة بك فهم OO البرمجة.

يبدو أن هناك اعتبارات أخرى من مجرد رقم ، وهنا بعض التي تتبادر إلى الذهن:

  1. من المنطقي بالنسبة إلى الغرض الأساسي من وظيفة مقابللمرة واحدة الإعدادات

  2. إذا كانت مجرد بيئة أعلام تجميع يمكن أن يكون مفيد جدا

واحدة من آلان برليس المعروفة البرمجة epigrams (وروى في ACM SIGPLAN إشعارات 17(9) في أيلول / سبتمبر 1982) تنص على أنه "إذا كان لديك إجراء 10 معلمات ، ربما غاب عن بعض."

وفقا ستيف ماكونيل في رمز كاملة, ، يجب أن

الحد من عدد من الروتين المعلمات عن سبعة

بالنسبة لي , عندما قائمة يعبر خط واحد على IDE, ثم انها معلمة واحدة كثيرة جدا.أريد أن أرى جميع المعلمات في سطر واحد دون كسر العين الاتصال.ولكن هذا مجرد تفضيل شخصي.

عموما أنا أتفق مع 5 ، ومع ذلك ، إذا كان هناك حالة حيث كنت في حاجة أكثر و أوضح الطريق إلى حل المشكلة ، ثم استعمل أكثر من ذلك.

سبعة أشياء في الذاكرة على المدى القصير?

  1. اسم الدالة
  2. القيمة المرجعة من الدالة
  3. الغرض من الوظيفة
  4. المعلمة 1
  5. المعلمة 2
  6. المعلمة 3
  7. المعلمة 4

في أسوأ 5 مقتطفات الشفرة, تحقق الثانية, "هذا هو منشئ".وقد تحب أكثر من 37 ⋅ 4 ≈ 150 المعلمات:

هنا مبرمج كتب هذا المنشئ [...S]ome من قد تعتقد نعم كبيرة منشئ لكنه يستخدم الكسوف رمز جيل التلقائي أدوات[.] NOO في هذا المنشئ كان هناك صغيرة الخلل الذي اكتشفت ، مما جعلني نستنتج أن هذا البناء كان مكتوبا بخط اليد.(بالمناسبة هذا هو فقط الجزء العلوي من المنشئ ، ليست كاملة).

constructor with over 150 parameters

واحد أكثر من اللازم.أنا لا أقصد أن يكون سطحي, ولكن هناك بعض الوظائف التي تحتاج بالضرورة عدد غير قليل من الخيارات.على سبيل المثال:

void *
mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t offset);

هناك 6 الحجج و كل واحد منهم هو ضروري.وعلاوة على ذلك, ليس هناك صلة مشتركة بينهما لتبرير تجميع لهم.ربما يمكنك تحديد "البنية mmapargs" ، ولكن هذا سيكون أسوأ.

وفقا بيرل أفضل الممارسات, 3 هو حسنا ، 4 هو عدد كبير جدا.انها مجرد التوجيهي ، ولكن في متجر هذا ما نحاول التمسك.

كنت أود أن ألفت حد الوظائف العامة في 5 معلمات نفسي.

IMHO طويلة المعلمة قوائم مقبولة فقط في القطاع الخاص المحلي/وظائف المساعد التي تهدف فقط إلى أن يسمى من عدد قليل من أماكن محددة في القانون.في تلك الحالات, قد تحتاج إلى تمرير الكثير من معلومات الدولة جنبا إلى جنب, ولكن القراءة ليست كبيرة كما من القلق منذ إلا أنت (أو أي شخص سوف تحافظ على الكود الخاص بك و يجب أن تفهم أساسيات الوحدة النمطية الخاص بك) يجب أن نهتم استدعاء هذه الدالة.

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

97 يبدو صحيحا.

أي أقل و تفقد المرونة.

أتوقف عند ثلاث معلمات كقاعدة عامة من الإبهام.أي أكثر و حان الوقت لتمرير مجموعة من المعلمات أو تكوين كائن بدلا من ذلك ، والذي يسمح أيضا في المستقبل المعلمات تضاف دون تغيير API.

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

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

باستخدام فئة واحدة تشمل جميع المعلمات سوف تعمل على نحو أفضل لأن معلمة واحدة مرت الإشارة أن تكون أنيقة و أنظف وأسرع!

بالنسبة لي يمكن أن تكون هناك حالات حيث سوف تتجاوز 4 أو عدد ثابت.أشياء يمكن أن يكون بالمرصاد

  1. طريقة يفعل الكثير و تحتاج إلى ريفاكتور.
  2. قد ترغب في النظر في استخدام مجموعة أو بنية البيانات.
  3. إعادة التفكير في فئة تصميم, ربما بعض الأشياء لا تحتاج إلى أن تنتقل في جميع أنحاء.

من زاوية من سهولة الاستخدام أو سهولة قراءة التعليمات البرمجية, أنا أعتقد عندما كنت في حاجة إلى نوع من "التفاف" طريقة التوقيع أن يجب أن تجعلك تتوقف وتفكر,إلا إذا كنت تشعر بالعجز و جميع الجهود من صنع التوقيع أصغر يؤدي إلى أي نتيجة.بعض المكتبات في الماضي والحاضر استخدام أكثر من 4-5 عربات الأطفال.

حكم بلدي من التجربة هو أنني بحاجة إلى أن تكون قادرا على تذكر المعلمات طويلة بما فيه الكفاية للنظر في مكالمة وقل ما يفعل.حتى لو كنت لا يمكن أن ننظر في الطريقة ثم اقلب على دعوة من طريقة وتذكر المعلمة التي ما ثم هناك عدد كبير جدا.

بالنسبة لي أن يعادل حوالي 5 ، ولكن أنا لست مشرق.الأميال الخاص بك قد تختلف.

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

فإنه يعتمد اعتمادا كبيرا على البيئة التي تعمل بها.خذ على سبيل المثال جافا سكريبت.في جافا سكريبت أفضل طريقة تمرير معلمات باستخدام الكائنات مع أزواج مفتاح/قيمة مما يعني أنك لا تملك إلا معلمة واحدة.في الأنظمة الأخرى بقعة الحلو سيكون في ثلاثة أو أربعة.

في النهاية كل ذلك يتلخص إلى الذوق الشخصي.

أنا أتفق مع 3 حسنا, 4 هو الكثير من كمبدأ توجيهي.مع أكثر من 3 معلمات, أنت حتما تفعل أكثر من مهمة واحدة.واحدة ثم أكثر المهام يجب أن تنقسم إلى طرق منفصلة.

ومع ذلك ، إذا نظرت إلى أحدث مشروع عملت عليه ، الاستثناءات قد تكثر و معظم الحالات سيكون من الصعب الحصول على وصولا الى 3 معلمات.

إذا كان لدي 7-10 المعلمات في روتين واحد أنظر تجميع لهم في فئة جديدة ولكن لا إذا كان هذا الفصل لن يكون سوى مجموعة من الحقول مع حاصل على واضعي - فئة جديدة له هل شيء آخر من المراوغة القيم في الخارج.وإلا كنت وضعت وليس مع المعلمة القائمة.

انها حقيقة معروفة أن في المتوسط الناس يمكن أن تبقي 7 +/- 2 الأشياء في رأسه في وقت واحد.أود أن استخدام هذا المبدأ مع المعلمات.على افتراض أن المبرمجين كلها فوق المتوسط شعب ذكي ، أقول كل 10+ كثيرة جدا.

راجع للشغل, إذا المعلمات مماثلة في أي شكل من الأشكال ، كنت وضعت لهم في ناقلات أو قائمة بدلا من البنية أو فئة.

كنت قاعدة جوابي على كيفية غالبا ما يتم استدعاء الدالة.

إذا كان الحرف الأول وظيفة فقط من أي وقت مضى ودعا مرة واحدة ثم ندعه يستغرق 10 parms أو أكثر ، من يهتم.

إذا كان يطلق عليه عدة مرات في الإطار ثم تميل إلى جعل هيكل فقط تمرير مؤشر إلى أنه منذ أن يميل إلى أن يكون أسرع ( على افتراض أن كنت لا إعادة بناء البنية في كل مرة أيضا ).

وفقا جيف بيزوس من الأمازون الشهرة لا أكثر مما يمكن أن تتغذى اثنين من البيتزا:

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top