क्या यह एक समारोह बनाने के लिए अनुचित है जो अनिवार्य रूप से एक अंतर्निहित फ़ंक्शन का नाम बदलता है?


40

मैं कुछ संदर्भों में न्यूनतम और अधिकतम कार्यों में भ्रमित हो जाता हूं।

एक संदर्भ में, जब आप दो मानों से अधिक या कम लेने के लिए फ़ंक्शन का उपयोग कर रहे हैं, तो कोई समस्या नहीं है। उदाहरण के लिए,

//how many autographed CD's can I give out?
int howManyAutographs(int CDs, int Cases, int Pens)
{
    //if no pens, then I cannot sign any autographs
    if (Pens == 0)
        return 0;

    //I cannot give away a CD without a case or a case without a CD
    return min(CDs, Cases);
}

आसान। लेकिन एक और संदर्भ में, मैं उलझन में हूं। यदि मैं अधिकतम या न्यूनतम सेट करने का प्रयास कर रहा हूं, तो मैं इसे पीछे की ओर ले जाता हूं।

//return the sum, with a maximum of 255
int cappedSumWRONG(int x, int y)
{
    return max(x + y, 255); //nope, this is wrong
}

//return the sum, with a maximum of 255
int cappedSumCORRECT(int x, int y)
{
    return min(x + y, 255); //much better, but counter-intuitive to my mind
}

क्या निम्न प्रकार से मेरे अपने कार्य करना अनुचित है?

//return x, with a maximum of max
int maximize(int x, int max)
{
    return min(x, max);
}

//return x, with a minimum of min
int minimize(int x, int min)
{
    return max(x, min)
}

जाहिर है, बिल्टइन का उपयोग तेजी से होगा लेकिन यह मेरे लिए एक अनावश्यक माइक्रोपटीमाइजेशन जैसा है। क्या कोई और कारण है जो यह असंगत होगा? एक समूह परियोजना के बारे में क्या?


72
यदि न्यूनतम और अधिकतम आपकी पठनीयता को नुकसान पहुंचा रहे हैं, तो स्वैपिंग पर विचार करें, फिर नियमित रूप से "यदि" है। कभी-कभी बेहतर पठनीयता के लिए कोड का थोड़ा और अधिक लिखना लायक होता है।
टी। सार -

23
एक छोटी पोस्ट के साथ आपने "क्लीन कोडिंग" की पूरी अवधारणा को नष्ट कर दिया है। मैं आपको प्रणाम करता हूं सर!
इवान

21
शायद आप C ++ 11 std::clampफ़ंक्शन या कुछ समान पर विचार कर सकते हैं ।
जुआन

15
शायद बेहतर नाम होंगे up_to(के लिए min) और at_least(के लिए max)? मुझे लगता है कि वे अर्थ को बेहतर तरीके से व्यक्त करते हैं minimize, आदि, हालांकि यह महसूस करने में एक पल लग सकता है कि वे क्यों कम्यूटेटिव हैं।
वारबो

59
minऔर maxभी minimizeऔर maximizeउन कार्यों के लिए पूरी तरह से गलत नाम हैं जिन्हें आप लिखना चाहते हैं। डिफ़ॉल्ट minऔर maxबहुत अधिक समझ में आता है। आपको वास्तव में ALMOST को फ़ंक्शन नाम सही मिले। इस ऑपरेशन को क्लैम्पिंग या कैपिंग कहा जाता है और आपने दो कैपिंग फ़ंक्शन लिखे हैं। मेरा सुझाव था capUpperBoundऔर capLowBound। मुझे किसी को समझाने की ज़रूरत नहीं है कि कौन क्या करता है, यह स्पष्ट है।
स्लीवेटमैन

जवाबों:


120

जैसा कि दूसरों ने पहले ही उल्लेख किया है: एक नाम के साथ एक फ़ंक्शन न बनाएं जो एक बिलिन, मानक-पुस्तकालय या आमतौर पर व्यापक रूप से उपयोग किए जाने वाले फ़ंक्शन के समान है, लेकिन इसके व्यवहार को बदलते हैं। नामकरण सम्मेलन के लिए उपयोग किया जाना संभव है, भले ही यह पहली नजर में आपके लिए बहुत मायने नहीं रखता हो, लेकिन एक बार जब आप एक ही काम करते हैं, तो उन अन्य कार्यों को पेश करने के लिए अपने कोड के कामकाज के बारे में तर्क करना असंभव होगा। उनके नामों की अदला-बदली हुई।

