function एक विधि और एक समारोह के बीच अंतर




oop methods (24)

मेरी समझ से एक विधि कोई भी ऑपरेशन है जिसे कक्षा में किया जा सकता है। यह एक सामान्य शब्द प्रोग्रामिंग में प्रयोग किया जाता है।

कई भाषाओं में विधियों का प्रतिनिधित्व कार्यों और subroutines द्वारा किया जाता है। मुख्य भेद जो कि अधिकांश भाषाओं का उपयोग इनके लिए किया जाता है, यह है कि फ़ंक्शंस कॉलर को वापस मूल्य वापस कर सकता है और एक सबराउटिन नहीं हो सकता है। हालांकि कई आधुनिक भाषाओं में केवल कार्य होते हैं, लेकिन ये वैकल्पिक रूप से किसी भी मूल्य को वापस नहीं कर सकते हैं।

उदाहरण के लिए, मान लीजिए कि आप एक बिल्ली का वर्णन करना चाहते हैं और आप चाहते हैं कि वह चिल्ला सके। आप एक यॉट विधि के साथ एक बिल्ली वर्ग बनायेंगे, जो किसी भी वापसी मूल्य के बिना एक समारोह होगा।

क्या कोई ओओपी संदर्भ में विधियों बनाम कार्यों का एक सरल स्पष्टीकरण प्रदान कर सकता है?


फ़ंक्शन या विधि कोड का नामित कॉल करने योग्य टुकड़ा है जो कुछ संचालन करता है और वैकल्पिक रूप से एक मान देता है।

सी भाषा में शब्द समारोह का उपयोग किया जाता है। जावा और सी # लोग इसे एक विधि कहेंगे (और इस मामले में एक कार्य कक्षा / वस्तु के भीतर परिभाषित किया गया है)।

एक सी ++ प्रोग्रामर इसे एक फ़ंक्शन या कभी-कभी विधि कह सकता है (यदि वे प्रक्रियात्मक शैली सी ++ कोड लिख रहे हैं या सी ++ के ऑब्जेक्ट उन्मुख तरीके से काम कर रहे हैं, तो एक सी / सी ++ केवल प्रोग्रामर ही इसे एक फ़ंक्शन कहलाएगा क्योंकि शब्द 'विधि' है सी / सी ++ साहित्य में अक्सर प्रयोग किया जाता है)।

आप बस इसके नाम को कॉल करके फ़ंक्शन का उपयोग करते हैं,

result = mySum(num1, num2);


आप अपनी ऑब्जेक्ट को पहले संदर्भित करके एक विधि कॉल करेंगे,

result = MyCalc.mySum(num1,num2);

तरीके और कार्यों के बीच अंतर

माइक्रोसॉफ्ट पर इस दस्तावेज़ को पढ़ने से

जिन सदस्यों में निष्पादन योग्य कोड होता है उन्हें सामूहिक रूप से कक्षा के कार्य सदस्यों के रूप में जाना जाता है। पिछले अनुभाग में विधियों का वर्णन किया गया है, जो प्राथमिक प्रकार के कार्य सदस्य हैं। यह खंड सी #: कन्स्ट्रक्टर, गुण, इंडेक्सर्स, इवेंट्स, ऑपरेटरों और फाइनलाइजर्स द्वारा समर्थित अन्य प्रकार के फ़ंक्शन सदस्यों का वर्णन करता है।

तो विधियों के कार्यों का सबसेट है। प्रत्येक विधि एक फ़ंक्शन है लेकिन प्रत्येक फ़ंक्शन एक विधि नहीं है, उदाहरण के लिए, एक constructor को विधि के रूप में नहीं कहा जा सकता है लेकिन यह एक फ़ंक्शन है।


जावास्क्रिप्ट उदाहरणों का उपयोग कर विधि बनाम फ़ंक्शन के लिए कुछ स्पष्टीकरण यहां दिया गया है:

test(20, 50); फ़ंक्शन परिभाषित करता है और कुछ चरणों को चलाने के लिए उपयोग करता है या कुछ वापस लौटाता है जिसे कहीं भी संग्रहीत / उपयोग किया जा सकता है।

आप कोड का पुन: उपयोग कर सकते हैं: कोड को एक बार परिभाषित करें और इसे कई बार उपयोग करें।

अलग-अलग परिणामों का उत्पादन करने के लिए आप अलग-अलग तर्कों के साथ कई बार एक ही कोड का उपयोग कर सकते हैं।

var x = myFunction(4, 3);   // Function is called, return value will end up in x

