2008-11-25 24 views
7

संभव डुप्लिकेट:
How many parameters are too many?कितने फ़ंक्शन पैरामीटर बहुत अधिक हैं?

मैं सिर्फ एक समारोह है कि कई मूल्यों में ले लिया लिख ​​रहा था और यह मेरे सोच मिला है। फ़ंक्शन/विधि में तर्कों की संख्या कितनी है? जब (अगर) यह एक दोषपूर्ण डिजाइन संकेत करता है? क्या आप तर्कों की मात्रा को कम करने के लिए structs, arrays, pointers, आदि में फ़ंक्शन को डिज़ाइन/रिफैक्टर करते हैं? क्या आप तर्कों की संख्या को कम करने के लिए आने वाले डेटा को दोबारा प्रतिक्रिया देते हैं? ऐसा लगता है कि ओओपी डिज़ाइनों में यह थोड़ा कम लागू हो सकता है। यह देखने के लिए उत्सुक है कि अन्य लोग इस मुद्दे को कैसे देखते हैं।

संपादित करें: संदर्भ के लिए मैंने अभी लिखा 5 फ़ंक्शन में लिया गया फ़ंक्शन। मैं कई लोगों की परिभाषा का उपयोग करता हूं जो मेरे एपी इकोन शिक्षक ने मुझे दिया था। 2 से अधिक; 7.

+0

लड़का मुझे आशा है कि है उन्होंने कहा, "7 से कम" –

उत्तर

-1

से कम मैं अधिकतम 4 कहूंगा। उपरोक्त कुछ भी, मुझे लगता है कि एक कक्षा के भीतर रखा जाना चाहिए।

+0

क्या हुआ अगर यह है कि 20 गुण एक कक्षाएं निर्माता के लिए है? – Blankman

+0

संपत्ति पैरामीटर नहीं लेती है ... –

15
स्टीव मैककोनेल के अनुसार कोड पूरा में, आपको चाहिए

सीमा एक नियमित के पैरामीटर की संख्या के बारे में सात

+0

उस पुस्तक का बड़ा प्रशंसक – Uri

+0

सात ऐसा लगता है जो किसी भी प्रकार के इंटरफ़ेस, पैरामीटर या मेनूेंट्री से अधिक नहीं होना चाहिए। – Jonke

+0

सात जानकारी की मात्रा है जिसे अल्पकालिक स्मृति में संग्रहीत किया जा सकता है।कम से कम यही उन्होंने मुझे बताया, लेकिन मैं विवरण भूल गया। –

16

मैं नहीं जानता कि करने के लिए

, लेकिन मैं इसे जब पता मैँ इसे देखता हूँ।

+0

क्षमा करें कोई वोट नहीं छोड़ा गया। लेकिन यह सिर्फ यही है। –

+1

तो फ़ंक्शन पैरामीटर पोर्नोग्राफ़ी की तरह हैं? –

+0

ठीक है, यह विषय का एक दिलचस्प परिवर्तन है। यह सॉफ्टवेयर शब्द शब्द का एक और अर्थ देता है ... –

1

त्वरित उत्तर: जब आपको रुकना है और उस प्रश्न से पूछना है, तो आपके पास बहुत सारे हैं।

व्यक्तिगत रूप से मुझे संख्या छह से कम रखना पसंद है। यदि अधिक जरूरी है, तो समाधान समस्या पर निर्भर करता है। एक दृष्टिकोण "ऑटर को मान देने के लिए" सेटर "फ़ंक्शंस का उपयोग करना है जो अंततः आपके इच्छित कार्य को निष्पादित करेगा। जैसा कि आपने बताया है, एक और विकल्प एक संरचना का उपयोग करना है। किसी भी तरह से, आप वास्तव में गलत नहीं जा सकते हैं।

+0

मेरा मानना ​​है कि यह ए.के.ए. कमांड पैटर्न है। – moffdub

1

वैसे यह निश्चित रूप से इस बात पर निर्भर करेगा कि आपका कार्य क्या कर रहा है, कितने लोगों को "बहुत अधिक" माना जाएगा। ऐसा कहकर, निश्चित रूप से कई अलग-अलग पैरामीटर के साथ एक फ़ंक्शन होना संभव है जो फ़ंक्शन के अंदर कुछ मामलों को संभालने के विकल्प हैं, और उन विकल्पों के लिए उन डिफ़ॉल्ट कार्यों के साथ ओवरलोड को उन विकल्पों के लिए अधिभारित करना है।

इंटेलिजेंस (या अन्य आईडीई में समकक्ष) की व्यापकता और विजुअल स्टूडियो में एक्सएमएल दस्तावेज़ीकरण से टिप्पणियां दिखाने वाले टूलटिप्स के साथ, मुझे वास्तव में यह नहीं लगता कि इस प्रश्न का एक ठोस जवाब है।

1

बहुत अधिक पैरामीटर "कोड गंध" है।

आप कई विधियों में विभाजित हो सकते हैं या वेरिएबल को पुन: समूहित करने के लिए कक्षा का उपयोग कर सकते हैं जिसमें कुछ सामान्य है।

