इस प्रोग्रामिंग तकनीक को क्या कहा जाता है?


13

मैं एक साक्षात्कार में जोड़ी प्रोग्रामिंग करते समय इस प्रोग्रामिंग तकनीक के पार आया और इसे Google पर इसका नाम नहीं मिला।

विचार यह है कि आप पहले अभिव्यक्ति लिखते हैं जो चर का उपयोग करता है और फिर आप उस कोड को लिखते हैं जो बाद में चर की गणना करता है।

यहाँ कुछ उदाहरण कोड का उपयोग करने के लिए:

private bool ValidPolicyNumber(string policyNumber) 
{
    var hasExpectedPrefix = policyNumber.Substring(0,5) == "POLIC";
    var followedBy7Digits = Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
    var hasLengthOf12 = policyNumber.Length == 12;

    return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;
}

जब मैंने उल्लेख की गई तकनीक का उपयोग करते हुए इस फ़ंक्शन को लिखा है, तो आप पहले अंतिम पंक्ति return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;लिखेंगे और फिर 3 पंक्तियों को लिखेंगे जो इसके पहले थे।

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


8
मेरा मानना ​​है कि यह सिर्फ टॉप-डाउन डिज़ाइन का एक रूप है ।
विंसेंट सवार्ड

1
मैं इसके लिए एक विशिष्ट नाम नहीं जानता, लेकिन मैंने इसे अक्सर देखा है जब परिस्थितियों के एक जटिल सेट को जांचने की आवश्यकता होती है। यह तकनीक जटिल परिस्थितियों को पढ़ने और समझने में बहुत आसान बनाती है।
FrustratedWithFormsDesigner

मैंने यह किया है। आप पहली बार में विवरण को पसीना किए बिना किसी विचार को स्केच करने के लिए कोड का उपयोग करते हैं। बाद में आईडीई शिकायत करता है कि कुछ मौजूद नहीं है इसलिए आप इसे बनाते हैं। जब आपके पास एक परीक्षण होता है तो यह तब तक मदद करता है जब तक कि आप खत्म करने के लिए चारों ओर नहीं पहुंच जाते।
कैंडिड_ऑरेंज

यदि यह एक इकाई परीक्षण से पहले था तो यह टेस्ट ड्रिवेन डेवलपमेंट होगा। टीडीडी का उपयोग करते समय मैं अपना अपेक्षित परिणाम जानता हूं और मैं उस अपेक्षित व्यवहार से पिछड़ जाता हूं।
मार्टिन स्पमर

मैं इसे "जटिल परिस्थितियों को लिखना" कहूंगा।
जिमी ब्रेक-मैके

जवाबों:


13

यह कार्यात्मक रचना पर सिर्फ एक भिन्नता है

गवाह:

private bool ValidPolicyNumber(string policyNumber) 
{
    return hasExpectedPrefix(policyNumber) 
        && followedBy7Digits(policyNumber) 
        && hasLengthOf12(policyNumber);
}

private bool hasExpectedPrefix(string policyNumber)
{
    return policyNumber.Substring(0,5) == "POLIC";
}

private bool followedBy7Digits
{
    return Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$");
}

private bool hasLengthOf12
{
    return policyNumber.Length == 12;
}

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


9

यह केवल क्लीन कोड (पुस्तक) से एक सुझाव हो सकता है, जिसका उपयोग तब किया जा सकता है जब कार्यात्मक विघटन (जैसा कि रॉबर्ट द्वारा समझाया गया है) उन कार्यों के कारण लागू नहीं होता है जिसके परिणामस्वरूप अपने आप पर पुन: प्रयोज्य नहीं किया जाता है।

हालाँकि, यदि आप इसके बारे में तकनीकी जानकारी प्राप्त करना चाहते हैं, तो केंट बेक द्वारा पुस्तक कार्यान्वयन पैटर्न , इस तकनीक को एक्सप्लेनिंग लोकल वेरिएबल्स (जोर मेरा) के रूप में नाम देता है:

स्थानीय चर

स्थानीय चर केवल घोषणा के बिंदु से उनके दायरे के अंत तक पहुंच योग्य हैं। इस सिद्धांत का पालन करते हुए कि जानकारी यथासंभव कम फैलनी चाहिए, स्थानीय चर का उपयोग करने से पहले और अंतरतम संभावित दायरे में घोषित करें।

स्थानीय चरों के लिए कुछ सामान्य भूमिकाएँ हैं:

  • कलेक्टर: एक चर जो बाद में उपयोग के लिए जानकारी एकत्र करता है। अक्सर कलेक्टरों की सामग्री को एक फ़ंक्शन के मूल्य के रूप में वापस किया जाता है। जब कोई कलेक्टर लौटाया जाएगा, तो उसे परिणाम या परिणाम नाम दें।

  • गणना: एक विशेष कलेक्टर जो कुछ अन्य वस्तुओं की गिनती एकत्र करता है।

  • समझाते हुए: यदि आपके पास एक जटिल अभिव्यक्ति है, तो स्थानीय चर के लिए अभिव्यक्ति के बिट्स असाइन करना पाठकों को जटिलता को नेविगेट करने में मदद कर सकता है:

    int top = ...;

    int left = ...;

    int height = ...;

    int बॉटम = ...;

    नया आयत लौटाएँ (ऊपर, बाएँ, ऊँचाई, चौड़ाई);

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

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