मानक लाइब्रेरी द्वारा उपयोग किए जाने वाले नामों को "ओवरलोडिंग" करने के बजाय, नए नामों का उपयोग करें जो ठीक-ठीक बताएं कि आपका क्या मतलब है। आपके मामले में, आप वास्तव में "न्यूनतम" में रुचि नहीं रखते हैं। बल्कि, आप एक मूल्य को कैप करना चाहते हैं । गणितीय रूप से, यह एक ही ऑपरेशन है लेकिन शब्दार्थ रूप से, यह काफी नहीं है। तो सिर्फ एक फंक्शन ही क्यों

int cap(int value, int limit) { return (value > limit) ? limit : value; }

यह वही करता है जो इसकी जरूरत है और इसके नाम से बताता है। (आप टिमस्टर के उत्तर में दिखाए capअनुसार भी लागू कर सकते हैं )।min

एक और अक्सर इस्तेमाल किया जाने वाला फ़ंक्शन नाम है clamp। यह तीन तर्क और "क्लैम्प" लेता है, अन्य दो मूल्यों द्वारा परिभाषित अंतराल में एक प्रदान किया गया मूल्य।

int clamp(int value, int lower, int upper) {
    assert(lower <= upper);  // precondition check
    if (value < lower) return lower;
    else if (value > upper) return upper;
    else return value;
}

यदि आप इस तरह के आम तौर पर ज्ञात फ़ंक्शन नाम का उपयोग कर रहे हैं, तो आपकी टीम में शामिल होने वाला कोई भी नया व्यक्ति (भविष्य में आप कुछ समय बाद कोड में वापस आ रहे हैं) जल्दी से समझ जाएगा कि आप को भ्रमित करने के बजाय उन्हें कोसने के बजाय क्या हो रहा है। समारोह के नाम के बारे में उम्मीदें वे सोचते थे कि वे जानते हैं।


2
आप भी इसे getValueNotBiggerThan (एक्स, सीमा) नाम दे सकते हैं यह सही दृष्टिकोण है, और एक सभ्य संकलक समारोह inlined हो जाएगा के साथ और जिसके परिणामस्वरूप मशीन कोड बनाया-इन का उपयोग कर के रूप में बिल्कुल वैसा ही हो जाएगा
फाल्को

20
@ फाल्को मैं कहूंगा कि "कैप" लगभग एक पर्यायवाची है जिसका मूल्य "इससे बड़ा नहीं है" लेकिन मैं आज उस बाइक शेड को पेंट नहीं करने जा रहा हूं। ;-)
5gon12eder

1
clampसभी प्रकार के सिग्नल प्रोसेसिंग और समान संचालन (इमेज प्रोसेसिंग, आदि) में बड़े पैमाने पर उपयोग किया जाता है, इसलिए निश्चित रूप से मैं भी यही करूंगा। हालांकि मैं यह नहीं कहूंगा कि इसे ऊपरी और निचले सीमा की आवश्यकता है: मैंने इसे अक्सर केवल एक दिशा के लिए भी देखा है।
वू

1
उल्लेख करने वाला था clamp, भी। और अगर यह सही तरीके से लिखा गया है, तो आप केवल एक अनंत / नकारात्मक अनंतता का उपयोग कर सकते हैं जब आप केवल एक ही तरीके से बाध्य करना चाहते हैं। उदाहरण के लिए, यह सुनिश्चित करने के लिए कि एक संख्या 255 से अधिक नहीं है (लेकिन कोई निचली सीमा नहीं है), आप उपयोग करेंगे clamp(myNumber, -Infinity, 255)
कैट

115

यदि आप ऐसा कार्य करते हैं, जहां 10minimize(4, 10) लौटता है , तो मैं कहूंगा कि यह अनुचित है क्योंकि आपके साथी प्रोग्रामर आपको गला घोंट सकते हैं।

(ठीक है, शायद वे सचमुच आपको मौत के घाट नहीं उतारेंगे, लेकिन गंभीरता से ... ऐसा मत करो।)


