বেনামে জাভাস্ক্রিপ্ট f => f কাজ করে ঠিক কী?


101

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

আমি এই কোডটি পেয়েছি যা কাজ করে, তবে কী ঘটছে তা আমি পুরোপুরি বুঝতে পারি না।

compose(__DEV__ ? devTools() : f => f)

কি f => fসমতূল্য () => {}একটি খালি বেনামী ফাংশন আছে?


3
এটি এমডিএনf অনুসারে
এলি সাদোফ 20'16

4
খালি বেনামে নয়, এটি পরিচয়।
ডেভিন ট্রিওন

17
FWIW, আপনি প্রায়শই ECMAscript এর পুরানো সংস্করণগুলির সমতুল্য কি তা দেখতে বাবেলে এই জাতীয় নির্মাণগুলি আটকে রাখতে পারেন।
জেমস থর্প


স্ট্যাকওভারফ্লো.com/ জিজ্ঞাসা / 24900875/… এর উত্তরটি সরাসরি এই প্রশ্নের উত্তর দেয় না। আমি জানতাম f => f একটি বেনামি ফাংশন আমি ঠিক বুঝতে পারছিলাম না এটি কী করছে। আমি মনে করি এই প্রশ্নটি একটি সুনির্দিষ্ট মামলা এবং পরিচয় ফাংশন সম্পর্কে ফেলিক্স কিং প্রদত্ত তথ্য এই প্রশ্নের পক্ষে অনন্য।
কিছু

উত্তর:


114

f => f অনুরূপ function(f){ return f; }

এত কাছে, তবে আপনি যা আশা করেছিলেন তা পুরোপুরি নয়।

* - মতামত হিসাবে ইঙ্গিত করা হয়েছে, সূক্ষ্ম পার্থক্য আছে, কিন্তু আপনার প্রশ্নের খাতিরে, আমি মনে করি না তারা বিশেষভাবে প্রাসঙ্গিক। তারা অন্যান্য পরিস্থিতিতে খুব প্রাসঙ্গিক।


2
আমি f => fএবং এর মধ্যে কমপক্ষে দুটি পার্থক্য সম্পর্কে ভাবতে পারি function(f) { return f; }:)
বেনিয়ামিন গ্রুইনবাউম

6
@ বেনজামিন গ্রুয়েনবাউম শীতল, এগিয়ে যান - এমনকি যদি আপনি এটি সম্পর্কিত বলে মনে করেন তবে এই উত্তরটি আপডেট করুন।
জমিকে

4
আমি মনে করি না এটি খুব প্রাসঙ্গিক, কেবলমাত্র একজন প্যাডেন্ট: new (f => f)নিক্ষেপ করে, এর আলাদা আলাদা toStringকারণ রয়েছে এবং কোনও কারণে আমি (f => f).argumentsক্রোমে খুব নেশা করতে পারি না তবে এফএফ বা এজ হিসাবে নয়।
বেনিয়ামিন গ্রুইনবাউম

5
@ বেনজামিন গ্রুয়েনবাউমের পরিচালনাও thisআলাদা। (যদিও পার্থক্যটি যদি thisফাংশন বডিটিতে উপস্থিত না হয় তবে এটি পর্যবেক্ষণযোগ্য না হতে পারে ... আমি নিশ্চিত নই)
গ্রেগরি নিসবেট

184

f => fহয় পরিচয় ফাংশন । এটি কেবল যে আর্গুমেন্টটি পাস হয়েছিল তা ফিরিয়ে দেয়।

রূপান্তর প্রক্রিয়াগুলির জন্য এই ফাংশনটি প্রায়শই একটি ডিফল্ট মান হিসাবে ব্যবহৃত হয়, কারণ এটি কোনও রূপান্তর সম্পাদন করে না।

কি f => fসমতূল্য () => {}একটি খালি বেনামী ফাংশন আছে?

খালি ফাংশন কিছুই ফেরত না। পরিচয় ফাংশনটি আর্গুমেন্টে পাস করে।


43
নাম, ব্যাখ্যা এবং ব্যবহারের কেস সরবরাহ করার জন্য এবং আসল প্রশ্নের উত্তর দেওয়ার জন্য এ +।
আপনাকে ধন্যবাদ

