2010-01-09 20 views
5

PHP में आप फ़ंक्शन के साथ वैश्विक दायरे में एक फ़ंक्शन घोषित कर सकते हैं।जावा में कोई साधारण "फ़ंक्शन" नहीं है?

जावा में यह संभव नहीं है? ऐसा लगता है कि प्रत्येक कार्य एक वर्ग में एक विधि के रूप में है। तो जावा में सब कुछ ओओपी है? कोई प्रक्रियात्मक कोड नहीं है?

+5

आप प्रति घंटा एक बार औसतन एक सवाल पूछने:

या, विनोदी satirazation का आनंद लें। मुझे लगता है कि कुछ किताबों, या Google की क्षमता में निवेश करना बुद्धिमान होगा ... – Pod

उत्तर

18

"फ्री-फ्लोटिंग" फ़ंक्शन के पास सबसे नज़दीकी चीज एक स्थिर कार्य है, जिसे आप क्लास नाम के साथ योग्यता के रूप में कॉल कर सकते हैं, उदा।

public class Foo { 
    public static void bar(){} 
} 

... कहीं

Foo.bar(); 

आप इस के लिए वाक्यात्मक चीनी का एक सा जोड़ सकते हैं यह आप की सोच रहे हैं क्या की तरह लग रहे बनाने के लिए:

import static Foo.bar; 

... अन्यत्र

bar(); 
+0

आप स्वयं भी फ़ंक्शन आयात कर सकते हैं: 'आयात स्थिर packagename.Foo.bar;' लेकिन यदि आप इसे बहुत अधिक करते हैं भ्रमित हो सकता है। – MatrixFrog

+0

आह, यही मेरा मतलब है, धन्यवाद। –

3

हाँ। लेकिन आप स्थैतिक विधियों को परिभाषित कर सकते हैं, जो अंत में कक्षा के भीतर निहित विधियों के रूप में कार्य कर सकते हैं लेकिन वर्ग के उदाहरण को तत्काल किए बिना बुलाया जा सकता है। यही है, यदि आप कक्षा Foo में barstatic के रूप में एक विधि परिभाषित करते हैं तो इसे Foo.bar() के रूप में बुलाया जा सकता है।

1

हाँ, यह सही है। जावा कड़ाई से ओओपी है।

3

यह सही है, कोई प्रक्रियात्मक कोड नहीं है, सब कुछ एक वर्ग द्वारा परिभाषित वस्तु है (कुछ आदिम डेटा प्रकारों को छोड़कर)। हालांकि, आप स्थिर तरीकों का उपयोग कर सकते हैं:

public class MyClass { 
    public static void callMe() { 
     System.out.println("HEY"); 
    } 
} 

public class MyOtherClass { 
    public void someMethod() { 
     MyClass.callMe(); 
    } 
} 

JVM आधारित भाषा स्काला आप higher-order functions, जो आप मूल्यों के रूप में चारों ओर पारित कर सकते हैं बनाने के लिए अनुमति मिल जाएगी।

+0

कूल, तो स्कैला जीन आपके लिए एनन क्लास कचरा है। मुझे वास्तव में बैठने की आवश्यकता है और * मेरी खूनी स्कैला पुस्तक को पढ़ने के लिए कितना बंद करना है, "करीइंग" और अन्य फ़ंक्शन-इश सामग्री जो इसे रोल करती है। – Roboprog

+0

मुझे पुस्तक मिली और इसके माध्यम से पढ़ा गया, और यह काफी शक्तिशाली है भाषा। हालांकि, मुझे दर्जनों शॉर्टकट ऑपरेटर मिलते हैं जो इन नई सुविधाओं को थोड़ा भ्रमित और याद रखने में कठोर होने का प्रतिनिधित्व करते हैं। रूबी शुरू करना आसान लगता है (जावा के मुकाबले यह बहुत गतिशील और 50x धीमी है, एलओएल)। –

+0

मैं सुनता रहता हूं कि रूबी की तुलना में जावा बड़ा-एन गुना तेज है। यह x + = y प्रकार के गणित-वाई/आदिम सामान के लिए सच हो सकता है, लेकिन यह कुछ बुनियादी स्ट्रिंग jiggering के लिए नहीं मापा गया है: http://roboprogs.com/devel/2009.12.html (बेशक, ये " बेंचमार्क "केवल कुछ स्थिर तरीकों का उपयोग करता है, किसी भी भाषा के जीसी के आसपास घूमने वाले एकमात्र उदाहरण अंतर्निहित तार हैं) – Roboprog

3

ओह हाँ, OO indeed। हालांकि आप एक स्थिर विधि के भीतर छद्म प्रक्रियात्मक सामग्री कोड कर सकते हैं।

3

आप एक विधि स्थिर बनाने के एक एक वस्तु

public class MyClass{ 
    public static void m(){ 
     ... 
    } 
} 


MyClass.m(); 
3

पर क्या बाकी सब कह रहा है, अगर आप इस तरह के कार्यों के लिए बहुत कुछ है विस्तार बनाए बिना यह कॉल कर सकते हैं, यह उन्हें समूह के लिए आम एक साथ कक्षाओं में है जो स्थिर विधियों के अलावा कुछ भी नहीं हैं, जिन्हें अक्सर "उपयोगिता वर्ग" कहा जाता है। दिमाग में आने वाला पहला उदाहरण java.lang.Math है लेकिन कई अन्य हैं। इसके नाम पर "यूटिल" वाला कोई भी वर्ग इस पैटर्न का पालन करने की संभावना है।

-1

ओओपी अच्छी तरह से जैव न करें। आप अभी भी एक सार्वजनिक स्थैतिक विधि को परिभाषित कर सकते हैं और इसे कहीं से भी कॉल कर सकते हैं जैसा कि अन्य ने उल्लेख किया है।

0

जावा दुनिया में, सभी कार्यों को कक्षा के भीतर घोषित किया जाना चाहिए, इससे कोई फर्क नहीं पड़ता। ओओ दुनिया में आपका स्वागत है =)

0

हां, आप स्थैतिक कार्य, एर, विधियां बना सकते हैं, लेकिन फिर आपको उन्हें हार्ड-कोड कॉल करना होगा। रनटाइम पर कॉलबैक का चयन करने के लिए, आपको एक इंटरफ़ेस बनाना होगा (फ़ंक्शन पॉइंटर, प्रक्रियात्मक प्रकार या प्रतिनिधि नहीं), और फिर इसे लागू करने के लिए एक फर्जी क्लास (हालांकि शायद अनाम) बनाएं। मेक-वर्क का आनंद लें! http://steve-yegge.blogspot.com/2006/03/execution-in-kingdom-of-nouns.html

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