2
यह भी पूरी तरह से संभव है कि जब आप कुछ वर्षों में इस कोड पर काम करने के लिए वापस आते हैं, तो आप स्वयं यह पता लगाने में कई घंटे बिताएंगे कि जब आप न्यूनतम कॉल करते हैं तो आपके आंकड़े गलत क्यों हैं ...
धान

Aww ... इस उत्तर का उपयोग वास्तव में अच्छा (और अत्यधिक उच्च मतदान) टिप्पणी थी। (यह उत्तर पर पहली टिप्पणी भी थी, जिसने हास्य प्रवाह में मदद की।)
टोगम

मैं पंच कार्ड प्राप्त करना चाहता हूं और DO NOT("डू नॉट स्पिंडल, फोल्ड, या म्यूटेट") को पार कर सकता हूं । इस तरह से कुछ लागू करने वाले को एक कार्ड मिलेगा।
क्लॉकवर्क-म्यूजियम

26

एक फ़ंक्शन का नामकरण ठीक है, लेकिन मौजूदा शब्दों के अर्थ को बदलने की कोशिश न करें

फ़ंक्शन का एक उपनाम बनाना ठीक है - आम पुस्तकालय हर समय करते हैं

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

तो आपके मामले में, "मिनिनम / अधिकतम" समानता को त्याग दें जो आपको भ्रामक लगता है और अपना स्वयं का कोड बनाता है, कोड को समझना आसान है।

अपने उदाहरण को फिर से दिखाना:

int apply_upper_bound(int x, int y)
{
    return min(x, y);
}


int apply_lower_bound(int x, int y)
{
    return max(x, y)
}

एक अतिरिक्त बोनस के रूप में, हर बार जब आप इस कोड को देखते हैं, तो आप अपने आप को याद दिला रहे होंगे कि आपकी प्रोग्रामिंग भाषा में मिनट और अधिकतम का उपयोग कैसे किया जाता है। आखिरकार, यह आपके सिर में समझ बनाने के लिए आएगा।


4
मुझे लगता है कि आपने आवेदन को गलत समझा है minऔर maxजो ओपी को भ्रमित करता है। यह तब minहोता है जब कुछ मूल्य पर एक निश्चित ऊपरी सीमा निर्धारित करने के लिए उपयोग किया जाता है । get_lower_valueइस आवेदन में बस के रूप में counterintuitive होगा। अगर मुझे इस ऑपरेशन के लिए एक वैकल्पिक नाम चुनना था, तो मैं इसे सर्वोच्चता कहूंगा , हालांकि मुझे यकीन नहीं है कि कितने प्रोग्रामर तुरंत समझ पाएंगे।
बायीं ओर सबटैबआउट

3
@leftractionabout: सेट {1, 2} का वर्चस्व 2 है, इसलिए supremumउस फ़ंक्शन के लिए नाम का उपयोग न करें जिसे get_lower_valueकेवल कॉल करने के लिए ऊपर परिभाषित किया गया है min। यह अगले प्रोग्रामर को कॉल करने जैसी ही समस्या का कारण बनता है maximise। मैं इसे कॉल करने का सुझाव दूंगा apply_upper_bound, लेकिन मुझे यकीन नहीं है कि यह एकदम सही है। यह अभी भी अजीब है क्योंकि यह उसी तरह से काम करता है जब आप अपने चारों ओर एक ही तरीके से पैरामीटर डालते हैं, लेकिन नाम का अर्थ है कि मापदंडों में से एक "मूल्य" है और दूसरा "बाध्य" है, और यह कि वे किसी तरह अलग हैं।
स्टीव जेसोप

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

3
यह नीति "अलियासिंग एक फ़ंक्शन ठीक है, लेकिन मौजूदा शब्दों के अर्थ को बदलने की कोशिश न करें" सही और खूबसूरती से व्यक्त की गई है। दूसरे, यह विचार कि आपको एक तरह से नाम नहीं बदलना चाहिए जो अंतर्निहित कार्यों के संबंध में भ्रामक है (और: भले ही अंतर्निहित कार्यों का नाम खराब / बेवकूफ / भ्रामक हो) एक आदर्श विचार है। अधिकतम / मिनट का उदाहरण दें जो इस पृष्ठ पर आया, यह कुल भ्रम है।
फटी

