একটি ভারে একটি ফাংশন নির্ধারণের সুবিধা কী?


10

জাভাস্ক্রিপ্টের এই উদাহরণটি আমি পেয়েছি

var sum = function() {
  var i, sum = 0;
  for(i = 0; i < arguments.length; i += 1) {
    sum += arguments[i];
  }
  return sum;
};

কোনও ভারে কোনও ফাংশন বরাদ্দ করার কী সুবিধা রয়েছে?


উত্তর:


8

আমার বিশ্বাস করা সংক্ষিপ্ত উত্তরটি হ'ল আপনি কেবল একটি ভেরিয়েবলকে নির্ধারিত একটি বেনাম ফাংশন তৈরি করছেন, যার সাথে একটি নামকরণের ফাংশন তৈরির বিরোধিতা করছেন ...

    function sum() {}

পার্থক্যগুলি যাচাই করার একটি ভাল উপায় হ'ল তাদের উপর .TosString () কল করুন এবং পার্থক্যটি দেখুন বা আপনি কনসোল.লগ (যোগফল) করতে পারেন। একটি প্রকৃত নাম দেবে এবং অন্যটি কিছুই দেবে না, নামবিহীন ফাংশন (একটিটি ভারে নির্ধারিত)। স্পেসিফিকেশনগুলিও রয়েছে, যেমন ভার সং = ফাংশন () run run রান সময়ে সংজ্ঞায়িত হয় এবং ফাংশন যোগফল ()। P পার্স সময় সংজ্ঞায়িত হয়।


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

12
এটি পার্থক্যটি ব্যাখ্যা করে , তবে আমি মনে করি না যে এটি সুবিধাটি ব্যাখ্যা করে ।
কিথ থম্পসন

পার্স সময় এবং রানটাইমের মধ্যে পার্থক্য কী?
ওয়ার্ন আঁচেটা

1
নামকৃত ফাংশনগুলির সাথে কোনও সম্পর্ক নেই, আপনি এখনও একটি ভেরিয়েবলের জন্য একটি নামকৃত কার্য বরাদ্দ করতে পারেন
জুয়ান মেন্ডেস

5

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

if (true) {
  function foo() {}
}
try {
  function foo(){}
}
switch (true) {
  default:
    function foo(){}
}

এগুলি সমস্ত স্ট্যান্ডার্ড দ্বারা অনির্দিষ্ট এবং ব্রাউজারগুলি বিভিন্ন কাজ করে, /programming/10069204/function-declaration-inside-if-else-statements দেখুন । সুতরাং যদি আপনাকে কখনও কখনও অন্য স্টাইলটি ব্যবহার করতে হয় তবে ধারাবাহিকতার জন্য আপনি সর্বদা এটি করতে চাইতে পারেন

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


3

আমি জাভাস্ক্রিপ্ট বিশেষজ্ঞ নই, সুতরাং লবণের দানা দিয়ে এটি নিন। আমি মনে করি কিছু ক্ষেত্রে লোকেরা স্টাইলের জন্য এটি করতে পারে এবং কেবল "ফাংশন যোগ () {...}" লিখে লিখে একই জিনিস অর্জন করা যেতে পারে

তবে ভেরিয়েবলের জন্য একটি ফাংশন নির্ধারণ করা কার্যকরী প্রোগ্রামিংয়ের একটি খুব শক্তিশালী কৌশল। আপনি যদি ওওপি-র সাথে পরিচিত হন তবে এটি পলিমারফিজমের সাথে কিছুটা মিল। এনিমাল বেস ক্লাস এবং ক্যাট / কুকুর ডাইরিং ক্লাসের ক্লাসিক উদাহরণটির কথা ভাবেন। আপনি অ্যানিমিলের সাথে কাজ করে এমন কোড লিখতে পারেন তবে যখন এটি কোনও ফাংশন কল করে, সেই ফাংশনটি উদাহরণের ধরণের উপর নির্ভর করে বিভিন্ন কাজ করতে পারে।

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

উদাহরণস্বরূপ, ধরা যাক আপনি একটি উইন্ডোতে 10,000 ডাটা পয়েন্ট উপস্থাপনের জন্য একটি অ্যালগরিদম লিখেন যা পুরো 500 পিক্সেল জুড়ে। প্রতিটি পিক্সেল তারপরে ২০ টি ডেটা পয়েন্ট উপস্থাপন করবে এবং সেগুলি উপস্থাপনের জন্য আপনাকে সেই ২০ টি ডাটা পয়েন্টকে একক মানতে সমষ্টি করতে হবে।

সুতরাং আসুন আমরা 10,000 পয়েন্ট উপস্থাপনের জন্য আপনি একটি অ্যালগরিদম সংজ্ঞায়িত করেন এবং এই অ্যালগরিদম এমন ফাংশন ভেরিয়েবল ব্যবহার করে যাতে এগ্রিগেট নামে পরিচিত:

...
displayValue = aggregate( numbersInOnePixel );
...

এখন রানটাইমের সময় আপনার ব্যবহারকারী কীভাবে ডেটা একত্রিত করতে হবে তা নির্বাচন করতে পারেন। আপনার আসল ফাংশন ভেরিয়েবল নিম্নলিখিত যে কোনও একটি হতে পারে:

aggregate = function sum() {...}
aggregate = function min() {...}
aggregate = function max() {...}
aggregate = function average() {...}

0

এটি বেশিরভাগ শৈলীর বিষয়, যেহেতু একমাত্র পরিস্থিতি যেখানে পার্থক্যটি দেখা যাচ্ছে (সমস্ত ঘোষণা শেষ করার আগে কিছু ফাংশন কল করা; টসস্ট্রিং পদ্ধতি ব্যবহার করে) আমার বিরোধিতায় এক ধরণের কোণার মামলা।

আমি এই var =স্টাইলটিকে সমর্থন করে শুনেছি তার মধ্যে একটি আর্গুমেন্ট হ'ল আপনি কীভাবে স্বাভাবিক ভেরিয়েবল ঘোষণা করেন তার সাথে এটি সামঞ্জস্যপূর্ণ। এটি আপনার ব্যবহৃত ভাষা বৈশিষ্ট্যের সংখ্যা সীমিত করে এবং আপনার প্রোগ্রামটিকে জাভাস্ক্রিপ্টে নতুন কারও কাছে প্রবর্তন করা সহজ করে তোলে।

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