function myFunction(a, b) {
    return a * b;          // Function returns the product of a and b
}

var test = something.test(); यहां परीक्षण () कुछ ऑब्जेक्ट या कस्टम का एक तरीका हो सकता है जो इनबिल्ट ऑब्जेक्ट्स के प्रोटोटाइप को परिभाषित करता है, यहां अधिक स्पष्टीकरण है:

जावास्क्रिप्ट विधियां वे क्रियाएं होती हैं जिन्हें ऑब्जेक्ट्स पर किया जा सकता है।

एक जावास्क्रिप्ट विधि एक प्रॉपर्टी है जिसमें फ़ंक्शन परिभाषा होती है।

जावास्क्रिप्ट में तारों के लिए निर्मित संपत्ति / विधि:

var message = "Hello world!";
var x = message.toUpperCase();
//Output: HELLO WORLD!

कस्टम उदाहरण:

function person(firstName, lastName, age, eyeColor) {
    this.firstName = firstName;  
    this.lastName = lastName;
    this.age = age;
    this.eyeColor = eyeColor;
    this.changeName = function (name) {
        this.lastName = name;
    };
}

something.changeName("SomeName"); //This will change 'something' objject's name to 'SomeName'

उदाहरण के लिए आप स्ट्रिंग, ऐरे इत्यादि के गुणों को परिभाषित कर सकते हैं

String.prototype.distance = function (char) {
    var index = this.indexOf(char);

    if (index === -1) {
        console.log(char + " does not appear in " + this);
    } else {
        console.log(char + " is " + (this.length - index) + " characters from the end of the string!");
    }
};

var something = "ThisIsSomeString"

// now use distance like this, run and check console log

something.distance("m");

कुछ संदर्भ: जावास्क्रिप्ट ऑब्जेक्ट विधि , Functions , प्रोटोटाइप पर अधिक जानकारी


ओओ दुनिया में, दोनों का उपयोग आमतौर पर एक ही चीज़ के लिए किया जाता है।

एक शुद्ध गणित और सीएस परिप्रेक्ष्य से, एक ही तर्क हमेशा उसी परिणाम को वापस कर देगा जब एक ही तर्क (एफ (एक्स, वाई) = (एक्स + वाई) के साथ बुलाया जाता है)। दूसरी ओर एक विधि, आमतौर पर एक वर्ग के उदाहरण के साथ जुड़ा हुआ है। फिर भी, अधिकांश आधुनिक ओओ भाषाएं अब अधिकांश भाग के लिए "फ़ंक्शन" शब्द का उपयोग नहीं करती हैं। कई स्थैतिक विधियां फ़ंक्शंस की तरह हो सकती हैं, क्योंकि उनके पास आमतौर पर कोई स्थिति नहीं होती है (हमेशा सत्य नहीं)।


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

एक विधि एक ऐसा कार्य होता है जो किसी ऑब्जेक्ट के स्वामित्व में होता है (कुछ ऑब्जेक्ट उन्मुख सिस्टम में, यह कहना सही होता है कि यह एक वर्ग के स्वामित्व में है)। ऑब्जेक्ट / क्लास द्वारा "स्वामित्व" होने का अर्थ है कि आप ऑब्जेक्ट / क्लास के माध्यम से विधि का संदर्भ लेते हैं; उदाहरण के लिए, जावा में यदि आप किसी ऑब्जेक्ट "दरवाजे" के स्वामित्व वाली "खुली ()" विधि को "दरवाजा" लिखना चाहते हैं तो आपको "door.open ()" लिखना होगा।

आम तौर पर विधियों को ऑब्जेक्ट / कक्षा के भीतर अपने व्यवहार का वर्णन करने वाले कुछ अतिरिक्त गुण भी प्राप्त होते हैं, उदाहरण के लिए: दृश्यता (ऑब्जेक्ट उन्मुख अवधारणा से संबंधित) जो परिभाषित करता है कि किस ऑब्जेक्ट (या कक्षाओं) विधि को बुलाया जा सकता है।

कई ऑब्जेक्ट उन्मुख भाषाओं में, सभी "फ़ंक्शन" कुछ ऑब्जेक्ट (या कक्षा) से संबंधित होते हैं और इसलिए इन भाषाओं में ऐसे कोई फ़ंक्शन नहीं हैं जो विधियां नहीं हैं।