"बहुत ज्यादा" के लिए एक संख्या डालने के लिए कुछ बहुत ही व्यक्तिपरक है और आपके संगठन और आपके द्वारा उपयोग की जाने वाली भाषा पर निर्भर करता है, अंगूठे का नियम यह है कि यदि आप अपनी विधि के हस्ताक्षर को नहीं पढ़ सकते हैं और एक विचार है आपके पास ऐसा करने से अधिक जानकारी हो सकती है। Personnaly, मैं 5 पैरामीटर से अधिक नहीं जाने की कोशिश करो।

+1

किसी भी कारण से आप क्लास को समूह चर का उपयोग करना पसंद करते हैं? मैंने सोचा कि एक संरचना यहां अधिक समझदार होगी। – RWendi

+0

सभी भाषाएं कक्षाओं और structs के बीच भेद नहीं करते हैं। –

4

मुझे आम तौर पर विश्वास है कि यदि पैरामीटर कार्यात्मक रूप से संबंधित हैं (उदा।, समन्वय या रंग घटकों), तो उन्हें अच्छे उपायों के लिए कक्षा के रूप में encapsulated किया जाना चाहिए।

ऐसा नहीं है कि मैं हमेशा इस अपने आप का पालन करें;)

0

मेरे लिए 5.

यह प्रबंधन करने के लिए कठिन है है (नाम, क्रम, आदि) से परे याद है। इसके अलावा यदि मैं अब तक आया हूं तो मेरे पास डिफ़ॉल्ट मान वाले संस्करण हैं जो इसे कॉल करते हैं।

0

फ़ंक्शन पर भी निर्भर करता है, यदि आपके फ़ंक्शन को भारी उपयोगकर्ता हस्तक्षेप या चर की आवश्यकता है, तो मैं पिछले 7-8 रेंज नहीं जाऊंगा। जहां तक ​​पैरामीटर की औसत संख्या के साथ जाना है, मेरी राय में 5-6 मीठा स्थान है। यदि आप इससे अधिक उपयोग कर रहे हैं तो आप क्लास ऑब्जेक्ट्स को पैरामीटर या अन्य छोटे कार्यों के रूप में मानना ​​चाहेंगे।

0

यह व्यक्ति से व्यक्ति में भिन्न होता है। निजी तौर पर, जब मुझे तुरंत समझ में आता है कि कोड में आमंत्रण पढ़ने से फ़ंक्शन कॉल क्या कर रहा है, तो यह समय है कि मैं अपने ग्रे कोशिकाओं से तनाव दूर कर सकूं।

7

यदि आपको तब पूछना है तो शायद यह बहुत अधिक है।

0

मैंने सुना है कि 7 आंकड़े भी हैं, लेकिन मुझे लगता है कि यह किसी ऐसे समय से उत्पन्न होता है जब आप प्राचीन मूल्यों को पार कर सकते हैं।

आजकल आप किसी ऐसी वस्तु का संदर्भ पारित कर सकते हैं जो कुछ जटिल स्थिति (और व्यवहार) को समाहित करता है। उनमें से 7 का उपयोग निश्चित रूप से बहुत अधिक होगा।

मेरा व्यक्तिगत लक्ष्य से अधिक 4.

0

यह तर्क के प्रकार पर निर्भर करता है दृढ़ता से का उपयोग कर से बचने के लिए है। यदि वे सभी पूर्णांक हैं तो 2 बहुत अधिक हो सकते हैं। (मुझे किस क्रम को याद है?) यदि कोई तर्क शून्य को स्वीकार करता है, तो संख्या काफी हद तक गिर जाती है।

असली जवाब अपने आप पूछ से आता है:

  • कितना आसान है यह कॉल को समझने के लिए जब मैं कोड पढ़ रहा हूँ?
  • कोड लिखते समय सही तर्क और तर्क आदेश को याद रखना कितना आसान है?
2

रॉबर्ट सी मार्टिन (अंकल बॉब) Clean Code: A Handbook of Agile Software Craftsmanship

में एक अधिकतम मैं इस समय मेरे साथ किताब नहीं है के रूप में 3 की सिफारिश की गई लेकिन उनके तर्क, एक, दो और के साथ क्या करना है करने के लिए कम हद तक, तीन तर्क कार्य अच्छी तरह से और स्पष्ट रूप से कार्य के उद्देश्य को दिखाते हुए पढ़ते हैं।

यह निश्चित रूप से Single Responsibility Principal का पालन करने वाले बहुत छोटे, अच्छी तरह से नामित कार्यों की उनकी सिफारिश के साथ हाथ में है।

0

और यह प्रोग्रामिंग भाषा पर निर्भर करता है .. सी में, 7 पैरामीटर के साथ कार्यों को देखना वास्तव में दुर्लभ नहीं है .. हालांकि, सी # में, मैंने शायद ही कभी 5 से अधिक पैरामीटर देखे हैं और मैं आमतौर पर 3 से कम का उपयोग करता हूं।

// In C 
draw_dot(x, y, size, red, green, blue, alpha) 

// In C# 
Point point(x,y); 
Color color(red,green,blue,alpha); 

Tool.DrawDot(point, color); 
+0

आप किसी भी ओओ के साथ सी # को प्रतिस्थापित करना चाहते हैं: पी (और हाँ, कहीं नया लापता होना चाहिए: पी) – user35978

संबंधित मुद्दे