1
ठीक है, मैंने "apply_upper_bound" का उपयोग करने के उत्तर को संपादित किया जो दोनों ओपी के तर्क को फिट करता है और ओवरलोडिंग शब्दावली से बचा जाता है। वर्बोसिटी कोई समस्या नहीं है। मैं यहाँ सही विधि नाम लिखने के लिए नहीं स्थापित कर रहा हूँ, बस उपनामों के नामकरण के लिए कुछ जमीनी नियम निर्धारित कर रहा हूँ। ओपी उसे संपादित कर सकता है जो उसे सबसे स्पष्ट और संक्षिप्त लगता है।
टिम ग्रांट

12

मुझे यह सवाल बहुत पसंद है। चलो हालांकि यह टूट गया।

1: क्या आपको कोड की एक पंक्ति को लपेटना चाहिए?

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

इसके अतिरिक्त आप इन दिनों एक लाइन में बहुत सारे सामान कर सकते हैं।

2: क्या नाम 'मिन' और 'मैक्स' भ्रामक हैं

हाँ! वे पूरी तरह से कर रहे हैं! एक साफ-सुथरा कोडिंग गुरु उनका नाम बदलकर "FunctionWhichReturnsTheLargestOfItsParameters" या कुछ और करेगा। सौभाग्य से हमारे पास दस्तावेज़ीकरण है (और यदि आप भाग्यशाली हैं) तो IntelliSense और टिप्पणियां हमें मदद करने के लिए ताकि कोई भी व्यक्ति जो नामों से भ्रमित हो, वे पढ़ सकें कि वे क्या करने वाले हैं।

3: क्या आपको उनका नाम बदलकर खुद कुछ और करना चाहिए।

हाँ, इसके लिए जाओ। उदाहरण के लिए, आप कर सकते हैं:

class Employee
{
    int NumberOfHolidayDaysIShouldHave(int daysInLue, int maxAllowableHolidayDays)
    {
         // Return the number of days in lue, but keep the value under the max allowable holiday days!
         // Don't use max, you fool!!
         return Math.Max(daysInLue, maxAllowableHolidayDays)
    }
}

यह अर्थ जोड़ता है, और कॉलर को मूल्य की गणना करने का तरीका जानना या जानना नहीं है।

4: क्या आपको "अधिकतम" के लिए "मिनट" का नाम बदलना चाहिए

नहीं!! क्या तुम पागल हो?! लेकिन हां, यह प्रश्न इस बिंदु को रेखांकित करता है कि विभिन्न लोग फ़ंक्शन और ऑब्जेक्ट नामों में विभिन्न अर्थों को पढ़ते हैं। एक व्यक्ति जो स्पष्ट और पारंपरिक पाता है वह दूसरा अपारदर्शी और भ्रमित करता है। इसीलिए हमारे पास टिप्पणियां हैं। आपको इसके बजाय लिखना चाहिए:

// Add x and y, but don't let it go over 255
s = min(x + y, 255);

फिर जब कोई पढ़ता है

// Add x and y, but don't let it go over 255
s = max(x + y, 255);

वे जानते हैं कि आपने गलती की है।


6
मजेदार! आपके उदाहरण में आपने सटीक त्रुटि की है कि आप किससे संबंधित हैं: आप चाहते हैं कि छुट्टियों की संख्या अधिक से अधिक नहीं हो। छुट्टियों से अधिक हो, इसलिए आप नी (ए, बी)
फाल्को

14
यदि क्लीन कोड सही मायने में बताता है कि लुडीक्रिक नाम जैसे कि FunctionWhichReturnsTheLargestOfItsParametersएक अच्छी बात है, तो मुझे इसका कोई हिस्सा नहीं चाहिए।
डेविड हैमेन

1
@ फाल्को लोल उफ़ !!!
इवान

4
@David Hammen: यह वास्तव में नहीं है, क्योंकि कोई भी वास्तविक प्रोग्रामिंग शैली FunctionWhichReturnsहर फ़ंक्शन के सामने मस्सा नहीं रखती है (जो अपवाद या समाप्ति को नहीं फेंकती है )। आप अंत में getMinimum, getLarger(या getLargest2 से अधिक इनपुट्स के साथ), हालांकि, लाइनों के साथ वास्तविक सलाह का पालन करके कर सकते हैं कि (ए) शुद्ध कार्यों और / या "गेटर्स" को मस्सा का उपयोग करना चाहिए get, (बी) अंग्रेजी शब्दों में संक्षिप्त नहीं होना चाहिए नाम। स्पष्ट रूप से यह उन लोगों के लिए बहुत ही क्रियात्मक है जो ऐसे कार्यों को कॉल करने का निर्णय लेते हैं max
स्टीव जेसोप

