2013-06-10 10 views
15

में कोई अंतर है, मैं बग और पढ़ने कोड को ठीक करके एडी सीख रहा हूं। मैंने कुछ देखा है अगर बयान जो "और" और दूसरों के साथ "और फिर" के साथ गिरफ्तार हैं। इसी प्रकार, "या" और अन्य जगहें हैं "या अन्य"। एक सहकर्मी का कहना है कि यह सिर्फ वाक्य रचनात्मक चीनी है और इससे कोई फर्क नहीं पड़ता। मुझे आश्चर्य है कि क्या वह सही है?क्या "और" बनाम "और फिर" IF कथन

+0

+1 पूछने के लिए :-) –

+0

संक्षिप्त उत्तर - हाँ। – NWS

+3

एनडब्ल्यूएस - एक छोटा (और सही) उत्तर नहीं है! –

उत्तर

19

एडीए and then और or else में तथाकथित कर रहे हैं 'शॉर्ट सर्किट' के रूपों, तदनुसार, and और or ऑपरेटरों:

शॉर्टकट ऑपरेटरों [and then, or else] के कुछ हिस्सों का मूल्यांकन करने के लिए उपयोग किया जाता है बूलियन अभिव्यक्ति सशर्त। मूल्यांकन को तेज करने के लिए इसे कभी भी नहीं किया जाना चाहिए (आधुनिक अनुकूलन कंपाइलर्स के साथ, यह संभवतः उस प्रभाव का नहीं होगा)। सही उपयोग अपवाद बढ़ाने के लिए ज्ञात अभिव्यक्तियों का मूल्यांकन रोकने के लिए है।

उदाहरण (ऊपर स्पष्टीकरण के रूप में लिया, wikibooks/Ada से):

if Dog /= null and then G (Dog) then 
    Walk (Dog); 
end if; 

यहाँ जी (कुत्ता) मूल्यांकन किया जाएगा केवल अगर कुत्ता अशक्त नहीं है। and then के बिना वैसे भी मूल्यांकन किया जाएगा, अगर कुत्ता वास्तव में शून्य है तो अपवाद उठाएं।

ध्यान दें कि and then और or else सख्ती से बोल रहे हैं, ऑपरेटरों नहीं, क्योंकि उन्हें ओवरलोड नहीं किया जा सकता है।

मैं इस wikibook को पढ़ने का सुझाव दूंगा, यह आपको एडा के माध्यम से आपकी यात्रा में बहुत मदद करेगा।)

+0

+1 - सबसे उपयोगी संसाधन – erict

2

मान लीजिए कि FuncB एक समारोह है जो बूलियन लौटा रहा है जिसका दुष्प्रभाव है।

if False and FuncB then 
    null; 
end if; 

में FuncB के पक्ष प्रभाव होता है, जबकि शॉर्ट सर्किट प्रपत्र

if False and then FuncB then 
    null; 
end if; 

FuncB के पक्ष प्रभाव नहीं होती है साथ।

2

and then निर्माण एक विशेषता है कि कुछ प्रोग्रामिंग भाषाओं को शॉर्ट सर्किट कहा जाता है।

आप परीक्षण और इन कोड के टुकड़े कोशिश कर रहा द्वारा इस कार्यक्षमता समझ सकते हैं:

x:=0; 
if false and 1/x=1 then 
    null; 
end if; 

यह एक शून्य अपवाद द्वारा विभाजन का परिणाम देगा।

x:=0; 
if false and then 1/x=0 then 
    null; 
end if; 

यह कोई अपवाद नहीं उठाएगा, क्योंकि यह दूसरी स्थिति की जांच नहीं करता है।

+0

'झूठा और [तब] 1/x' आपको संकलन-समय त्रुटि संदेश देगा, क्योंकि' 1/x' प्रकार के नहीं है 'बूलियन '। –

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