কফিস্ক্রিপ্ট এবং নামযুক্ত কার্যাদি


10

অন্য কোথাও , কফিস্ক্রিপ্টে একটি নামযুক্ত ফাংশনটির পরিভাষা নিয়ে একটি যুক্তি দেখা দিয়েছে। বিশেষত কেউ এই জাতীয় কিছু উল্লেখ করেছেন:

 foo = ->
    console.log("bar")

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

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

আমি কি এই ভাবনায় মধ্যাহ্নভোজন করতে যাচ্ছি যে এই নামকরণের কাজটি কেবল নিটপিকিং নয়?


3
এই পুরো প্রশ্নটি কি ঠিক, ভাল, নাইটপিকিং নয়? :-)
মাদুর

@ ম্যাট, হ্যাঁ দেখে মনে হচ্ছে আমি নিটপিকিংয়ের বিষয়ে নিটপিকিং এড়াতে পারব না
উইনস্টন ইওয়ার্ট

আমি যে প্রোগ্রামারগুলির সাথে ছোট পুলে কথা বলি (প্রোগ্রামারগুলির বাইরে.এসই এর বাইরে), তারা বেশিরভাগ ক্ষেত্রে জাভাস্ক্রিপ্টের নামকৃত ফাংশনগুলি "ক্লাস" (কনস্ট্রাক্টর) হিসাবে ব্যবহার করার জন্য বলে, বেনামে ফাংশনগুলি ভেরিয়েবলগুলিতে সাধারণ পুরানো ফাংশনগুলির জন্য সংরক্ষণ করা হয়।
সাল

1
"জাস্ট নাইটপিকিং" ইঙ্গিত দেয় যে উত্তরটি গুরুত্বপূর্ণ নয় এবং কোনও ভাষার সূক্ষ্মতা বোঝার উপযুক্ত লক্ষ্য নয়।
ব্যবহারকারী 229044

আমি এটিকে কফিস্ক্রিপ্টের সাথে একত্রে দেখতে পারি: foo = ->এটি কেবল একটি সাধারণ পুরানো ফাংশন, যদিও class Fooএকজন নির্মাতা । foo = ->কঠোরভাবে বেনামে ডাকার কোনও কারণ আমি দেখছি না ।
সাল

উত্তর:


20

কফিস্ক্রিপ্টটি জাভাস্ক্রিপ্টের সাথে অযৌক্তিকভাবে আবদ্ধ এবং জাভাস্ক্রিপ্ট নিম্নলিখিত বর্ণনার মধ্যে পার্থক্য করে:

function foo() { ... }
var foo = function () { ... }

আসলে, আপনি এমনকি লিখতে পারেন:

var foo = function bar () { ... }

যেহেতু এই পার্থক্যটি জাভাস্ক্রিপ্টে গুরুত্বপূর্ণ, তাই কফিস্ক্রিপ্টের বিষয়ে কথা বলার সময় একই শব্দগুলি ব্যবহার করা বোধগম্য। তবে কফিস্ক্রিপ্ট function foo ()সিনট্যাক্সের মতো কিছু সমর্থন করে না , তাই আমরা বলতে পারি এটির "নামকরণ" ফাংশন নেই।

এক অর্থে, নামটি ফাংশন সংজ্ঞায়নের অংশ function foo() { ... }, যেখানে অন্য ক্ষেত্রে আপনি কেবল একটি ফাংশন তৈরি করে এটি একটি ভেরিয়েবলকে নির্ধারণ করেন। এটি প্রতিফলিত হয়, উদাহরণস্বরূপ, nameফাংশনের (অমানুষিক) সম্পত্তিতে: প্রথম ক্ষেত্রে foo.nameআপনাকে দেবে "foo"এবং দ্বিতীয় ক্ষেত্রে এটি আপনাকে দেবে ""

অতিরিক্তভাবে, জাভাস্ক্রিপ্টে, এগুলি কীভাবে সুযোগের সাথে পরিচয় হয় সেগুলির ক্ষেত্রেও এটির পার্থক্য রয়েছে: প্রথম সংস্করণটি "উত্তোলিত" এবং এর ব্যাপ্তি জুড়ে উপলব্ধ যেখানে দ্বিতীয় সংজ্ঞাটি নির্ধারিত হওয়ার পরে কেবল এটি উপলব্ধ।

মূলত, এটিকে কেবল জাভাস্ক্রিপ্ট-নির্দিষ্ট জারগান হিসাবে ভাবেন, যা কফিস্ক্রিপ্টে স্থানান্তরিত হয়েছে কারণ কফিস্ক্রিপ্টটি জেএসের সাথে খুব ঘনিষ্ঠভাবে সম্পর্কিত।


