'प्रथम श्रेणी वस्तु' से क्या अभिप्राय है?


146

हाल ही के एक प्रश्न में , मुझे अन्य चीजों के बीच, जावास्क्रिप्ट के पहलू पर बात करने के लिए सुझाव मिले, जहां फ़ंक्शन 'प्रथम श्रेणी' ऑब्जेक्ट हैं। अन्य वस्तुओं के विपरीत इस संदर्भ में 'प्रथम श्रेणी' का क्या अर्थ है?

EDIT (Jörg W Mittag): सटीक डुप्लिकेट: "प्रथम श्रेणी का प्रोग्रामिंग निर्माण क्या है?"


जवाबों:


179

विकिपीडिया को उद्धृत करने के लिए :

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

यह पृष्ठ इसे खूबसूरती से दिखाता है:

वास्तव में, किसी भी अन्य चर की तरह

  • एक फ़ंक्शन ऑब्जेक्ट प्रकार का एक उदाहरण है
  • एक फ़ंक्शन में गुण हो सकते हैं और इसकी कंस्ट्रक्टर विधि से लिंक वापस हो सकता है
  • आप फ़ंक्शन को एक चर में संग्रहीत कर सकते हैं
  • आप फ़ंक्शन को किसी अन्य फ़ंक्शन के पैरामीटर के रूप में पास कर सकते हैं
  • आप फ़ंक्शन को फ़ंक्शन से वापस कर सकते हैं

ट्रायमैन की टिप्पणी भी पढ़ें, दिलचस्प ...


11
विकिपीडिया को उद्धृत करना अच्छा और बांका है, लेकिन इसका वर्णन वैज्ञानिकों के लिए एक भाषा में लिखा गया है न कि गीक्स के लिए। वैसे भी यह सब क्या मतलब है बिल्ली? उस उद्धरण में अंतिम वाक्य वाग्विंद है।
स्पोइक

1
@ सच, ​​सच ... जावास्क्रिप्ट संसाधन प्रदान किया।
सैंडर वर्स्लुय्स

16
प्रथम श्रेणी के कार्यों में उच्च श्रेणी के कार्यों के साथ-साथ प्रथम-श्रेणी के कार्यों तक सीमित होने के विपरीत, ऐसी भाषा का चयन करें, जो प्रथम-श्रेणी के कार्यों तक सीमित हो। (हालांकि उच्च-क्रम, प्रथम श्रेणी में संभव नहीं है।)
ट्रेमन

5
मुझे विकिपीडिया उद्धरण में कुछ भी स्पष्ट नहीं मिला, लेकिन अतिरिक्त लिंक उत्कृष्ट है।
प्रोफेक

4
लिंक अब काम नहीं कर रहा है (लगभग 8 साल बाद)।
DoubleOrt

47

एक प्रोग्रामिंग भाषा में "प्रथम श्रेणी के कार्यों" की धारणा को 1960 के दशक में ब्रिटिश कंप्यूटर वैज्ञानिक क्रिस्टोफर स्ट्रेची द्वारा पेश किया गया था । इस सिद्धांत का सबसे प्रसिद्ध सूत्रण संभवतः गेराल्ड जे। ससमान और हैरी एबसन द्वारा कंप्यूटर प्रोग्राम की संरचना और व्याख्या में है :

  • इन्हें चर नाम दिया जा सकता है।
  • उन्हें प्रक्रियाओं के तर्क के रूप में पारित किया जा सकता है।
  • उन्हें प्रक्रियाओं के परिणामों के रूप में लौटाया जा सकता है।
  • उन्हें डेटा संरचनाओं में शामिल किया जा सकता है।

मूल रूप से, इसका मतलब है कि आप फ़ंक्शन के साथ सब कुछ कर सकते हैं जो आप प्रोग्रामिंग भाषा में अन्य सभी तत्वों के साथ कर सकते हैं। तो, जावास्क्रिप्ट के मामले में, इसका मतलब है कि सब कुछ आप एक इंटीजर, एक स्ट्रिंग, एक ऐरे या किसी अन्य प्रकार की वस्तु के साथ कर सकते हैं , आप फ़ंक्शंस के साथ भी कर सकते हैं


14

स्ट्रैची-सुस्मान-एबेल्सन के निर्माण की अधिक पूर्ण स्वीकृति। तो अगर आपकी भाषा इस तरह के निर्माण का समर्थन करती है तो आपको प्रथम श्रेणी की भाषा के रूप में एक फंक्शन मिला है :)

