2013-05-16 7 views
9

मुझे लगता है कि यह किसी अन्य चीज़ की तुलना में भाषा सिद्धांत के बारे में अधिक प्रश्न है। मुख्य कानूनी में पहला बयान क्यों है, जब दूसरा नहीं है? क्या वे एक ही चीज़ होने का मूल्यांकन नहीं करते?जावा: कोई कथन नहीं

public class Main { 
     public static void main(String[] args) { 
       foo(); 
       0; 
     } 
     public static int foo(){ 
       return 0; 
     } 
} 
+0

क्योंकि यह एक कच्चा आदिम है, बयान नहीं। – greedybuddha

+0

इसे पढ़ें: http://docs.oracle.com/javase/specs/jls/se7/jls7.pdf विवरण बयान के बारे में विशेष रूप से अध्याय। – user643011

उत्तर

14

जावा तथाकथित "अभिव्यक्ति कथन" में अभिव्यक्ति के प्रकारों को प्रतिबंधित करता है। संभावित दुष्प्रभावों वाले केवल सार्थक अभिव्यक्तियों की अनुमति है। यह 0; या a + b; जैसे अर्थपूर्ण अर्थहीन बयान को अस्वीकार करता है। उन्हें भाषा व्याकरण से बाहर रखा गया है।

foo() जैसे फ़ंक्शन कॉल, और आमतौर पर, दुष्प्रभाव हो सकते हैं, इसलिए यह एक अर्थहीन कथन नहीं है। यह देखने के लिए कि यह वास्तव में कुछ भी करता है, संकलक foo() के शरीर का गहराई से निरीक्षण नहीं करता है। एक फ़ंक्शन को कॉल करना साइड इफेक्ट्स कर सकता है, इसलिए यह वाक्य रचनात्मक रूप से मान्य है।

यह सी/सी ++ और जावा के बीच दार्शनिक अंतर को दर्शाता है। जावा विभिन्न संरचनाओं को प्रतिबंधित करता है जिसके परिणामस्वरूप मृत या अर्थहीन कोड होता है।

return; 
foo(); // unreachable statement 

सी और सी ++ इसके बारे में अपेक्षाकृत लाईसेज़ फ़ेयर हैं। जो भी आप चाहते हैं लिखें; उनके पास बेबीसिट करने का समय नहीं है।


Java Language Specification, §14.8 Expression Statements से हवाला देते हुए:

भाव के कुछ प्रकार अर्धविराम से निम्नलिखित उनके द्वारा बयान के रूप में इस्तेमाल किया जा सकता है।

ExpressionStatement: 
    StatementExpression ; 

StatementExpression: 
    Assignment 
    PreIncrementExpression 
    PreDecrementExpression 
    PostIncrementExpression 
    PostDecrementExpression 
    MethodInvocation 
    ClassInstanceCreationExpression 

कोई व्यंजक बयान अभिव्यक्ति मूल्यांकन द्वारा निष्पादित किया जाता है; यदि अभिव्यक्ति का मान है, तो मान को त्याग दिया जाता है।

अभिव्यक्ति कथन का निष्पादन सामान्य रूप से पूर्ण होता है अगर अभिव्यक्ति का मूल्यांकन सामान्य रूप से पूरा हो जाता है और केवल ।

C और C++ के विपरीत, जावा प्रोग्रामिंग भाषा केवल कुछ अभिव्यक्ति की रूपों अभिव्यक्ति बयान के रूप में इस्तेमाल किया जा करने की अनुमति देता। ध्यान दें कि जावा प्रोग्रामिंग भाषा एक "डाली शून्य करने के लिए" की अनुमति नहीं है - तो जैसे एक अभिव्यक्ति बयान लिखने की पारंपरिक सी चाल - शून्य कोई प्रकार नहीं है:

(void)... ; // incorrect! 

काम नहीं करता। दूसरी तरफ, जावा प्रोग्रामिंग भाषा अभिव्यक्ति बयान, में सभी सबसे उपयोगी प्रकार के अभिव्यक्तियों की अनुमति देती है और इसे एक विधि विधि का आह्वान करने के लिए कथन के रूप में उपयोग की जाने वाली विधि आमंत्रण की आवश्यकता नहीं होती है, इसलिए ऐसी चाल लगभग कभी नहीं होती है आवश्यक है। यदि एक चाल की आवश्यकता है, या तो एक असाइनमेंट स्टेटमेंट (§15.26) या स्थानीय परिवर्तनीय घोषणा कथन (§14.4) का उपयोग इसके बजाय किया जा सकता है।

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