2010-08-02 15 views
8

मैं एफपीडीएफ लाइब्रेरी का उपयोग करके पीडीएफ बनाने के लिए कुछ PHP कोड लिख रहा हूं। और मैं मूल रूप से दस्तावेज़ की प्रत्येक पंक्ति को मुद्रित करने के लिए कोड की उसी 4 पंक्तियों का उपयोग करता हूं। मैं सोच रहा था कि कौन सा अधिक कुशल है, इन 4 लाइनों को बार-बार दोहरा रहा है, या इसे एक समारोह में बनाना बेहतर होगा? मैं उत्सुक हूं क्योंकि ऐसा लगता है कि एक समारोह में एक बड़ा ओवरहेड होगा क्योंकि फ़ंक्शन केवल 4 लाइन लंबा होगा।

कोड मैं इस तरह दिखता है पर सवाल कर रहा हूँ:फ़ंक्शन बनाम दोहराया कोड

$pdf->checkIfPageBreakNeeded($lineheight * 2, true); 
$text = ' label'; 
$pdf->MultiCell(0, $lineheight, $text, 1, 'L', 1); 
$text = $valueFromForm; 
$pdf->MultiCell(0, $lineheight, $text, 1, 'L'); 
$pdf->Ln(); 
+0

क्या आपके पास PHP में मैक्रो विकल्प भी नहीं है? – Shaihi

+0

आप इन 4 लाइनों को कितनी बार दोहरा रहे हैं। –

+1

@Shaihi: नहीं।PHP का संकलन नहीं किया गया है। (HiPHoP इसके बावजूद) – Piskvor

उत्तर

16

यह उत्तर देना चाहिए:

  • डॉन: http://en.wikipedia.org/wiki/Don%27t_repeat_yourself और http://www.codinghorror.com/blog/2007/03/curlys-law-do-one-thing.html

    घुंघराले की विधि, एक काम करते हैं, कई मूल सिद्धांतों आधुनिक सॉफ्टवेयर विकास के में परिलक्षित है अपने आप को दोहराएं

    यदि आपके पास एक ही चीज़ को व्यक्त करने के एक से अधिक तरीके हैं, तो पर दो या तीन अलग प्रस्तुतिकरण एक दूसरे के साथ चरण से बाहर गिरने की संभावना है। यहां तक ​​कि यदि वे नहीं करते हैं, तो आप को को बनाए रखने के सिरदर्द की गारंटी दे रहे हैं, जब भी कोई परिवर्तन होता है। और परिवर्तन होगा। दोहराएं यदि आप लचीला और रखरखाव योग्य सॉफ़्टवेयर चाहते हैं तो खुद को दोहराएं।

  • एक बार और केवल एक बार

    प्रत्येक और व्यवहार के हर घोषणा एक बार होने चाहिए, और केवल एक बार । कोड को पुन: सक्रिय करते समय, मुख्य लक्ष्य नहीं होने पर यह मुख्य लक्ष्यों में से एक है, । डिज़ाइन लक्ष्य व्यवहार की डुप्लीकेट घोषणाओं को को आम तौर पर विलय करके के साथ एक समान अमूर्तकरण के साथ कई समान कार्यान्वयन को प्रतिस्थापित करने के लिए है।

  • सत्य का एक बिंदु

    दोहराव, विसंगति और कोड है कि आसानी से टूटी की ओर जाता है क्योंकि आप केवल कुछ repetitions बदल गया जब आप उन सभी को बदलने की जरूरत है। अक्सर, इसका अर्थ यह भी है कि आपने अपने कोड के संगठन के माध्यम से ठीक से विचार नहीं किया है। कोई भी समय जब आप डुप्लिकेट कोड देखते हैं, तो यह खतरे का संकेत है। जटिलता एक लागत है; इसे दो बार भुगतान न करें।

2

एक समारोह निश्चित रूप से बेहतर आप बाद में वापस जाने के लिए परिवर्तन करने के लिए है, खासकर अगर है।

12

बजाय खुद पूछ जो अधिक कुशल है आप के बजाय अपने आप से पूछना चाहिए जो अधिक maintainable है।

फ़ंक्शन लिखना कहीं अधिक रखरखाव योग्य है।

11

मैं becuse समारोह केवल 4 लाइनों लंबा हो जाएगा, क्योंकि यह एक समारोह की तरह लगता है एक बड़ा भूमि के ऊपर होता उत्सुक हूँ।

यह वह जगह है जहां स्पेगेटी आती है।

निश्चित रूप से इसे एक फ़ंक्शन में encapsulate और इसे कॉल करें। आप जिस ऊपरी हिस्से से डरते हैं वह सबसे खराब समयपूर्व अनुकूलन है।

DRY - अपने आप को दोहराएं मत।

2

ओवरहेड के बारे में चिंता न करें; खुद के बारे में चिंता करें, भविष्य में एक साल, इसे डीबग करने की कोशिश कर रहा है।

उपरोक्त के प्रकाश में, अपने आप को दोहराएं और एक छोटा सा कार्य न करें।

4

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

+0

+1, v. अनुचित :) – Piskvor

1

रखरखाव के कहीं अधिक महत्वपूर्ण विषय के बारे में सभी मूल्यवान उत्तरों के अतिरिक्त; मैं ओवरहेड के सवाल पर थोड़ा सा जोड़ना चाहता हूं।

मुझे समझ में नहीं आता कि आपको क्यों डर है कि चार लाइन फ़ंक्शन में अधिक ओवरहेड होगा।

  1. एक संकलित भाषा में, एक अच्छा कंपाइलर शायद उचित होने पर इसे रेखांकित करने में सक्षम होगा।

  2. एक व्याख्या की भाषा (जैसे PHP के रूप में) दुभाषिया इस दोहराया कोड के सभी हर बार का सामना करना पड़ा है, क्रम में पार्स करने के लिए है में। मेरे लिए, यह बताता है कि दोहराव में फ़ंक्शन कॉल की तुलना में एक बड़ा ओवरहेड हो सकता है।

  3. यहां फ़ंक्शन कॉल ओवरहेड के बारे में चिंता करना बेहद समयपूर्व अनुकूलन है। इस तरह के मामलों में, वास्तव में यह जानने का एकमात्र तरीका है कि यह तेज़ है, इसे प्रोफाइल करना है।

इसे काम करें, इसे सही बनाएं, इसे तेज बनाएं। उस क्रम में।

0

ओवरहेड वास्तव में बहुत छोटा है और आपके आवेदन में एक बड़ा अंतर नहीं होगा। क्या आप इन छोटे ओवरहेड के बजाय, लेकिन बनाए रखने के लिए एक आसान कार्यक्रम चाहते हैं, या आप केवल मिलीसेकंड को सहेजना चाहते हैं लेकिन दोहराए गए छोटे बदलावों को सही करने के लिए घंटों का समय लें।

यदि आप मुझसे या अन्य डेवलपर से पूछते हैं, तो हम निश्चित रूप से पहला विकल्प चाहते हैं। तो फ़ंक्शन के साथ आगे बढ़ें। यू आज कोड को बनाए रख नहीं सकता है, लेकिन जब आप करते हैं, तो आप केवल उस मिलीसेकंड को बचाने की कोशिश करने के लिए खुद से नफरत करेंगे

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