19

আপনি যদি এর f => fঅর্থ জানতে চান তবে বাম দিকটি হল প্যারামিটার এবং ডান দিকটি ফেরত মান। সুতরাং উদাহরণস্বরূপ, এর f => f*2সমতুল্য:

function(f) { 
  return f * 2; 
}

আপনি যে কোডটি বর্ণনা করেছেন তাতে কোডটি ইনপুট হিসাবে যা সরবরাহ করা হয় তা ফেরত দেয়।

https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Functions/Arrow_functions


9

অন্যরা ইতিমধ্যে যা f => fকরে তা উল্লেখ করেছে , তাই আমি এর গভীরে যাব না। আমি শুধু, ফাংশন বাকি ব্যাখ্যা করা যাচ্ছে না মধ্যে একটি পার্থক্য একটি বিট আছে, কারণ f => fএবং__DEV__ ? devTools() : f => f

__DEV__টেরিনারি অপারেটরটি সত্যবাদী মান কিনা তা পরীক্ষা করে এবং যদি তাই হয় তবে এটি ফাংশনটি ফিরিয়ে দেয় devTools()। অন্যথায়, এটি পরিচয় ফাংশনটি ফিরিয়ে দেয় f => fযা কিছুই করে না। অন্যভাবে রাখুন: এই কোডটি কিছু বিকাশ মোড ফাংশন সক্ষম করে। অবশিষ্ট কোড ব্যতীত, এই মোডটি কী যুক্ত করে তা বলা শক্ত, তবে সম্ভবত, এটি কিছু অতিরিক্ত লগিংয়ের তথ্য এবং কম অবসন্নকরণ সক্ষম করবে।


__DEV__ ? devTools() : f => fকিছু বরাদ্দ দেয় না f। আপনি কি কোড উদাহরণ থেকে কিছু রেখে গেছেন?
ফেলিক্স ক্লিং

2
এটি ফাংশনটি ফিরিয়ে দেবে না, এটি ফাংশনের ফলাফলটি ফিরিয়ে দেবে
স্টিফান বিজজিটার

1
আপনার অবতার আমাকে বিরক্ত করে এবং আমার দিনকে বিরক্ত করে। আমার মনে হচ্ছে 90 এর দশকের মতো এবং আমার মডেমটি সংযোগটি হারিয়েছে। এখনও, ভাল উত্তরের জন্য +1 করুন।
কনরাড ভিল্টারস্টন

@ কনরাডভিল্টারস্টেন আমার অবতারে মন্তব্য করা প্রথম আপনি নন। আপনি প্রথম ব্যক্তি যিনি এটি পছন্দ করেন না। বেশিরভাগ লোক আমাদের নস্টালজিক ফ্যাক্টর এবং এটির প্রত্যাশার ছোট্ট বিপর্যয়কে প্রশংসা করেছে।
Nzall

1
আমি আশা করি আপনি বিড়ম্বনা, সাথী পেয়েছেন। এটি অবশ্যই একটি রসিকতা হিসাবে বোঝানো হয়েছিল। স্পষ্টতই, আমি এটি পছন্দ করি এবং আমি এটিকে সতেজ মনে করি।
কনরাড ভিল্টারস্টেন

9

অনুরূপ দ্বিধা নিয়ে যে কোনও সময়, আপনি উত্তর পেতে বাবেলকে ব্যবহার করতে পারেন ।

এটি এর মতো ফিরে এসেছে:

"use strict";

(function (f) {
  return f;
});

বিটিডাব্লু, => আপনি ব্যবহৃত হ'ল ES6 বৈশিষ্ট্য যা তীরের এক্সপ্রেশন । আগ্রহের অন্য প্রকাশ

() => {};  // es6

রূপান্তর করতে হবে:

(function () {});

যেহেতু তীর ফাংশন এক্সপ্রেশনগুলি সর্বদা অজ্ঞাত থাকে তবে আপনি যদি ফাংশনে নাম যুক্ত করেন তবে তা বোধগম্য হয়:

let empty = () => {}; // es6

রূপান্তর করতে হবে

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