क्या पंप भड़काना है? कभी-कभी एक भड़काना रीड कहा जाता है


17

मुझे इस अभिव्यक्ति और पैटर्न को दिन में वापस सिखाया गया था। यकीन है, नाम पुराने पंपों से आता है जिन्हें पानी पंप करने से पहले पानी से भरा होना चाहिए, लेकिन कौन परवाह करता है? हम यहां कोड के बारे में बात कर रहे हैं।

कुछ वास्तव में अच्छे उदाहरण और इस बात का स्पष्टीकरण कि पैटर्न का क्या स्वागत होगा। आज इस पैटर्न को कैसे माना जाता है?

प्राइमिंग को कभी-कभी दोषपूर्ण लूप काम कर सकता है लेकिन DRY की कीमत पर । तो यह एक बेहतर डिजाइन के रास्ते पर एक संक्षिप्त पड़ाव हो सकता है। क्या इसे एक विरोधी पैटर्न माना जाता है? क्या कोई विकल्प हैं?


1
आपको स्टैकओवरफ्लो उत्तर और एक पुस्तक में "पंप को भड़काना" शब्द मिलेगा । शब्द "प्राइमिंग रीड", यहां पाया गया , बहुत समान है।
कैंडिड_ऑरेंज

जवाबों:


23

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

int i = 0; // prime the pump
while (i < 10)
{
    Console.Write("While statement ");
    Console.WriteLine(i);
    i++; // set condition again
}

प्राइमर एक पढ़ा स्टेटमेंट हो सकता है, या जो भी ठीक से प्रारंभिक स्थिति निर्धारित करता है। रीड स्टेटमेंट का उपयोग करके प्रारंभिक स्थिति निर्धारित करना "प्राइमिंग रीड" कहा जाता है।

string line;

using (StreamReader file = new StreamReader("c:\\test.txt"))
{
    line = file.ReadLine(); // Priming read.
    while(line != null)
    {
        Console.WriteLine (line);
        line = file.ReadLine(); // Subsequent reads.   
    }
}

सी # में, दो Readline()कॉलों को सशर्त के भीतर एक ही बयान में जोड़ा जा सकता है:

while ((line = r.ReadLine()) != null)
{
    Console.WriteLine (line);
}

1
अच्छा लगा। ऐसे समय होते हैं जब आपको ए और बी को एक परीक्षण टी क्रम में करने की आवश्यकता होती है। सामान्य A T(B A)प्राइमिंग पैटर्न ऐसा करता है लेकिन इस सामान्य पैटर्न के लिए कोई भी सामान्य विकल्प डुप्लिकेट करता है?
कैंडिड_ऑरेंज

2
मेरे उत्तर में अंतिम बिट कोड देखें।
रॉबर्ट हार्वे

वह एक क्लासिक है। क्या आप कभी ब्रेक का उपयोग करने का सुझाव देंगे?
कैंडिड_ऑरेंज

यदि कोड को सरल करता है तो मैं एक लूप से जल्दी बाहर निकलने का विरोध नहीं कर रहा हूं। कभी-कभी आप बस कर सकते हैं return
रॉबर्ट हार्वे

1
एक उदाहरण पाठ फ़ाइल की प्रत्येक पंक्ति में एक स्ट्रिंग की पहली घटना की तलाश होगी। आपको अभी भी whileलूप की आवश्यकता होगी , लेकिन एक बार जब आप लाइन में स्ट्रिंग को पढ़ते हैं, तो आप breakया तो पढ़ सकते हैं return
रॉबर्ट हार्वे
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.