2015-11-05 7 views
5

क्या यह जावा 7 और जावा 8 में एक दूसरे के रूप में "फ़ंक्शन" बनाम "विधि" शब्द का उपयोग करने के लिए भ्रम पैदा करेगा?जावा 7 और जावा 8 में "विधि" के बजाय शब्द "फ़ंक्शन" का उपयोग करने के लिए वैचारिक गलती है?

मुझे पता है कि जावा 8 ने लैम्ब्डा कैलकुस जैसी कुछ अवधारणा पेश की है, जो कार्यात्मक प्रतिमान के छोटे बिट्स को इस्तेमाल करने की अनुमति देता है।

लैम्ब्डा कैलकुस, कार्यात्मक प्रोग्रामिंग के रूप में कार्य।

+0

मैंने सोचा कि यह केवल सी/सी ++ में "फ़ंक्शन" और जावा में "विधि" का उपयोग करने के लिए शब्दावली सम्मेलन का मामला था। –

+1

मुझे लगता है [यह सवाल] (http://stackoverflow.com/q/155609/1743880) वास्तव में उसमें शामिल है: भले ही इसमें स्पष्ट रूप से जावा 8 'फ़ंक्शन का उल्लेख न हो, फिर भी वे उत्तर के अर्थ में कार्य कर रहे हैं। – Tunaki

+0

एक और नोट पर, वस्तुओं को कक्षाएं और इसके विपरीत कहा जाना चाहिए, क्योंकि 'ऑब्जेक्ट' एक वर्ग है और 'class.class' एक वस्तु है? – Kayaman

उत्तर

2

आप शायद गैर औपचारिक बात दौरान समारोह और विधि अंतर्विनिमय के साथ भाग मिल सकता है, लेकिन यदि आप सटीक होना चाहते हैं तो ध्यान रखें कि: नहीं

  • विधि हमेशा किसी वस्तु या वर्ग के साथ जुड़ा हुआ है, समारोह है (हालांकि जावा में आप वर्ग या ऑब्जेक्ट के बाहर फ़ंक्शंस को परिभाषित नहीं कर सकते हैं),
  • फ़ंक्शन हमेशा एक मान वापस करना चाहिए, विधि कुछ भी वापस नहीं कर सकती है (void रिटर्न प्रकार वास्तविक मान नहीं है)।

सामान्य में - अब आप जानते हैं कि फ़ंक्शन और विधि के बीच कोई अंतर है, इसलिए इसे ध्यान में रखें और अब से उचित अवधि का उपयोग करें।

1

कार्य जावा संस्करण के बावजूद विधियों से अलग हैं। हालांकि जावा 8 के साथ ये शब्द अब और अधिक सार्थक हैं। जावा के पुराने संस्करणों के साथ, आप कार्य को स्थिर तरीकों के रूप में देख सकते हैं क्योंकि ये कक्षा डेटा से बंधे नहीं हैं।

3

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

तो यह कहना ठीक है:

Stream.map विधि एक पैरामीटर के रूप में एक समारोह स्वीकार करता है। आपूर्तिकर्ता, संचायक, combiner और फिनिशर:

या

एक Collector इंटरफ़ेस चार कार्य समेकित करता है।

या

मैं Stream.filter विधि के लिए Objects::nonNull समारोह गुजरती हैं।

लेकिन निम्नलिखित भ्रामक ध्वनि होगा:

जब मैं Math.sqrt फ़ंक्शन का उपयोग मैं एक अजीब अपवाद मिलता है।

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