लघु-सर्किटिंग वह जगह है जहां इसके परिणाम निर्धारित होने पर एक अभिव्यक्ति का मूल्यांकन बंद कर दिया जाता है। उदाहरण के लिए तो:
if (a == b || c == d || e == f) {
// Do something
}
तो a == b
सच क्योंकि अभिव्यक्ति के परिणाम पहले से ही निर्धारित किया गया है c == d
और e == f
सभी में कभी नहीं का मूल्यांकन कर रहे हैं तो,,। यदि a == b
गलत है, तो c == d
का मूल्यांकन किया गया है; यदि यह सत्य है, तो e == f
का मूल्यांकन कभी नहीं किया जाता है। तो
if (foo() || bar() || baz()) {
// Do something
}
foo()
तो रिटर्न सच है, bar
और baz
कहा जाता है कभी नहीं कर रहे हैं, क्योंकि अभिव्यक्ति के परिणाम पहले से ही निर्धारित किया गया है: यह कोई फर्क लग सकता है, लेकिन पर विचार करें। तो यदि bar
या baz
कुछ कुछ लौटने से कुछ अन्य प्रभाव पड़ता है (साइड इफेक्ट), तो ये प्रभाव कभी नहीं होते हैं।
एक शॉर्ट सर्किट के महान उदाहरण संदर्भ वस्तु से संबंधित है:
if (a != null && a.getFoo() != 42) {
// Do something
}
a.getFoo()
सामान्य रूप से फेंक एक NullPointerException
अगर a
थे null
, लेकिन क्योंकि अभिव्यक्ति शॉर्ट सर्किट, अगर a != null
false
, a.getFoo()
हिस्सा है कभी नहीं होता, इसलिए हमें अपवाद नहीं मिलता है।
ध्यान दें कि सभी अभिव्यक्तियां संक्षिप्त-सर्किट नहीं हैं। ||
और &&
ऑपरेटर शॉर्ट सर्किट हैं, लेकिन |
और &
नहीं हैं, न ही *
या /
हैं; वास्तव में ज्यादातर ऑपरेटरों नहीं हैं।
उदा |
स्रोत
2012-02-18 21:44:27
http://en.wikipedia.org/wiki/Short-circuit_evaluation – Matt