2013-03-21 13 views
5

यह एक बहुत ही छोटी समस्या है: चार बुलियन फ़ंक्शन हैं: ए(), बी(), सी() और डी()। मैं उन्हें तब तक कॉल करना चाहता हूं जब तक कि पहला true लौटा न जाए। बजाय कर के पारंपरिकशॉर्ट सर्किट ऑपरेशंस के साथ जंजीर आईएफएस को प्रतिस्थापित करना

if(!a()) { 
    if(!b()) { 
     if(!c()) { 
      d(); 
     } 
    } 
} 

या

if(!a() && !b() && !c()) d(); 

मैं एक लघु सर्किट मूल्यांकन के रूप में अभिव्यक्ति लिखने के बारे में सोचा।

(a() || b() || c() || d()); 

लेकिन मैंने कभी भी इस परीक्षण को सी/सी ++ कोड में नहीं देखा है। क्या इस दृष्टिकोण के साथ कोई समस्या है कि मुझे याद आ रही है?

धन्यवाद।

+0

मैं * पांच * बूलियन फ़ंक्शन देख सकता हूं। –

+3

@chris या अर्थ नहीं बदलता है: डी() केवल तब निष्पादित किया जाता है जब अन्य सभी कार्य झूठे होते हैं। – Loghorn

+3

मैं इसके रखरखाव परिप्रेक्ष्य से इसके खिलाफ सलाह दूंगा। यह लोगों के लिए तत्काल स्पष्ट नहीं हो सकता है कि जब वे संक्षिप्त सर्किट संस्करण देखते हैं तो कोड क्या होता है (यदि यह आपके लिए चिंता का विषय है)। तथ्य यह है कि आपको SO पर व्यवहार के बारे में पूछना था, यह संकेत होना चाहिए कि क्या होगा जब अन्य लोग आपका कोड पढ़ेंगे। – Michael

उत्तर

3

आपके द्वारा लिखे गए कोड वैध हैं। d() का मूल्यांकन केवल तभी किया जाएगा जब अन्य बूलियन फ़ंक्शन false लौटाते हैं।

हालांकि शॉर्ट-सर्किट मूल्यांकन कम पठनीय है, और रखरखाव बिंदु दृश्य से त्रुटि उत्पन्न होती है, क्योंकि एक पाठक इसे समझ में नहीं आता है।

+0

यह त्रुटि प्रवण क्यों है? – user666412

+3

आपको यह गलत लगता है। 'd()' का मूल्यांकन किया जाता है यदि कोई अन्य फ़ंक्शन सत्य नहीं हुआ है। जो मुझे लगता है पठनीयता के बारे में आपका मुद्दा बनाता है। –

+0

धन्यवाद बेन। जल्दी में था। – meyumer

2

वे समकक्ष हैं, लेकिन लघु-सर्किट मूल्यांकन समाधान कम पठनीय हो सकता है, खासकर यदि फ़ंक्शन नाम लंबे हैं या मानकों को स्वीकार करते हैं।

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