1
हाँ, देखें @ फाल्को की टिप्पणी मैं वास्तव में उसके बाद इसे सही नहीं कर सका!
इवान

4

नहीं । न बनाए गए कार्यों के समान नामों के साथ फ़ंक्शन करें, लेकिन जो वास्तव में विपरीत करता है । यह आपको सहज लग सकता है, लेकिन अन्य डेवलपर्स के लिए बहुत भ्रमित करने वाला है, और भविष्य में कुछ समय के लिए जब आप अधिक अनुभव करते हैं।

का अर्थ max"अधिकतम" है, लेकिन आपकी "सहज" समझ "अधिकतम" की तरह कुछ है। लेकिन इस बस समारोह की एक गलत समझ, और से नाम बदल रहा है maxकरने के लिए maximumअपने अलग व्याख्या संवाद नहीं है। यहां तक ​​कि अगर आप दृढ़ता से मानते हैं कि भाषा डिजाइनरों ने गलती की है, तो ऐसा कुछ न करें।

लेकिन cap(x, limit)जैसा कि सुझाव दिया गया है कि नाम बदलना ठीक होगा, क्योंकि यह स्पष्ट रूप से इरादे का संचार करता है, भले ही यह सिर्फ लपेटता हो min


3

क्या आप भ्रमित हो सकते हैं या तो अपने फ़ंक्शन नाम में कैप का उपयोग कर रहे हैं या कैप रखने का अर्थ है। यह एक सीमक है और इसके लिए किसी भी चीज़ की अधिकतम आवश्यकता नहीं होती है।

यदि आपको सबसे छोटा, सबसे छोटा या जल्द से जल्द पूछा जाता है, तो क्या आपको लगता है कि मैक्स उपयुक्त कार्य है?

न्यूनतम और अधिकतम छोड़ दें। परीक्षण लिखें ताकि कम से कम आपको दूसरी बार सही लगे।

यदि आपको अपनी परियोजना में इन कार्यों का उपयोग करने की आवश्यकता है, तो आप किसी प्रकार के संकेत के साथ आएंगे जो आपको यह स्पष्ट करने में मदद करेगा कि किसका उपयोग करना है। जैसे कि <या>, मुंह का चौड़ा हिस्सा बड़े मूल्य का सामना करता है।


1
एक अंतर्निहित समस्या के रूप में संभव शब्दावली भ्रम के लिए +1। मुझे लगता है कि भ्रम " 255 से अधिकतम के साथ राशि लौटाएं" टिप्पणी पर शुरू होता है , इसलिए वह सोचता है कि maxफ़ंक्शन अधिक उपयुक्त है, लेकिन तर्क-वार minवह चीज है जिसे वह वास्तव में ढूंढ रहा है।
रेवंत

2

अपने प्रश्न का उत्तर देने के लिए: क्या कोई अन्य कारण है जो यह असंगत होगा? एक समूह परियोजना के बारे में क्या? यह समझ में आता है कि आप अपने स्वयं के कार्य चाहते हैं, जो कोई समस्या नहीं है। बस यह सुनिश्चित करें कि वे आपके स्वयं के सहायक वर्ग में हैं और जब तक वे इसे आयात नहीं करते हैं, तब तक वे आसानी से दूसरों के लिए कॉल करने योग्य नहीं होते हैं। (Joes.Utilities।)

लेकिन आपकी समस्या को फिर से देखने के लिए, मूल रूप से मैं इसके बजाय सोच रहा होगा:

return (input >= 255) ? 255 : input;

आप भ्रमित हो रहे हैं क्योंकि आप अपने दिमाग के तर्क को इन न्यूनतम / अधिकतम कार्यों पर लागू करने की कोशिश कर रहे हैं। इसके बजाय सिर्फ अंग्रेजी में बात करें। है अन्यथा ।ifinputgreater than or equal to 255 then return 255returninput

जो है:

if (input >= 255) {
   255 
} else {
   input
}

मेरी राय। आप गलत कारणों के लिए अधिकतम \ min कार्यों के लिए जा रहे हैं, इन चीजों की गति नगण्य है। जो करता है वह समझ में आता है।