फ़ंक्शन तर्क का एक सेट है जिसका उपयोग डेटा में हेरफेर करने के लिए किया जा सकता है। हालांकि, विधि फ़ंक्शन है जिसका उपयोग उस ऑब्जेक्ट के डेटा में हेरफेर करने के लिए किया जाता है जहां यह संबंधित है। तो तकनीकी रूप से, यदि आपके पास ऐसा कार्य है जो पूरी तरह से आपकी कक्षा से संबंधित नहीं है लेकिन कक्षा में घोषित किया गया था, तो यह कोई विधि नहीं है; इसे एक खराब डिजाइन कहा जाता है।


सामान्य रूप से: विधियां एक वर्ग से संबंधित कार्य हैं, फ़ंक्शन कोड के किसी भी अन्य दायरे पर हो सकते हैं ताकि आप यह कह सकें कि सभी विधियां कार्य हैं, लेकिन सभी कार्य विधियां नहीं हैं:

निम्नलिखित पायथन उदाहरण लें:

class Door:
  def open(self):
    print 'hello stranger'

def knock_door:
  a_door = Door()
  Door.open(a_door)

knock_door()

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

जैसा कि आप देख सकते हैं कि आप कहीं भी एक फ़ंक्शन को कॉल कर सकते हैं, लेकिन यदि आप किसी विधि को कॉल करना चाहते हैं तो आपको उसी प्रकार की एक नई ऑब्जेक्ट पास करनी होगी, जिस तरह से विधि घोषित की जाती है (क्लास.एम विधि (ऑब्जेक्ट)) या आपको इनकार करना होगा वस्तु के अंदर विधि (object.Method ()), कम से कम पायथन में।

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


चलो जटिल नहीं है कि एक बहुत ही सरल जवाब होना चाहिए। तरीके और कार्य एक ही बात है। जब आप कक्षा के बाहर होते हैं तो आप फ़ंक्शन को फ़ंक्शन कहते हैं, और जब आप किसी कक्षा के अंदर लिखे जाते हैं तो आप एक फ़ंक्शन को एक विधि कहते हैं।


ऐतिहासिक रूप से, "विधि" के साथ एक सूक्ष्म अंतर हो सकता है जो कुछ ऐसा नहीं करता है जो एक मूल्य वापस नहीं करता है, और एक "कार्य" जो करता है। प्रत्येक भाषा का विशेष अर्थ के साथ शब्दों का अपना लेक्सिकॉन होता है।

"सी" में , "फ़ंक्शन" शब्द का अर्थ प्रोग्राम प्रोग्राम होता है

जावा में , "फ़ंक्शन" शब्द का कोई विशेष अर्थ नहीं है। जबकि "विधि" का मतलब उन दिनों में से एक है जो कक्षा के कार्यान्वयन को बनाते हैं।

सी # में जो अनुवाद करेगा:

public void DoSomething() {} // method
public int DoSomethingAndReturnMeANumber(){} // function

लेकिन वास्तव में, मैं फिर से उत्साहित करता हूं कि 2 अवधारणाओं में वास्तव में कोई अंतर नहीं है। यदि आप जावा के बारे में अनौपचारिक चर्चाओं में "फ़ंक्शन" शब्द का उपयोग करते हैं, तो लोग आपको "विधि" का अर्थ मानेंगे और आगे बढ़ेंगे। जावा के बारे में उचित दस्तावेज़ों या प्रस्तुतियों में इसका उपयोग न करें, या आप मूर्खतापूर्ण दिखेंगे।


मेरे लिए: एक विधि और एक समारोह का कार्य वही है यदि मैं सहमत हूं कि:

  • एक फ़ंक्शन एक मान वापस कर सकता है
  • पैरामीटर की उम्मीद कर सकते हैं

कोड के किसी भी हिस्से की तरह ही आपके पास ऑब्जेक्ट हो सकते हैं और आपके पास एक ऑब्जेक्ट हो सकता है जो परिणामस्वरूप आता है। ऐसा करने के दौरान वे किसी ऑब्जेक्ट की स्थिति बदल सकते हैं लेकिन इससे मेरे लिए बुनियादी कार्य नहीं बदलेगा।

ऑब्जेक्ट्स या अन्य कोड के कॉलिंग फ़ंक्शंस में एक परिभाषा अलग हो सकती है। लेकिन क्या यह मौखिक मतभेदों के लिए कुछ नहीं है और यही कारण है कि लोग उन्हें बदल देते हैं? गणना के उदाहरण का उल्लेख मैं सावधान रहूंगा। क्योंकि मैं अपनी गणना करने के लिए नियोक्ता किराए पर लेता हूं:

