'প্রথম শ্রেণীর অবজেক্ট' বলতে কী বোঝায়?


146

সাম্প্রতিক একটি প্রশ্নে , আমি জাভাস্ক্রিপ্টের দিক যেখানে ফাংশনগুলি 'প্রথম শ্রেণির' অবজেক্ট, সেগুলির সাথে কথা বলার জন্য পরামর্শ পেয়েছি। অন্যান্য বিষয়গুলির বিপরীতে এই প্রসঙ্গে 'প্রথম শ্রেণি' বলতে কী বোঝায়?

সম্পাদনা (জার্গ ডব্লু মিতাগ): সঠিক ডুপ্লিকেট: "প্রথম শ্রেণির প্রোগ্রামিং নির্মাণ কী?"


উত্তর:


179

উইকিপিডিয়া উদ্ধৃত :

কম্পিউটার বিজ্ঞানে কোনও প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রথম শ্রেণীর ফাংশন (বা ফাংশন আক্ষরিক) সমর্থন করে যদি এটি ফাংশনটিকে প্রথম শ্রেণীর অবজেক্ট হিসাবে বিবেচনা করে ats বিশেষত এর অর্থ হ'ল ভাষাটি কোনও প্রোগ্রামের সঞ্চালনের সময় নতুন ফাংশন গঠনের, তাদের ডেটা স্ট্রাকচারে সংরক্ষণ করে, অন্যান্য ফাংশনে আর্গুমেন্ট হিসাবে তাদের পাস করা এবং অন্যান্য ফাংশনের মান হিসাবে ফিরিয়ে দেয়াকে সমর্থন করে।

এই পৃষ্ঠাটি এটি সুন্দরভাবে চিত্রিত করেছে:

সত্যিই, অন্যান্য ভেরিয়েবলের মতোই

  • একটি ফাংশন অবজেক্ট টাইপের একটি উদাহরণ
  • একটি ফাংশনের বৈশিষ্ট্য থাকতে পারে এবং এর নির্মাণকারী পদ্ধতির সাথে একটি লিঙ্ক থাকতে পারে
  • আপনি একটি চলক মধ্যে ফাংশন সংরক্ষণ করতে পারেন
  • আপনি প্যারামিটার হিসাবে অন্য ফাংশনে ফাংশনটি পাস করতে পারেন
  • আপনি একটি ফাংশন থেকে ফাংশনটি ফিরে আসতে পারেন

ট্রেম্যানের মন্তব্যও পড়ুন, আকর্ষণীয় ...


11
উইকিপিডিয়া উদ্ধৃত করা সুন্দর এবং জঘন্য, তবে বর্ণনাটি বিজ্ঞানীদের জন্য নয়, গিক্সের জন্য নয় language হেক মানে কি এই যাইহোক? সেই উক্তির শেষ বাক্যটি ভুগু।
Spoike

1
@ স্পাইকে, সত্য ... জাভাস্ক্রিপ্ট সংস্থান সরবরাহ করা হয়েছে।
স্যান্ডার ভার্স্লুয়াইস

16
সুবিধামত একটি ভাষার প্রথম শ্রেণীর ক্রিয়াকলাপগুলি উচ্চ-অর্ডার ফাংশনগুলিও রাখে, যেমন প্রথম-ক্রিয়াকলাপের মধ্যে সীমাবদ্ধ থাকার বিপরীতে, যা প্রথম শ্রেণির ফাংশনগুলিকে বাতিল করে দেয়। (উচ্চ-অর্ডার সত্ত্বেও, প্রথম-শ্রেণীর দ্বারা সম্ভব নয়))
ট্রাইম্যান

5
আমি উইকিপিডিয়া উদ্ধৃতিতে অস্পষ্ট কিছুই পাই নি, তবে অতিরিক্ত লিঙ্কটি দুর্দান্ত।
অধ্যাপক 13

4
লিঙ্কটি আর কাজ করছে না (প্রায় 8 বছর পরে)।
ডাবলআর্ট

47

প্রোগ্রামিং ভাষার "ফার্স্ট-ক্লাস ফাংশন" ধারণাটি ব্রিটিশ কম্পিউটার বিজ্ঞানী ক্রিস্টোফার স্ট্রেচি ১৯60০ এর দশকে প্রবর্তন করেছিলেন। এই নীতিটির সর্বাধিক বিখ্যাত সূত্রটি সম্ভবত জেরাল্ড জে সুসমান এবং হ্যারি অ্যাবেলসনের কম্পিউটার প্রোগ্রামগুলির কাঠামো এবং ব্যাখ্যায় :

  • তারা ভেরিয়েবল দ্বারা নামকরণ করা যেতে পারে।
  • তারা প্রক্রিয়া যুক্তি হিসাবে পাস হতে পারে।
  • প্রক্রিয়াগুলির ফলাফল হিসাবে তারা ফিরে আসতে পারে।
  • এগুলি ডেটা স্ট্রাকচারে অন্তর্ভুক্ত থাকতে পারে।

মূলত, এর অর্থ হ'ল আপনি প্রোগ্রামিং ভাষার অন্যান্য উপাদানগুলির সাথে ফাংশনগুলি যা করতে পারেন তা করতে পারেন। সুতরাং, জাভাস্ক্রিপ্টের ক্ষেত্রে এর অর্থ হ'ল আপনি একটি পূর্ণসংখ্যা, একটি স্ট্রিং, একটি অ্যারে বা অন্য কোনও ধরণের অবজেক্টের সাহায্যে যা কিছু করতে পারেন তা করতে পারেন সাথে যা কিছু ফাংশন দিয়েও


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আমরা একটি অবজেক্টের কনস্ট্রাক্টর ফাংশন কল করছি। এছাড়াও {}(জাভাস্ক্রিপ্ট শর্টকাটকে আক্ষরিক বলে) আমরা একটি অবজেক্টের নির্মাণ ফাংশনটি কল করছি। {}কনস্ট্রাক্টরকে ইনস্ট্যান্ট করার জন্য কেবলমাত্র একটি ছোট প্রতিনিধিত্ব just