var men = function (objectOfAdmiration) {
  return objectOfAdmiration();
};
men.isSweetHeart = true;

var women = function (objectOfAdmiration) {
  return objectOfAdmiration();
};
women.isSweetHeart = true;

var aliens = function (objectOfAdmiration) {
  return objectOfAdmiration();
};

function like(obj){
  if (obj.isSweetHeart) {
      return function (){ return "Holy TRUE!"}; 
  }
  else {
      return function (){ return "Holy CRAP!"};
  }
}

alert("Men like women is " + men(like(women))); // -> "Holly TRUE!"
alert("Women like men is " + women(like(men))); // -> "Holly TRUE!"

alert("Men like aliens is " + men(like(aliens))); // -> "Holly CRAP!"
alert("Aliens like women is " + aliens(like(women))); // -> "Holly TRUE!" :)

//women(like(aliens)); //  Who knows? Life is sometimes so unpredictable... :)

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


9

जावास्क्रिप्ट फ़ंक्शंस प्रथम श्रेणी के फ़ंक्शंस हैं जिसका अर्थ है फ़ंक्शंस और ऑब्जेक्ट्स को एक ही चीज़ के रूप में माना जाता है। फ़ंक्शंस को ऑब्जेक्ट या सरणी के अंदर एक चर के रूप में संग्रहीत किया जा सकता है और साथ ही इसे एक तर्क के रूप में पारित किया जा सकता है या किसी अन्य फ़ंक्शन द्वारा वापस किया जा सकता है। यह फ़ंक्शन "जावास्क्रिप्ट में प्रथम श्रेणी के नागरिक" बनाता है

जावास्क्रिप्ट शाब्दिक अंकन सिंटैक्स का उपयोग करता है जो इस तथ्य को पूरी तरह से समझना मुश्किल बनाता है कि जावास्क्रिप्ट फ़ंक्शन ऑब्जेक्ट हैं।

उदाहरण के लिए..

var youObj1 = new Object();
// or
var youObj1 = {};

दोनों अवक्रमण बराबर हैं। उपयोग करके newहम किसी ऑब्जेक्ट के कंस्ट्रक्टर फ़ंक्शन को कॉल कर रहे हैं। इसके अलावा {}(जावास्क्रिप्ट शॉर्टकट जिसे शाब्दिक कहा जाता है) का उपयोग करके हम किसी ऑब्जेक्ट के निर्माण कार्य को बुला रहे हैं। {}कंस्ट्रक्टर को त्वरित करने के लिए सिर्फ एक छोटा प्रतिनिधित्व है।

अधिकांश भाषाएं newऑब्जेक्ट बनाने के लिए कीवर्ड का उपयोग करती हैं , इसलिए जावास्क्रिप्ट ऑब्जेक्ट बनाने की सुविधा देती है।

var myFunction = new Function("a",  "b", 'return a_b');

जैसा कि आप देखते हैं कि हमने एक ऑब्जेक्ट नाम फ़ंक्शन बनाया है

जावास्क्रिप्ट फ़ंक्शन अभिव्यक्ति का उपयोग करके समान ऑब्जेक्ट नाम फ़ंक्शन बनाना ।।

var myFunction = function myFunction(a,b) {
    return a+b;
}

यहां हम जाते हैं हमने केवल एक ऑब्जेक्ट नाम फ़ंक्शन बनाया है।


9

जावास्क्रिप्ट फ़ंक्शंस में प्रथम श्रेणी की वस्तुएँ होती हैं क्योंकि यह उन वस्तुओं की तुलना में बहुत अधिक कर सकती है।

  • एक फ़ंक्शन ऑब्जेक्ट प्रकार का एक उदाहरण है।

Function instanceof Object //returns true

एक ऑब्जेक्ट की तरह एक फंक्शन में गुण हो सकते हैं और यह कंस्ट्रक्टर फ़ंक्शन के लिए वापस लिंक हो सकता है।

 var o = {}; // empty object 'o'
    o.a = 1 ; 
    o.b = 2 ; 

    console.log(o.a); // 1
    console.log(o.b); // 2 


    function foo(){};
    foo.a = 3 ; 
    foo.b = 4 ; 

    console.log(foo.a);  // logs 3
    console.log(foo.b);  // logs 4 

  • फ़ंक्शंस को मान के रूप में एक चर में संग्रहीत किया जा सकता है।

  var foo = function(){}; 
    console.log(foo); // function(){}

  • कार्यों को अन्य कार्यों के तर्क के रूप में पारित किया जा सकता है