new Employer().calculateSum( 8, 8 );

ऐसा करने से मैं नियोक्ता के लिए गणना करने के लिए ज़िम्मेदार होने पर भरोसा कर सकता हूं। यदि वह अधिक पैसा चाहता है तो मैं उसे मुक्त करता हूं और अप्रयुक्त कर्मचारियों को निपटाने के लिए कचरा कलेक्टर का कार्य बाकी करता हूं और एक नया कर्मचारी प्राप्त करता है।

यहां तक ​​कि बहस करते हुए कि एक विधि एक ऑब्जेक्ट फ़ंक्शन है और एक फ़ंक्शन अनकनेक्टेड गणना है, मेरी मदद नहीं करेगा। फ़ंक्शन डिस्क्रिप्टर स्वयं और आदर्श रूप से फ़ंक्शन का दस्तावेज़ मुझे बताएगा कि इसकी क्या ज़रूरत है और यह क्या लौटा सकता है। बाकी, कुछ वस्तु के राज्य में हेरफेर करने की तरह मेरे लिए वास्तव में पारदर्शी नहीं है। मैं उन कार्यों और तरीकों की अपेक्षा करता हूं जो वे दावा करते हैं कि वे क्या करते हैं, बिना विस्तार से यह जानने के लिए कि वे इसे कैसे करते हैं। यहां तक ​​कि एक शुद्ध कम्प्यूटेशनल फ़ंक्शन कंसोल के राज्य को बदल सकता है या लॉगफाइल में जोड़ सकता है।


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

# perfectly normal function
def hello(greetee):
  print "Hello", greetee

# generalise a bit (still a function though)
def greet(greeting, greetee):
  print greeting, greetee

# hide the greeting behind a layer of abstraction (still a function!)
def greet_with_greeter(greeter, greetee):
  print greeter.greeting, greetee

# very simple class we can pass to greet_with_greeter
class Greeter(object):
  def __init__(self, greeting):
    self.greeting = greeting

  # while we're at it, here's a method that uses self.greeting...
  def greet(self, greetee):
    print self.greeting, greetee

# save an object of class Greeter for later
hello_greeter = Greeter("Hello")

# now all of the following print the same message
hello("World")
greet("Hello", "World")
greet_with_greeter(hello_greeter, "World")
hello_greeter.greet("World")

अब समारोह greet_with_greeter और विधि greet तुलना करें: केवल अंतर ही पैरामीटर का नाम है (जिस फ़ंक्शन में मैंने इसे "ग्रीटर" कहा है, जिस तरीके से मैंने इसे "स्वयं" कहा है)। इसलिए मैं greet विधि का बिल्कुल उसी तरह उपयोग कर सकता हूं जैसे मैं greet_with_greeter फ़ंक्शन का उपयोग करता greet_with_greeter (इसे पाने के लिए "डॉट" वाक्यविन्यास का उपयोग करके, क्योंकि मैंने इसे कक्षा के अंदर परिभाषित किया है):

Greeter.greet(hello_greeter, "World")

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

Greeter.greet2 = greet_with_greeter
hello_greeter.greet2("World")

हां, समारोह greet_with_greeter अब विधि greet2 रूप में भी जाना जाता है। यह एक विधि और फ़ंक्शन के बीच एकमात्र वास्तविक अंतर दिखाता है: जब आप ऑब्जेक्ट.माइट object.method(args) को कॉल करके किसी ऑब्जेक्ट को "चालू" करते हैं, तो भाषा जादुई रूप से इसे method(object, args)

(ओओ purists तर्क दे सकता है कि एक विधि एक समारोह से कुछ अलग है, और यदि आप उन्नत पायथन या रूबी - या स्मॉलटॉक में आते हैं! - आप उनके बिंदु को देखना शुरू कर देंगे। कुछ भाषाएं किसी वस्तु के बिट्स के लिए विशेष पहुंच प्रदान करती हैं। लेकिन मुख्य वैचारिक अंतर अभी भी छुपा अतिरिक्त पैरामीटर है।)


तरीके कक्षाओं के कार्य हैं। सामान्य शब्दकोष में, लोग सभी तरीकों का आदान-प्रदान करते हैं और कार्य करते हैं। असल में आप उन्हें एक ही चीज़ के रूप में सोच सकते हैं (सुनिश्चित नहीं है कि वैश्विक कार्यों को विधियों कहा जाता है)।

http://en.wikipedia.org/wiki/Method_(computer_science)


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

