जब मैं लंबी पैरामीटर सूची देखता हूं, तो मेरा पहला सवाल यह है कि क्या यह फ़ंक्शन या ऑब्जेक्ट बहुत अधिक कर रहा है। विचार करें:
EverythingInTheWorld earth=new EverythingInTheWorld(firstCustomerId,
lastCustomerId,
orderNumber, productCode, lastFileUpdateDate,
employeeOfTheMonthWinnerForLastMarch,
yearMyHometownWasIncorporated, greatGrandmothersBloodType,
planetName, planetSize, percentWater, ... etc ...);
बेशक यह उदाहरण जानबूझकर हास्यास्पद है, लेकिन मैंने बहुत सारे वास्तविक कार्यक्रमों को केवल थोड़े कम हास्यास्पद उदाहरणों के साथ देखा है, जहां एक वर्ग का उपयोग कई मुश्किल से संबंधित या असंबंधित चीजों को रखने के लिए किया जाता है, जाहिरा तौर पर सिर्फ इसलिए कि एक ही कॉलिंग प्रोग्राम को दोनों या उदाहरणों की आवश्यकता होती है प्रोग्रामर एक ही समय में दोनों के बारे में सोचने के लिए हुआ। कभी-कभी आसान उपाय यह होता है कि कक्षा को कई टुकड़ों में विभाजित किया जाए, जिसमें से प्रत्येक अपनी चीज करता है।
बस थोड़ा अधिक जटिल है जब एक वर्ग को वास्तव में कई तार्किक चीजों से निपटने की आवश्यकता होती है, जैसे कि ग्राहक के आदेश और ग्राहक के बारे में सामान्य जानकारी। इन मामलों में, ग्राहक के लिए एक क्लास और ऑर्डर के लिए एक क्लास क्रेट करें, और उन्हें आवश्यकतानुसार एक-दूसरे से बात करने दें। इसलिए इसके बजाय:
Order order=new Order(customerName, customerAddress, customerCity,
customerState, customerZip,
orderNumber, orderType, orderDate, deliveryDate);
हम कर सकते थे:
Customer customer=new Customer(customerName, customerAddress,
customerCity, customerState, customerZip);
Order order=new Order(customer, orderNumber, orderType, orderDate, deliveryDate);
बेशक, मैं उन कार्यों को पसंद करता हूं जो सिर्फ 1 या 2 या 3 पैरामीटर लेते हैं, कभी-कभी हमें यह स्वीकार करना पड़ता है कि, वास्तविक रूप से, यह फ़ंक्शन एक गुच्छा लेता है, और स्वयं की संख्या वास्तव में जटिलता पैदा नहीं करती है। उदाहरण के लिए:
Employee employee=new Employee(employeeId, firstName, lastName,
socialSecurityNumber,
address, city, state, zip);
हाँ, यह खेतों का एक समूह है, लेकिन शायद हम सभी उनके साथ क्या करने जा रहे हैं, उन्हें डेटाबेस रिकॉर्ड में सहेजना है या उन्हें स्क्रीन पर फेंकना है या कुछ ऐसे। यहां वास्तव में बहुत अधिक प्रसंस्करण नहीं है।
जब मेरी पैरामीटर सूचियां लंबी हो जाती हैं, तो मैं बहुत पसंद करता हूं कि क्या मैं खेतों को अलग-अलग प्रकार के डेटा दे सकता हूं। जैसे जब मैं कोई फ़ंक्शन देखता हूं जैसे:
void updateCustomer(String type, String status,
int lastOrderNumber, int pastDue, int deliveryCode, int birthYear,
int addressCode,
boolean newCustomer, boolean taxExempt, boolean creditWatch,
boolean foo, boolean bar);
और फिर मैं इसके साथ बुलाया देखें:
updateCustomer("A", "M", 42, 3, 1492, 1969, -7, true, false, false, true, false);
मैं चिंतित हूं। कॉल को देखते हुए, यह बिल्कुल स्पष्ट नहीं है कि ये सभी गुप्त नंबर, कोड और झंडे का क्या मतलब है। यह सिर्फ त्रुटियों के लिए पूछ रहा है। एक प्रोग्रामर आसानी से मापदंडों के क्रम के बारे में भ्रमित हो सकता है और गलती से दो स्विच कर सकता है, और यदि वे समान डेटा प्रकार हैं, तो कंपाइलर इसे स्वीकार करेगा। मेरे पास बहुत अधिक हस्ताक्षर हैं जहां ये सभी चीजें हैं, तो एक कॉल "A" के बजाय Type.ACTIVE जैसी चीजों में गुजरती है और "झूठी" के बजाय CreditWatch.NO, आदि।