1
এটি সত্য যে এর মতো জিনিস নেই function foo () {}। তবে, আপনি এখনও classকনস্ট্রাক্টের মাধ্যমে একটি নামকৃত কার্য শুরু করতে পারেন initial ঠিক যে সংকলিত কফিস্ক্রিপ্ট (ফলস্বরূপ জাভাস্ক্রিপ্ট) বেশিরভাগ ভারবোজ যা একটি নামকৃত ফাংশন কীভাবে লিখবে than
সাল

1
এবং এছাড়াও, একটি প্রযুক্তিগত সতর্কতা রয়েছে: আপনার fooফাংশনটির দেহ উত্তোলন করা হবে না।
সাল

1
জেলিভস: কোনও সমস্যা নেই। আপনার মন্তব্যে আমি সর্বশেষ মন্তব্যটি থেকে একটি সংশোধন করেছি: আপনার class fooফাংশন বডিটি ফাইলের শীর্ষে তোলা হবে না।
সাল

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

@ উইনস্টোনওয়ার্ট: এটি গুরুত্বপূর্ণ কারণ কফিস্ক্রিপ্ট জাভাস্ক্রিপ্টের খুব কাছে রয়েছে। সর্বোপরি, "সোনার নিয়ম" হ'ল: এটি কেবল জাভাস্ক্রিপ্ট "
তিখন জেলভিস

5

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

কফিস্ক্রিপ্টটি এতদূর জাভাস্ক্রিপ্ট থেকে সরানো হয়নি যে আপনার ভাষাগুলির এক অন্যরকম অর্থ বোঝাতে তারা উভয়কে শর্তগুলি পুনরায় সংজ্ঞায়িত করতে হবে। কফিস্ক্রিপ্ট কিছু বুদ্বুদে বিদ্যমান নেই, জাভাস্ক্রিপ্ট বাস্তবায়ন থেকে আপনি যেভাবে যুক্তি দিতে পারেন যে সি ++ বিধানসভা থেকে পৃথক করা হয়েছে তা মুছে ফেলা হয়েছে। একটি বেনামি ফাংশন এবং নামযুক্ত ফাংশন সম্পর্কিত পার্থক্যের বিষয়টি জানা , কারণ আপনি যদি আপনার "নামযুক্ত" কফিস্ক্রিপ্ট ফাংশনটিকে প্রকৃত নামযুক্ত ফাংশনের মতো আচরণ করার প্রত্যাশা করেন , আপনি হতাশ হবেন:

doStuff() # I cause an error

# ... later

doStuff = (x,y) ->
  alert("Were I actually a named function, this would work!")

সমান জাভাস্ক্রিপ্ট একটি প্রকৃত নামকৃত ফাংশন সহ সূক্ষ্মভাবে কাজ করবে :

doStuff(); // I work just fine!

// later....

function doStuff() {
  alert("I'm a real named function!")
}

আপনি হয়ত ঠিক বলেছেন যে আমি কেবল "নিতপিকিং" করছি, তবে কী? কম্পিউটারে সূক্ষ্ম পয়েন্ট প্রোগ্রামিং ব্যাপার , এবং হচ্ছে "টেকনিক্যালি" সঠিক গুরুত্বপূর্ণ। এটি লিখিত কোডের মধ্যে পার্থক্য যা কাজ করে এবং আসলে আপনার কোডটি সঠিক কেন তা বোঝা ।


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

1
@ উইনস্টনওয়ার্ট আমার আপডেট দেখুন। পাইথনের সত্যিই এর সাথে কিছু করার নেই ...
ব্যবহারকারীর 229044

@ অপ্রাপ্তবয়স্ক, আমার বক্তব্য যে নামযুক্ত ফাংশনগুলি অগত্যা সেভাবে কাজ করে না, যদিও তারা জাভাস্ক্রিপ্টে করে। সুতরাং, উত্তোলন নিজেই কফিস্ক্রিপ্টের কার্যগুলি নাম হিসাবে বিবেচনা করা থেকে অযোগ্য ঘোষণা করে না।
উইনস্টন ইওয়ার্ট