कुछ अतिरिक्त तथ्यों: सी # पूरी तरह ऑब्जेक्ट उन्मुख है ताकि आप स्टैंडअलोन "फ़ंक्शंस" नहीं बना सकें। सी # में प्रत्येक कार्य एक वस्तु से बंधे होते हैं और इस प्रकार, तकनीकी रूप से, एक "विधि" होता है। किकर यह है कि सी # में कुछ लोग उन्हें "विधियों" के रूप में संदर्भित करते हैं - वे केवल "फ़ंक्शंस" शब्द का उपयोग करते हैं क्योंकि कोई वास्तविक भेद नहीं किया जाता है।

अंत में - बस इतना भी पास्कल गुरु यहां मुझ पर कूद नहीं करते - पास्कल भी "कार्यों" (जो एक मूल्य लौटाता है) और "प्रक्रियाओं" के बीच अंतर करता है जो नहीं करता है। सी # इस भेद को स्पष्ट रूप से नहीं बनाता है, हालांकि, आप निश्चित रूप से मूल्य वापस करने का विकल्प चुन सकते हैं या नहीं।


पहले ऑर्डर सन्निकटन के लिए, एक विधि (सी ++ शैली ओओ में) सदस्य फ़ंक्शन के लिए एक और शब्द है, यह एक ऐसा कार्य है जो कक्षा का हिस्सा है।

सी / सी ++ जैसी भाषाओं में आपके पास ऐसे कार्य हो सकते हैं जो कक्षा के सदस्य नहीं हैं; आप किसी फ़ंक्शन को किसी विधि से संबद्ध नहीं करते हैं।


मुझे पता है कि कई अन्य लोगों ने पहले से ही उत्तर दिया है, लेकिन मुझे लगता है कि निम्नलिखित एक सरल, अभी तक प्रभावी एकल लाइन उत्तर है। यद्यपि यह दूसरों के जवाबों की तुलना में बहुत बेहतर नहीं दिखता है, लेकिन यदि आप इसे सावधानी से पढ़ते हैं, तो इसमें विधि बनाम फ़ंक्शन के बारे में जानने के लिए आपके पास सब कुछ है।

एक विधि एक ऐसा फ़ंक्शन है जिसमें ओओपी शर्तों में परिभाषित रिसीवर होता है, एक विधि किसी ऑब्जेक्ट के उदाहरण पर एक फ़ंक्शन होती है।


कक्षा के उदाहरण पर कक्षा अधिनियम के तरीके, वस्तु कहा जाता है।

class Example
{
   public int data = 0; // Each instance of Example holds its internal data. This is a "field", or "member variable".

   public void UpdateData() // .. and manipulates it (This is a method by the way)
   {
      data = data + 1;
   }

   public void PrintData() // This is also a method
   {
      Console.WriteLine(data);
   }
}

class Program
{
   public static void Main()
   {
       Example exampleObject1 = new Example();
       Example exampleObject2 = new Example();

       exampleObject1.UpdateData();
       exampleObject1.UpdateData();

       exampleObject2.UpdateData();

       exampleObject1.PrintData(); // Prints "2"
       exampleObject2.PrintData(); // Prints "1"
   }
}

मैं एक विशेषज्ञ नहीं हूं, लेकिन मुझे यही पता है:

  1. फ़ंक्शन सी भाषा शब्द है, यह कोड के एक टुकड़े को संदर्भित करता है और फ़ंक्शन नाम इस फ़ंक्शन का उपयोग करने के लिए पहचानकर्ता होगा।

  2. विधि ओओ शब्द है, आमतौर पर यह फ़ंक्शन पैरामीटर में यह सूचक है। आप कोड के इस टुकड़े को सी जैसे नहीं बुला सकते हैं, आपको इसे ऑब्जेक्ट करने के लिए ऑब्जेक्ट का उपयोग करने की आवश्यकता है।

  3. चालान विधियां भी अलग हैं। यहां कोड के इस टुकड़े का पता लगाने के लिए अर्थ का आह्वान करें। सी / सी ++, लिंकिंग समय का पता लगाने के लिए फ़ंक्शन प्रतीक का उपयोग करेगा।

  4. Objecive-C अलग है। पता खोजने के लिए डेटा संरचना का उपयोग करने के लिए एक सी फ़ंक्शन का अर्थ दें। इसका मतलब है कि सब कुछ रन टाइम पर जाना जाता है।


एक समारोह एक गणितीय अवधारणा है। उदाहरण के लिए:

f(x,y) = sin(x) + cos(y)