function callback (foo){
      foo();
}

callback(function(){console.log('Successfuly invoked as an argument inside function callback')})

  • आप किसी फ़ंक्शन से फ़ंक्शन वापस कर सकते हैं

 function foo(){
	    return function(){console.log('working!')};
    }

    var bar = foo();
    bar(); // working!

  • एक संदर्भ के रूप में एक चर में संग्रहीत किया जा सकता है।

    var sum = function (a,b){return a+b}  
    sum(4,4);


एक वस्तु वह सब भी कर सकती है।
डबलऑर्ट

5

सरल परीक्षण। यदि आप इसे अपनी भाषा में कर सकते हैं (उदाहरण के लिए अजगर):

def double(x):
    return x*x

f = double

print f(5) #prints 25

आपकी भाषा प्रथम श्रेणी की वस्तुओं के रूप में कार्य कर रही है।


3
लेकिन मैं इसे C ++ में कर सकता हूं: इंट दो बार (इंट x) {रिटर्न x << 1; } int (* f) (int) = दो बार; std :: अदालत << (* च) (5) << std :: endl; क्या इसका मतलब यह है कि सी ++ प्रथम श्रेणी की वस्तुओं (एक अजीब वाक्य रचना के साथ) के रूप में कार्य करता है?
बजे थॉमस एल होलाडे

1
तिल आप एक फंक्शन के अंदर एक फंक्शन बना सकते हैं, मैं ना कहना चाहता हूं।
cHao

1
सी फ़ंक्शन पॉइंटर्स प्रथम श्रेणी के कार्यों का समर्थन करते हैं (बहुत सीमित परिभाषा) लेकिन फ़ंक्शन ऑब्जेक्ट नहीं हैं। C में फ़ंक्शन पॉइंटर्स में स्थिति या व्यवहार नहीं होता है।
स्टीवन क्रेमर

2

इसका मतलब है कि कार्य एक प्रकार और व्यवहार के साथ ऑब्जेक्ट हैं। उन्हें गतिशील रूप से बनाया जा सकता है, किसी भी अन्य वस्तु के रूप में चारों ओर पारित किया जा सकता है, और इस तथ्य को कि उन्हें बुलाया जा सकता है, उनके इंटरफ़ेस का हिस्सा है।


2

इसका मतलब यह है कि वास्तव में फ़ंक्शन ऑब्जेक्ट से विरासत में मिला है। ताकि आप इसे पास कर सकें और किसी अन्य ऑब्जेक्ट की तरह इसके साथ काम कर सकें।

सी # में हालांकि आपको प्रतिनिधियों के साथ या कार्यों के साथ खेलने के लिए प्रतिबिंब की आवश्यकता है। (यह हाल ही में लंबोदर भाव के साथ बेहतर हुआ)


2

मोज़िला साइट पर परिभाषा संक्षिप्त और स्पष्ट है। उनके अनुसार,

जावास्क्रिप्ट में, फ़ंक्शंस प्रथम श्रेणी के ऑब्जेक्ट हैं, क्योंकि उनके पास किसी अन्य ऑब्जेक्ट की तरह ही गुण और विधियां हो सकती हैं । जो उन्हें अन्य वस्तुओं से अलग करता है, वह यह है कि कार्यों को कहा जा सकता है। संक्षेप में, वे फ़ंक्शन ऑब्जेक्ट हैं।

तथा

एक फ़ंक्शन एक "सबप्रोग्राम" है जिसे फ़ंक्शन में कोड बाह्य (या पुनरावृत्ति के मामले में आंतरिक) द्वारा बुलाया जा सकता है। प्रोग्राम की ही तरह, एक फंक्शन स्टेटमेंट बॉडी नामक एक क्रम से बना होता है। मान किसी फ़ंक्शन में पास किए जा सकते हैं, और फ़ंक्शन एक मान लौटाएगा।


0

मुझे लगता है कि जब कोई चीज किसी भाषा में प्रथम श्रेणी में होती है, तो इसका मतलब है कि यह पुस्तकालय या वाक्यगत चीनी के बजाय इसके वाक्यविन्यास द्वारा समर्थित है। उदाहरण के लिए, C में कक्षाएं प्रथम श्रेणी नहीं हैं


0

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.