নতুন es6 তীর ফাংশন বলতে return
কিছু পরিস্থিতিতে কার্যকর অন্তর্নিহিত হল:
এক্সপ্রেশনটিও সেই ফাংশনের অন্তর্নিহিত রিটার্ন মান।
কোন ক্ষেত্রে আমার return
এস 6 টি তীরের ফাংশনগুলি ব্যবহার করতে হবে ?
নতুন es6 তীর ফাংশন বলতে return
কিছু পরিস্থিতিতে কার্যকর অন্তর্নিহিত হল:
এক্সপ্রেশনটিও সেই ফাংশনের অন্তর্নিহিত রিটার্ন মান।
কোন ক্ষেত্রে আমার return
এস 6 টি তীরের ফাংশনগুলি ব্যবহার করতে হবে ?
উত্তর:
জ্যাকসন আংশিকভাবে একই প্রশ্নের উত্তর দিয়েছেন :
অন্তর্নিহিত রিটার্ন, তবে কোনও ব্লক না থাকলে কেবল।
- এটির ত্রুটি ঘটবে যখন একটি-লাইনার একাধিক লাইনে প্রসারিত হয় এবং প্রোগ্রামার একটি যুক্ত করতে ভুলে যায়
return
।- অন্তর্নিহিত রিটার্ন সিন্টেক্সিকভাবে অস্পষ্ট।
(name) => {id: name}
জিনিস ফেরত দেয়{id: name}
... তাই না? ভুল। এটি ফিরে আসেundefined
। এই ধনুর্বন্ধনী একটি স্পষ্ট ব্লক।id:
একটি লেবেল
আমি এটি একটি ব্লকের সংজ্ঞা যুক্ত করব :
একটি ব্লক স্টেটমেন্ট (বা অন্য ভাষায় যৌগিক বিবৃতি) শূন্য বা আরও বেশি বিবৃতিগুলিকে গোষ্ঠী করতে ব্যবহৃত হয়। ব্লকটি এক জোড়া কোঁকড়ানো বন্ধনী দ্বারা সীমিত করা হয়।
উদাহরণ :
// returns: undefined
// explanation: an empty block with an implicit return
((name) => {})()
// returns: 'Hi Jess'
// explanation: no block means implicit return
((name) => 'Hi ' + name)('Jess')
// returns: undefined
// explanation: explicit return required inside block, but is missing.
((name) => {'Hi ' + name})('Jess')
// returns: 'Hi Jess'
// explanation: explicit return in block exists
((name) => {return 'Hi ' + name})('Jess')
// returns: undefined
// explanation: a block containing a single label. No explicit return.
// more: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/label
((name) => {id: name})('Jess')
// returns: {id: 'Jess'}
// explanation: implicit return of expression ( ) which evaluates to an object
((name) => ({id: name}))('Jess')
// returns: {id: 'Jess'}
// explanation: explicit return inside block returns object
((name) => {return {id: name}})('Jess')
name
ফাংশনটি বন্ধনীতে আবদ্ধ এবং একটি যুক্তি "জেস" দিয়ে অনুরোধ করা হয়েছে। প্রতিটি ক্ষেত্রে =>
এবং এর )('Jess')
মধ্যে কোড হ'ল তীর ফাংশনের মূল অংশ। এটিকে ফর্মের তাত্ক্ষণিকভাবে অনুরোধ করা ফাংশন এক্সপ্রেশনের একটি সংক্ষিপ্ত রূপের মতো বিবেচনা করুন(function (name) { return { id: name } })('Jess')
{}
) বা কোনও ব্লক প্রত্যাশা করবেন কিনা তা জানেন না , এটি ধরে নিয়েছে যে { }
একটি ব্লককে চিহ্নিত করে। এর অর্থ এই যে এটি যখন দেখবে id: name
, তখন এটি মনে করে যে id:
একটি লেবেল তৈরি করা একটি অভিব্যক্তি (প্রবাহ নিয়ন্ত্রণের সাথে জড়িত জেএসের একটি খুব অস্বাভাবিকভাবে ব্যবহৃত বৈশিষ্ট্য এবং এটি ব্যবহার করে :
) এবং তারপরে name
নিম্নলিখিতটি id:
কেবল একটি পৃথক বিবৃতি যা কেবলমাত্র ভেরিয়েবল name
(এবং & কিছুই করে না)।
আমি এই নিয়মটি বুঝতে পারি ...
কার্যকরভাবে রূপান্তরকারী ফাংশনগুলির জন্য (যুক্তিগুলির এক-লাইন-ম্যানিপুলেশনস), রিটার্ন অন্তর্ভুক্ত।
প্রার্থীরা হলেন:
// square-root
value => Math.sqrt(value)
// sum
(a,b) => a+b
অন্যান্য ক্রিয়াকলাপের জন্য (এক-লাইনারের বেশি যে ব্লকের প্রয়োজন রয়েছে, তাদের ফেরত স্পষ্ট করতে হবে
এখানে আরও একটি মামলা আছে।
প্রতিক্রিয়ায় একটি কার্যকরী উপাদান লেখার সময়, আপনি স্পষ্টত ফেরত জেএসএক্সকে মোড়ানোর জন্য প্রথম বন্ধনী ব্যবহার করতে পারেন।
const FunctionalComponent = () => (
<div>
<OtherComponent />
</div>
);
এখানে আরও একটি মামলা যা আমাকে কিছুটা সমস্যা দিয়েছে।
// the "tricky" way
const wrap = (foo) => (bar) => {
if (foo === 'foo') return foo + ' ' + bar;
return 'nofoo ' + bar;
}
এখানে আমরা একটি বেনামে ফাংশন ফিরিয়ে ফাংশনটি সংজ্ঞায়িত করেছি " যেহেতু এটি না, নিখুঁত রিটার্ন কিক করে।
মোড়ানো কীভাবে কার্যকর হবে তা এখানে:
// use wrap() to create a function withfoo()
const withfoo = wrap('foo');
// returns: foo bar
console.log(withfoo('bar'));
// use wrap() to create a function withoutfoo()
const withoutfoo = wrap('bar');
// returns: nofoo bar
console.log(withoutfoo('bar'));
আমি এটি যেভাবে খুলেছি তা নিশ্চিত করার জন্য এটি যেভাবে করা হয়েছিল তা হ'ল কার্যগুলি "অকার্যকরকরণ"।
এখানে প্রথম কোড ব্লকের অর্থার্থের সমতুল্য, কেবল মোড়ানো () এর বডি তৈরি করে একটি সুস্পষ্ট রিটার্ন করুন। এই সংজ্ঞা উপরের মত একই ফলাফল উত্পাদন করে। এখানেই বিন্দুগুলি সংযুক্ত হয়। নিচে এক সঙ্গে উপরে প্রথম কোড ব্লক এর তুলনা করুন এবং এটা পরিষ্কার যে একটি তীর ফাংশন নিজেই হিসাবে গণ্য হবে একটি অভিব্যক্তি, না একটি ব্লক, এবং উহ্য আগমন হয়েছে ।
// the explicit return way
const wrap = (foo) => {
return (bar) => {
if (foo === 'foo') return foo + ' ' + bar;
return 'nofoo ' + bar;
}
}
মোড়কের সম্পূর্ণ অদৃশ্য সংস্করণটি এর মতো হবে, যা চর্বিযুক্ত তীরযুক্ত সংস্করণের মতো কমপ্যাক্ট নয়, অনুধাবন করা অনেক সহজ বলে মনে হচ্ছে।
// the "no arrow functions" way
const wrap = function(foo) {
return function(bar) {
if (foo === 'foo') return foo + ' ' + bar;
return 'nofoo ' + bar;
};
};
শেষ পর্যন্ত, অন্যদের জন্য যা আমার কোডটি পড়তে পারে এবং আমাকে ভবিষ্যত করতে পারে, আমি মনে করি যে আমি নন তীর সংস্করণটি পছন্দ করতে চাই যা প্রথমে এক নজরে দৃশ্যমানভাবে অনুধাবন করা যায়, তীরের চেয়ে একটি ন্যায্য বিট নেয় one ভাবার (এবং আমার ক্ষেত্রে পরীক্ষায়) ভাবার জন্য।
তীর ফাংশন আপনাকে অন্তর্ভুক্ত ফেরত দেওয়ার অনুমতি দেয়: মানগুলি ব্যবহার না করেই মানগুলি ফিরে আসে returned return
।
ফাংশন বডিটিতে একটি অন-লাইন স্টেটমেন্ট উপস্থিত থাকলে এটি কাজ করে:
const myFunction = () => 'test'
console.log(myFunction()) //'test'
আর একটি উদাহরণ, কোনও বস্তু ফিরিয়ে দেওয়া (কার্পেট বন্ধনীগুলিকে মোড়ানো কার্যকারণের দেহের বন্ধনী হিসাবে বিবেচনা করা এড়াতে প্যারেন্টেসিসে মোড়ানো মনে রাখবেন):
const myFunction = () => ({value: 'test'})
console.log(myFunction()) //{value: 'test'}