कहता है कि फ़ंक्शन f () दूसरे पैरामीटर के कोसाइन में जोड़े गए पहले पैरामीटर के पाप को वापस कर देगा। यह सिर्फ गणित है। जैसा कि होता है पाप () और कॉस () भी कार्य करते हैं। एक फ़ंक्शन में एक और प्रॉपर्टी होती है: एक ही पैरामीटर वाले फ़ंक्शन को सभी कॉल, उसी परिणाम को वापस कर देना चाहिए।

दूसरी ओर, एक विधि एक ऐसा कार्य है जो ऑब्जेक्ट-उन्मुख भाषा में किसी ऑब्जेक्ट से संबंधित है। इसमें एक अंतर्निहित पैरामीटर है: ऑब्जेक्ट पर कार्य किया जा रहा है (और यह राज्य है)।

इसलिए, यदि आपके पास एक विधि जी (x) के साथ ऑब्जेक्ट जेड है, तो आप निम्न को देख सकते हैं:

Z.g(x) = sin(x) + cos(Z.y)

इस मामले में, पैरामीटर x पास किया गया है, जैसा कि पहले फ़ंक्शन उदाहरण में था। हालांकि, cos () के लिए पैरामीटर एक मान है जो ऑब्जेक्ट जेड जेड के अंदर रहता है और उसके अंदर रहने वाले डेटा (ज़ी) जेड की जी () विधि के लिए अंतर्निहित पैरामीटर हैं।


याद रखने का सरल तरीका:

  • एफ एकीकरण → एफ री (नि: शुल्क साधन किसी वस्तु या वर्ग से संबंधित नहीं है)
  • एम विधि → एम एम्बर (किसी ऑब्जेक्ट या क्लास का सदस्य)

एक वस्तु पर एक विधि है।
एक कार्य एक वस्तु से स्वतंत्र है।

जावा के लिए, केवल विधियां हैं।
सी के लिए, केवल कार्य हैं।

सी ++ के लिए यह इस बात पर निर्भर करेगा कि आप कक्षा में हैं या नहीं।


A class is the collection of some data and function optionally with a constructor.

While you creating an instance (copy,replication) of that particular class the constructor initialize the class and return an object.

Now the class become object (without constructor) & Functions are known as method in the object context.

So basically

Class <==new==>Object

Function <==new==>Method

जावा में इसे आम तौर पर कहा जाता है कि कन्स्ट्रक्टर का नाम कक्षा के नाम के समान ही है, लेकिन वास्तविक में यह है कि कन्स्ट्रक्टर उदाहरण ब्लॉक और स्थिर ब्लॉक की तरह है, लेकिन उपयोगकर्ता को वापसी प्रकार (यानी कक्षा प्रकार) परिभाषित करने के साथ

जबकि कक्षा में एक स्थिर ब्लॉक हो सकता है, उदाहरण ब्लॉक, कन्स्ट्रक्टर, फ़ंक्शन ऑब्जेक्ट में आम तौर पर केवल डेटा और विधि होती है।


सी ++ में, कभी-कभी, किसी वर्ग के सदस्य फ़ंक्शन की धारणा को दर्शाने के लिए विधि का उपयोग किया जाता है। हालांकि, हाल ही में मुझे पुस्तक 586 "व्युत्पन्न कक्षाओं" पर पुस्तक «द सी ++ प्रोग्रामिंग भाषा चौथा संस्करण» में एक बयान मिला है।

कभी-कभी एक वर्चुअल फ़ंक्शन को विधि कहा जाता है।

यह थोड़ा उलझन में है, लेकिन उसने कभी-कभी कहा, इसलिए यह लगभग समझ में आता है, सी ++ निर्माता विधियों को देखता है क्योंकि वस्तुओं पर कार्यों को बुलाया जा सकता है और पॉलिमॉर्फिक व्यवहार कर सकता है।


फ़ंक्शन तर्क का एक सेट है जिसका उपयोग डेटा में हेरफेर करने के लिए किया जा सकता है।

हालांकि, विधि फ़ंक्शन है जिसका उपयोग उस ऑब्जेक्ट के डेटा में हेरफेर करने के लिए किया जाता है जहां यह संबंधित है। तो तकनीकी रूप से, यदि आपके पास ऐसा कार्य है जो पूरी तरह से आपकी कक्षा से संबंधित नहीं है लेकिन कक्षा में घोषित किया गया था, तो यह कोई विधि नहीं है; इसे एक खराब डिजाइन कहा जाता है।





terminology