1
मेरे एक वरिष्ठ सहकर्मी हमेशा कहा करते थे "चलो कंप्यूटर तुम्हारे लिए सोच रहा है"।

1

जबकि मैं आपकी समस्या को समझता हूं, मैं ऐसा करने में संकोच कर रहा हूं। यह बेहतर होगा कि आप अपनी खोपड़ी में मिनट () और अधिकतम () क्या करें।

अधिकांश प्रोग्रामर जानते हैं कि क्या मिनट () और अधिकतम () फ़ंक्शन करते हैं - भले ही, आप की तरह, वे कभी-कभी अपने अंतर्ज्ञान के साथ संघर्ष करते हैं, जिस पर किसी भी समय उपयोग करने के लिए। अगर मैं एक कार्यक्रम पढ़ रहा हूं और अधिकतम (एक्स, वाई) देख रहा हूं, तो मुझे तुरंत पता है कि यह क्या करता है। यदि आप अपना "उपनाम" फ़ंक्शन बनाते हैं, तो आपके कोड को पढ़ने वाले किसी अन्य व्यक्ति को यह नहीं पता होगा कि यह उपनाम क्या करता है। उन्हें आपका कार्य ढूंढना है। यह अनावश्यक रूप से पढ़ने के प्रवाह को तोड़ देता है और पाठक को आपके कार्यक्रम को समझने के लिए कुछ अतिरिक्त सोचने के लिए मजबूर करता है।

यदि आपको यह पता लगाने में परेशानी हो रही है कि किसी बिंदु पर किसका उपयोग करना है, तो मैं कहूंगा, यह बताते हुए एक टिप्पणी जोड़ें। फिर अगर भविष्य का पाठक इसी तरह से भ्रमित है, तो आपकी टिप्पणी को स्पष्ट करना चाहिए। या यदि आप इसे गलत करते हैं, लेकिन टिप्पणी बताती है कि आप क्या करने की कोशिश कर रहे थे, तो इसे डीबग करने का प्रयास करने वाले व्यक्ति का एक सुराग होगा।

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

दरअसल, वर्षों पहले मैंने एक प्रोग्रामर के साथ काम किया था, जो सी में सभी विराम चिह्नों को पसंद नहीं करता था। इसलिए उसने मैक्रों का एक समूह लिखा, ताकि उसे "{" के बजाय "{" और "END-IF" के बजाय "THEN" लिखा जा सके। और इस तरह के अन्य प्रतिस्थापन के दर्जनों। तो जब आप उनके कार्यक्रमों को पढ़ने की कोशिश करते हैं, तो यह किसी भी सी की तरह नहीं दिखता है, यह पूरी तरह से एक नई भाषा सीखने जैसा था। मुझे अब याद नहीं है कि क्या "और" का "और" या "&&" में अनुवाद किया गया है - और यह बात है। आप भाषा और पुस्तकालय सीखने में लोगों द्वारा किए गए निवेश को कम आंकते हैं।

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


0

