2010-02-04 15 views
53

C में देखते हुए निम्नलिखित समारोह कॉल:जावा में पैरामीटर गारंटी की निष्पादन का आदेश?

fooFunc(barFunc(), bazFunc()); 

barFunc और BazFunc के निष्पादन के आदेश निर्दिष्ट नहीं है, तो barFunc()C में bazFunc() या bazFunc() से पहले कहा जा सकता है barFunc() से पहले।

क्या Java फ़ंक्शन तर्क अभिव्यक्तियों के निष्पादन का आदेश निर्दिष्ट करता है या C जैसा कि निर्दिष्ट नहीं है?

+0

संबंधित प्रश्न: [जावा में एक उदाहरण और तर्क का वर्णन करने वाले तरीकों के निष्पादन का आदेश?] (Http://stackoverflow.com/questions/13724952/order-of-execution-of-methods-describing-an -इंस्टेंस-एंड-ए-तर्क-इन-जावा/13725048) – bacar

उत्तर

59
Java Language Specification (पर भाव) से

:

15.7.4 तर्क सूचियाँ मूल्यांकन किया जाता है वाम से दाएं

एक विधि या निर्माता मंगलाचरण या वर्ग उदाहरण निर्माण अभिव्यक्ति में, तर्क भाव को कोमा द्वारा अलग किए गए कोष्ठक के भीतर दिखाई दे सकता है। प्रत्येक तर्क अभिव्यक्ति प्रतीत होता है कि किसी भी तर्क के अभिव्यक्ति के किसी भी हिस्से से पहले इसका मूल्यांकन किया गया है।

+8

हालांकि यह सच है, कृपया इस तरह से कोड न करें जो इसे निष्पादन आदेश पर निर्भर करता है। यह कार्यक्षमता जोड़ने के बिना जटिलता जोड़ रहा है। – Jon

+7

दरअसल, "यह अनुशंसा की जाती है कि कोड इस विनिर्देश पर महत्वपूर्ण रूप से भरोसा न करें।" http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.7 – trashgod

+30

@ जोन मैं असहमत हूं! यदि यह विनिर्देशन में है, तो आप इस पर भरोसा कर सकते हैं। उदाहरण के लिए, किसी फ़ाइल से आयताकार पढ़ने के लिए, मैं इस कोड का उपयोग करता हूं: myRect = new आयताकार (scan.nextInt(), scan.nextInt(), scan.nextInt(), scan.nextInt()); यह संक्षिप्त और सरल है। एक लंबा कार्यान्वयन अनावश्यक जटिलता होगी। –

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