हम सिर्फ पाया एक सहयोगी और मैं, हैं सशर्त वाक्य रचना के साथ एक अजीब संकलन वाक्य रचना:अस्पष्ट सशर्त जावा सिंटेक्स
if (true); {
foo();
}
यहाँ यह अजीब वाक्य रचना हमें समझा के लिए किसी वहाँ है? धन्यवाद।
हम सिर्फ पाया एक सहयोगी और मैं, हैं सशर्त वाक्य रचना के साथ एक अजीब संकलन वाक्य रचना:अस्पष्ट सशर्त जावा सिंटेक्स
if (true); {
foo();
}
यहाँ यह अजीब वाक्य रचना हमें समझा के लिए किसी वहाँ है? धन्यवाद।
पहला भाग, if (true);
केवल कुछ ऐसा नहीं है जो ;
पर समाप्त होता है। बाकी एक नए स्कोप ब्लॉक के अंदर foo()
पर कॉल है। आपको यह पता होना चाहिए कि foo()
हमेशा कहा जाता है।
मेरे लिए, यह एक खाली निकाय के साथ एक कथन जैसा दिखता है, उसके बाद एक कोड ब्लॉक जो हमेशा निष्पादित करता है (और यदि कथन से संबंधित नहीं है)। उदाहरण के लिए, foo भी यहाँ पर अमल करता है:
if (false); {
foo();
}
मुझे लगता है कि जब से अगर statemnt अर्धविराम और foo बयान सिर्फ एक ब्लॉक में रखा गया के बाद समाप्त हो गया है इस
if (true) {};
foo();
करने के समान है ({ }) ...
हो सकता है कि एक अगर एक पुराने डिबगिंग से बने हुए हैं, या कोई एक शर्त है बाद में लिखने के लिए योजना बना रहा था, लेकिन किया था यह कभी नहीं ...
मैं आपको लगता है अगर कथन में सुरक्षित रूप से इसे हटाया जा सकता है, तो ऐसा करने में बिल्कुल कोई बात नहीं है।
यह मृत कोड है। अगर ब्लॉक बेकार है।
if(doesn't matter whats here) {}
foo();
कोई फर्क नहीं पड़ता कि यहाँ क्या है? क्या होगा अगर यह अपवाद फेंकता है? जैसे 'अगर (Long.parseLong (" मैं एक लंबा नहीं हूँ ")> 1) {} foo();' :-) –
यह कोई वास्तविक समझ में आता है लेकिन वाक्य रचना सही है के बराबर। इसे
if (true)
{
// do nothing
}
{
foo();
}
{} के आसपास foo() के साथ भी लिखा जा सकता है; इस मामले में कुछ भी नहीं है। यदि चर परिभाषित किए गए थे तो यह {} के भीतर परिभाषित चर के दायरे को सीमित कर देगा।
{
int i=0;
System.out.println(i);
}
{
String i="hello";
System.out.println(i);
}
बस ठीक काम करता है।
जैसा कि अन्य ने इंगित किया है, सिंटैक्टिक रूप से यह रिक्त निष्पादन कथन (यानी कुछ नहीं करता) के साथ एक सशर्त है जिसके बाद स्कोपिंग ब्रैकेट्स में संलग्न foo() को कॉल किया जाता है। foo() हमेशा निष्पादित किया जाता है।अभ्यास में, यदि आप एक असली मामले में यह पाया जाता है और नहीं एक प्रोग्रामिंग परीक्षण मैं निम्न में से एक पर शक:
अगर (we_are_at_war); {launch_all_nukes(); }: डी – Augusto