फ़ंक्शंस में निर्मित नाम बदलना ठीक है, बशर्ते नए नाम आपके कोड को बहुत स्पष्ट करते हैं और किसी को भी समझने में चूक नहीं होगी। (यदि आप C / C ++ का उपयोग कर रहे हैं, तो #define का उपयोग न करें क्योंकि यह देखना मुश्किल है कि क्या चल रहा है।) एक फ़ंक्शन का नाम एक टिप्पणी की तरह कार्य करना चाहिए जो यह बताता है कि कॉलिंग कोड क्या कर रहा है और क्यों कर रहा है। ।

आप एकमात्र व्यक्ति नहीं हैं जिन्हें यह समस्या न्यूनतम और अधिकतम के साथ हुई है, हालांकि मुझे अभी तक एक अच्छा सामान्य समाधान देखना है जो सभी डोमेन पर काम करता है। मुझे लगता है कि इन कार्यों के नामकरण के साथ एक समस्या यह है कि दोनों तर्कों के अलग-अलग तार्किक अर्थ हैं, लेकिन अर्थ समान हैं।

यदि आपकी भाषा इसे अनुमति देती है तो आप कोशिश कर सकते हैं

return  calculatedDiscount.ButNoMoreThen(maxAllowedDiscount)

return  CDsInStocked.ButNoMoreThen(CasesInStock)

0

नहीं।

आप अपने रैपर न लिखें। उन रैपरों के नाम बहुत महत्वपूर्ण नहीं हैं।

आप जो करने की कोशिश कर रहे हैं वह एक तरह का कोड ऑबफ्यूजन है। आप एक अतिरिक्त परत का आविष्कार कर रहे हैं जो 2 उद्देश्यों को पूरा करती है:

  1. अन्य लोग आपके कोड को नहीं समझ सकते।
  2. आप कभी भी दूसरे लोगों के कोड को समझना नहीं सीखते हैं।

उन चीजों को छिपाकर, जिनके साथ आप सहज नहीं हैं, आप केवल अपने कोड को अभी और भविष्य में खुद को चोट पहुँचा रहे हैं। आप अपने कम्फर्ट जोन में रहकर नहीं बढ़ सकते। आपको क्या सीखने minऔर कैसे maxकाम करने की आवश्यकता है ।


-1

यह ठीक है, और वास्तव में काउंटर और अंडरशूट पर लगाम लगाने के लिए मिन, मैक्स का उपयोग करने के लिए प्रतिगामी नहीं है। यह भी प्रयोग किया जाता है:

  • मंजिल () और छत ()
  • क्लैंप, सीमा, सीमा
  • और निश्चित रूप से उच्च आदेश छंटनी के साथ आधुनिक।

फर्मवेयर में यह एमएमएक्स से आगे की तारीख है, जो खुद आधुनिक 3 डी ग्राफिक्स से पहले है जो इस एक्स्टेंसिवली पर निर्भर करता है।

स्थानीय स्तर पर भी एक उद्योग मानक समारोह की जगह मुझे चिंतित करेगा, एक व्युत्पन्न नाम बेहतर हो सकता है। C ++ छात्र शायद अपने अस्पष्ट वर्ग के लिए अधिक भार उठा सकते हैं।


मुझे क्षमा करें, MMX के साथ क्या है?
टोबिया टेसन

मैं "संतृप्त मूल्यों" के बारे में सोच रहा था, जहां परिणाम एक सीमा पर छाया हुआ है। यदि कोड को सीमा और अतिप्रवाह परीक्षणों (ग्राफिक्स में साइकिल चलाने से बचने के लिए या नकारात्मक की पिछली सीमाओं की यात्रा करके सकारात्मक जा रहा है) को शामिल नहीं करना था, तो यह विचार सरल था। PSUBSB / PSUBSW। मैं मानता हूं कि तंत्र समान नहीं हो सकता है, लेकिन कार्य और प्रभाव का उद्देश्य है।
मैकेंज़्म

-1

यह कुछ मामलों में ठीक है, लेकिन नहीं , अपने उदाहरण में, क्योंकि वहाँ शब्द के लिए यह ज्यादा बेहतर तरीके हैं:
saturate, clamp, clip, आदि


-1

मैं इसके बजाय 'बंधे हुए' नाम का एक सामान्य कार्य बनाना चाहता हूँ

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    if (value < lower_bound)
        return lower_bound;
    if (value > upper_bound)
        return upper_bound;
    return value;
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound){
        if (value > bound)
            return bound;
    }
    else {
        if (value < bound)
            return bound;
    }
    return value;
}

या 'न्यूनतम' और 'अधिकतम' के उपयोग के साथ

//Assumes lower_bound <= upper_bound
template <typename T>
T bounded(T value, T lower_bound, T upper_bound){
    return max(min(value, upper_bound), lower_bound);
}

//Checks an upper (by default) or lower bound
template <typename T>
T bounded(T value, T bound, bool is_upper_bound = true){
    if (is_upper_bound)
        return min(value, bound);
    else
        return max(value, bound);
}

-1

अपने कार्यों को कॉल करने के बारे में क्या:

atmost(x,255): x या 255 का निचला भाग कम से कम लौटाएं।

atleast(10,x): x का उच्च या कम से कम 10 लौटाएं।


-1

min(x+y, MAX_VALUE); की तुलना में बहुत अधिक अर्थ ले जाएगा myCustomFunction(x, y);

तो उत्तर हां है, यह अस्वीकार्य है । यह केवल आपके मस्तिष्क की भाषा के लिए एक उपनाम के रूप में कार्य करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.