বেশিরভাগ ভাষা newকোনও শব্দ তৈরি করতে কীওয়ার্ড ব্যবহার করে , তাই একটি জাভাস্ক্রিপ্ট অবজেক্ট তৈরি করতে দিন।

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

আপনি দেখতে হিসাবে আমরা একটি অবজেক্ট নাম ফাংশন তৈরি

জাভাস্ক্রিপ্ট ফাংশন এক্সপ্রেশন ব্যবহার করে একই অবজেক্ট নাম ফাংশন তৈরি করা হচ্ছে ..

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

এখানে আমরা কেবল একটি বস্তুর নাম ফাংশন তৈরি করেছি go


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
তবে আমি এটি সি ++ এ করতে পারি: int দ্বিগুণ (ইনট এক্স) {রিটার্ন x << 1; } int (* f) (int) = দুবার; এসটিডি :: cout << (* চ) (5) << এসটিডি :: endl; এর অর্থ কি সি ++ প্রথম শ্রেণীর অবজেক্ট (মজার সিনট্যাক্স সহ) হিসাবে ফাংশনগুলি আচরণ করে?
থমাস এল হোলাডে

1
যতক্ষণ না আপনি কোনও ফাংশনের ভিতরে কোনও ফাংশন তৈরি করতে পারেন, আমি না বলতে চাই।
সিএইচও

1
সি ফাংশন পয়েন্টারগুলি প্রথম শ্রেণীর ফাংশনগুলি সমর্থন করে (এর একটি খুব সীমাবদ্ধ সংজ্ঞা) তবে ফাংশনগুলি বস্তু নয়। সিতে ফাংশন পয়েন্টারগুলিতে রাষ্ট্র বা আচরণ থাকে না।
স্টিভেন ক্র্যামার

2

এর অর্থ হ'ল ফাংশনগুলি হ'ল একটি ধরণের এবং আচরণ সহ objects এগুলিকে গতিশীলভাবে নির্মিত হতে পারে, অন্য কোনও বস্তুর মতো করে পাস করা যায় এবং এগুলি যে সত্যই বলা যেতে পারে তা তাদের ইন্টারফেসের অংশ।


2

এর অর্থ হ'ল ফাংশনটি আসলে অবজেক্ট থেকে উত্তরাধিকার সূত্রে আসে। যাতে আপনি এটিকে চারপাশে পাস করতে পারেন এবং অন্য যে কোনও অবজেক্টের মতো এটির সাথে কাজ করতে পারেন।

সি # তে তবে আপনাকে ডেলিগেটগুলি থেকে বিরত থাকতে হবে বা ফাংশনগুলি নিয়ে চারপাশে খেলতে প্রতিফলন করতে হবে। (ল্যাম্বদা এক্সপ্রেশন সহ এটি সম্প্রতি আরও ভাল হয়েছে)


2

মজিলা সাইটের সংজ্ঞা সংক্ষিপ্ত এবং স্পষ্ট। তাদের মতে,

জাভাস্ক্রিপ্টে, ফাংশনগুলি হ'ল প্রথম শ্রেণীর অবজেক্ট, কারণ তাদের অন্য কোনও বস্তুর মতো বৈশিষ্ট্য এবং পদ্ধতি থাকতে পারে । অন্যান্য বস্তুগুলির মধ্যে যা তাদের আলাদা করে তা হ'ল ফাংশনগুলি বলা যেতে পারে। সংক্ষেপে, এগুলি হ'ল ফাংশন অবজেক্ট।

এবং

একটি ফাংশন হ'ল একটি "সাবপ্রগ্রাম" যা কোড বহিরাগত (বা পুনরাবৃত্তির ক্ষেত্রে অভ্যন্তরীণ) দ্বারা ফাংশনটিতে ডাকে। প্রোগ্রামের মতোই, একটি ফাংশন ফাংশন বডি নামে বিবৃতিগুলির ক্রম দ্বারা গঠিত। মানগুলি কোনও ফাংশনে প্রেরণ করা যায় এবং ফাংশনটি একটি মান প্রদান করে return


0

আমি অনুমান করি যখন কোনও ভাষায় কিছু প্রথম শ্রেণীর হয়, এর অর্থ এটি একটি লাইব্রেরি বা সিনট্যাকটিক চিনির চেয়ে তার বাক্য গঠন দ্বারা সমর্থিত। উদাহরণস্বরূপ, সি তে ক্লাস প্রথম শ্রেণীর নয়


0

জাভাস্ক্রিপ্টে সহজ, ফাংশনগুলি প্রথম শ্রেণীর অবজেক্ট যা হ'ল ফাংশনগুলি হ'ল অবজেক্ট টাইপ হয় এবং এগুলি প্রথম শ্রেণীর পদ্ধতিতে অন্য যে কোনও অবজেক্টের (স্ট্রিং, অ্যারে, সংখ্যা ইত্যাদি) ব্যবহার করা যেতে পারে যেহেতু তারা বাস্তবে বস্তুতে থাকে নিজেদের. এগুলিকে "ভেরিয়েবলে সংরক্ষণ করা যায়, ফাংশনের আর্গুমেন্ট হিসাবে পাস করা হয়, ফাংশনগুলির মধ্যে তৈরি করা হয় এবং ফাংশন থেকে ফিরে আসতে পারে

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.