হ্যাঁ, আপনাকে বুঝতে হবে যে কফিস্ক্রিপ্টের সমস্ত ফাংশন বেনামে রয়েছে (আসলে, আমি বলতে চাই যে তারা সমস্ত ফাংশন এক্সপ্রেশন)। তবে এর অর্থ এই নয় যে আমরা মাঝে মাঝে পরিভাষা দিয়ে কিছুটা looseিলা হতে পারি না। এ কারণেই আমি মনে করি যে এটির দৃ .়তা হ'ল আপনি কখনই তাদের নামক ক্রিয়াকলাপ বলতে পারবেন না।
উইনস্টন ইওয়ার্ট

3

আমি কি এই ভাবনায় মধ্যাহ্নভোজন করতে যাচ্ছি যে এই নামকরণের কাজটি কেবল নিটপিকিং নয়?

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


3

অবশ্যই একটি নিটপিক নয়, ইমো। আমি এটি পাঠযোগ্যতার জন্য ব্যাপকভাবে ব্যবহার করি:

readfile()
dothis()
dothat()
thistoo()
writefile()

function readfile() {
    ...
}
...

এভাবে:

"Coffeescript" এ রিয়েল নামকৃত ফাংশন

hello()

`function hello() {`
console.log 'hello'
dothings()
`}`

আপনি ব্যাকটিক via দিয়ে খাঁটি জেএস এড়িয়ে চলেছেন `

মনে রাখবেন যে আপনি আপনার ফাংশন বডি এ ইন্ডেন্ট করতে পারবেন না।

চিয়ার্স


1

পেডেন্টদের সাথে বিতর্ক করে সময় নষ্ট করবেন না। এটা কখনই ফলদায়ক হয় না। হ্যাঁ, প্রযুক্তিগতভাবে ভুল হলেও কফি স্ক্রিপ্টের একটি "নামযুক্ত ফাংশন" দ্বারা আপনি কী বোঝাতে চেয়েছেন তা সবাই জানে। না, প্রযুক্তিগতভাবে ভুল তবে ব্যাপকভাবে বোঝা টার্মিনোলজির প্রস্তাবিত সমাধানটির যথার্থতা বা ভুলতার কোনও প্রভাব নেই। ফ্রেসিংয়ের কিছু বিশ্রীতা না পেয়ে কি আরও সুনির্দিষ্ট হওয়া সম্ভব? সম্ভবত না. তবে, এর অর্থ এই নয় যে লোকেরা এটিকে স্লাইড করতে দেবে। কথোপকথনের অন্য প্রান্তে এই লোকটিকে কেবল কল্পনা করুন।

এটি প্রযুক্তিগতভাবে ভুল হওয়ার কারণটি হল আপনি ফাংশনটির নাম রাখেননি, আপনি কার্যটির একটি রেফারেন্সের নাম দিয়েছেন। বিবেচনা:

foo = bar = ->
  console.log "What's my name?"

ফাংশনের নাম কী? fooএবং barউভয় একই ফাংশন উল্লেখ করা হয়, কিন্তু বিভিন্ন নাম আছে। এছাড়াও, হয় fooবা barফাংশন নিজেই পরিবর্তন না করে কোনও আলাদা ফাংশন, এমনকি পুরোপুরি ভিন্ন ধরণের রেফারেন্সের জন্য যে কোনও সময় পুনরায় নিয়োগ দেওয়া যেতে পারে।


0

সুতরাং, আমি এটি পড়ার উপায়টি এরকম:

আপনি যখন জাভাস্ক্রিপ্ট কনসোল ব্যবহার করে কোনও ফাংশন ঘোষণা করেন

var foo = function() { ... }

এবং তারপরে fooবন্ধনী ছাড়াই প্রার্থনা করুন , এটি ফিরে আসে

function() { ... }

তবে আপনি যদি এটি ব্যবহার করে সংজ্ঞা দেন

function foo() { ... }

এবং তারপর প্রথম fooবন্ধনী ছাড়াই আবার প্রার্থনা করুন , এটি ফিরে আসে

function foo() { ... }

প্রথম ক্ষেত্রে, আমি বলতে চাই যে আপনি "ফু" নামের একটি ভেরিয়েবলের মধ্যে এটি একটি বেনাম ফাংশন সংরক্ষণ করছেন। দ্বিতীয় ক্ষেত্রে, আমি বলব আপনি প্রকৃতপক্ষে "foo" নামক একটি ফাংশন ঘোষণা করছেন।

কফিস্ক্রিপ্ট প্রথম প্যাটার্নটি ব্যবহার করে, তাই আমি সম্মত হলাম যে এটি প্রযুক্তিগতভাবে সঠিক যে কফিস্ক্রিপ্টের ফাংশনগুলি নামযুক্ত ভেরিয়েবলগুলিতে সমস্ত বেনামে কাজ করে stored

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