আমি কীভাবে জাভাস্ক্রিপ্ট কোড _ডরেড করতে পারি?


9

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

নীচে কোড নিন। আমি এই কোড লিখেছি। এটা তোলে দুটি বস্তুর মধ্যে একটি শতাংশ মিল দায়িত্ব অর্পণ করা, বলে মধ্যবর্তী লক্ষ্যে কাজ করে {a:1, b:2, c:3, d:3}এবং {a:1, b:1, e:2, f:2, g:3, h:5}স্ট্যাক ওভারফ্লোতে এই প্রশ্নের জবাবে আমি কোড তৈরি করেছি । পোস্টারটি ঠিক কী ধরনের শতকরা মিলের বিষয়ে জিজ্ঞাসা করছে তা নিশ্চিত ছিলাম না, তাই আমি চারটি বিভিন্ন ধরণের সরবরাহ করেছি:

  • 1 ম অবজেক্টের কীগুলির 2 শতাংশ পাওয়া যেতে পারে
  • 1 ম অবজেক্টের মানগুলির শতকরা 2 ভাগের মধ্যে নকল,
  • 1 ম অবজেক্টের মানগুলির শতকরা 2 ভাগ পাওয়া যাবে, কোনও নকল ছাড়ার অনুমতি নেই এবং and
  • object কী: মান} এর জোড় 1 ম অবজেক্টে 2 য় অবজেক্টে পাওয়া যাবে।

আমি যুক্তিযুক্ত অপরিহার্য কোড দিয়ে শুরু করেছি, তবে দ্রুত বুঝতে পেরেছিলাম যে এটি একটি কার্যকরী প্রোগ্রামিংয়ের জন্য উপযুক্ত। বিশেষত, আমি বুঝতে পেরেছি যে আমি তুলনামূলকভাবে যে বৈশিষ্ট্যটির তুলনা করতে চাইছিলাম (যেমন কীগুলি, বা মানগুলি ইত্যাদি) সংজ্ঞায়িত উপরের চারটি কৌশলগুলির জন্য যদি আমি ফাংশন বা তিনটি বের করতে পারি, তবে আমি হতে পারি বাকী কোডটি পুনরায়যোগ্যযোগ্য ইউনিটগুলিতে হ্রাস করতে (শব্দের উপর খেলাকে ক্ষমা করতে) সক্ষম। আপনি জানেন, এটিকে শুকিয়ে রেখেছেন। তাই আমি কার্যকরী প্রোগ্রামিংয়ে স্যুইচ করেছি। আমি ফলাফলটি নিয়ে বেশ গর্বিত, আমি মনে করি এটি যুক্তিসঙ্গতভাবে মার্জিত, এবং আমি মনে করি যে আমি বেশ ভাল কী করেছি তা বুঝতে পেরেছি।

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

সুতরাং, কেউ কীভাবে আমাকে কোডের আরও কয়েকটি সংশ্লেষিত বিটগুলি এমনভাবে "পড়তে" বলতে পারেন যেগুলি উভয়ই সংক্ষিপ্ত এবং এটি যা আমি পড়ছি তা বোঝার ক্ষেত্রে অবদান রাখে? আমি অনুমান করি যে অংশগুলি আমাকে সর্বাধিক পাওয়া যায় সেগুলি হ'ল একটি সারিতে বেশ কয়েকটি চর্বিযুক্ত তীর এবং / অথবা অংশগুলিতে রয়েছে যা বেশ কয়েকটি প্যারেন্যাসিস রয়েছে a আবার, তাদের মূলত, আমি শেষ পর্যন্ত যুক্তিটি বের করতে পারি, তবে (আমি আশা করি) দ্রুত এবং স্পষ্টভাবে এবং সরাসরি জাভাস্ক্রিপ্ট প্রোগ্রামিংয়ের একটি লাইন "গ্রহণ" করার আরও ভাল উপায় আছে way

নীচে থেকে কোডের যে কোনও লাইন অথবা অন্য উদাহরণগুলি নির্দ্বিধায় ব্যবহার করুন। তবে আপনি যদি আমার কাছ থেকে কিছু প্রাথমিক পরামর্শ চান তবে এখানে কয়েকটি দেওয়া হল। একটি যুক্তিসঙ্গত সহজ এক দিয়ে শুরু করুন। কোডের শেষ কাছাকাছি থেকে, এই যে একটা ফাংশন করার জন্য একটি প্যারামিটার হিসাবে পাস করা হয়েছে আছে: obj => key => obj[key]। কীভাবে কেউ এটি পড়তে এবং বুঝতে পারে? বেশি লম্বা উদাহরণস্বরূপ শুরু কাছাকাছি থেকে এক পূর্ণ ফাংশন: const getXs = (obj, getX) => Object.keys(obj).map(key => getX(obj)(key));। শেষ mapঅংশটি আমাকে বিশেষভাবে পেয়েছে।

দয়া করে মনে রাখবেন, সময় এই সময়ে আমি না ইত্যাদি Haskell, উল্লেখ বা সিম্বলিক বিমূর্ত স্বরলিপি বা সংবাহন মৌলিক, এ খুঁজছেন আমি কি করছি খুঁজছেন যে আমি চুপি চুপি মুখ যখন কোডের একটি লাইন দিকে তাকিয়ে করতে ইংরেজি বাক্য নেই। আপনার যদি উল্লেখ রয়েছে যে সুনির্দিষ্টভাবে ঠিক সেই ঠিকানাটি উল্লেখ করেছেন তবে দুর্দান্ত, তবে আমি এমন উত্তরও খুঁজছি না যা বলে যে আমার কিছু প্রাথমিক পাঠ্যপুস্তক পড়তে হবে। আমি এটি করেছি এবং আমি যুক্তিটি পেয়েছি (কমপক্ষে একটি উল্লেখযোগ্য পরিমাণে)। এছাড়াও নোট করুন, আমার সম্পূর্ণ উত্তরের প্রয়োজন নেই (যদিও এই ধরনের প্রচেষ্টা স্বাগত জানানো হবে): এমনকি সংক্ষিপ্ত উত্তরগুলি যা অন্যথায় ঝামেলার কোডের একটি নির্দিষ্ট লাইন পড়ার মার্জিত উপায় সরবরাহ করে তা প্রশংসা করা হবে।

আমি মনে করি এই প্রশ্নের একটি অংশ হ'ল: আমি কি এমনকি কার্যকরী কোডটি লম্বাভাবে পড়তে পারি , আপনি জানেন, বাম থেকে ডান এবং উপরে থেকে নীচে? বা স্প্যাগেটি-এর মতো ওয়্যারিংয়ের মানসিক ছবি তৈরির জন্য এমন কোনও কি বাধ্যতামূলকভাবে কোডের পৃষ্ঠায় রয়েছে যা সিদ্ধান্তগতভাবে রৈখিক নয় ? এবং যদি কোনও এটি করা আবশ্যক , আমাদের এখনও কোডটি পড়তে হবে, তবে আমরা কীভাবে লিনিয়ার পাঠ্য গ্রহণ করব এবং স্প্যাগেটিটি তারে রাখব?

কোনও টিপস প্রশংসা করা হবে।

const obj1 = { a:1, b:2, c:3, d:3 };
const obj2 = { a:1, b:1, e:2, f:2, g:3, h:5 };

// x or X is key or value or key/value pair

const getXs = (obj, getX) =>
  Object.keys(obj).map(key => getX(obj)(key));

const getPctSameXs = (getX, filter = vals => vals) =>
  (objA, objB) =>
    filter(getXs(objB, getX))
      .reduce(
        (numSame, x) =>
          getXs(objA, getX).indexOf(x) > -1 ? numSame + 1 : numSame,
        0
      ) / Object.keys(objA).length * 100;

const pctSameKeys       = getPctSameXs(obj => key => key);
const pctSameValsDups   = getPctSameXs(obj => key => obj[key]);
const pctSameValsNoDups = getPctSameXs(obj => key => obj[key], vals => [...new Set(vals)]);
const pctSameProps      = getPctSameXs(obj => key => JSON.stringify( {[key]: obj[key]} ));

console.log('obj1:', JSON.stringify(obj1));
console.log('obj2:', JSON.stringify(obj2));
console.log('% same keys:                   ', pctSameKeys      (obj1, obj2));
console.log('% same values, incl duplicates:', pctSameValsDups  (obj1, obj2));
console.log('% same values, no duplicates:  ', pctSameValsNoDups(obj1, obj2));
console.log('% same properties (k/v pairs): ', pctSameProps     (obj1, obj2));

// output:
// obj1: {"a":1,"b":2,"c":3,"d":3}
// obj2: {"a":1,"b":1,"e":2,"f":2,"g":3,"h":5}
// % same keys:                    50
// % same values, incl duplicates: 125
// % same values, no duplicates:   75
// % same properties (k/v pairs):  25

উত্তর:


18

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

function mapObj(obj, f) {
  return Object.keys(obj).map(key => f(obj, key));
}

function getPctSameXs(obj1, obj2, f) {
  const mapped1 = mapObj(obj1, f);
  const mapped2 = mapObj(obj2, f);
  const same = mapped1.filter(x => mapped2.indexOf(x) != -1);
  const percent = same.length / mapped1.length * 100;
  return percent;
}

const getValues = (obj, key) => obj[key];
const valuesWithDupsPercent = getPctSameXs(obj1, obj2, getValues);

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

এখানে প্রকাশগুলি খুব ছোট টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো টুকরো। নামী ফাংশনের মতো সাধারণ কার্যকারিতা টেনে নেস্টিং এড়ানো হয় mapObj। লাম্বদাস প্রসঙ্গে সুস্পষ্ট উদ্দেশ্য সহ খুব সংক্ষিপ্ত ফাংশনের জন্য সংরক্ষিত।

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


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

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

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

6

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

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

// getXs :: forall O, F . O -> (O -> String -> F) -> [F]
const getXs = (obj, getX) =>
    Object.keys(obj).map(key => getX(obj)(key));

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

নামকরণ গুরুত্বপূর্ণ, প্রক্রিয়াজাত প্রোগ্রামিংয়ের চেয়েও বেশি সম্ভবত। প্রচুর কার্যকরী প্রোগ্রামগুলি অত্যন্ত নিবিড় শৈলীতে লেখা হয় যা প্রচলিত ভারী (যেমন কনভেনশন যে 'xs' একটি তালিকা / অ্যারে এবং যে 'এক্স' এটির মধ্যে একটি আইটেম খুব বিস্তৃত) তবে আপনি যদি সেই স্টাইলটি না বুঝতে না চান সহজেই আমি আরও ভার্বোজের নামকরণের পরামর্শ দেব। আপনার ব্যবহৃত নির্দিষ্ট নামগুলির দিকে তাকানো, "গেটএক্স" ধরণের অস্বচ্ছ, এবং সেইজন্য "getXs" সত্যিই খুব বেশি সাহায্য করে না। আমি "getXs" কে "অ্যাপ্লিকেশনপোপার্টি" এর মতো কিছু বলতাম এবং "getX" সম্ভবত "প্রপার্টিম্যাপার" হত। "getPctSameXs" তখন "শতাংশপ্রাপ্তি সেমউইথ" ("সহ")।

আর একটি গুরুত্বপূর্ণ বিষয় হ'ল আইডোমেটিক কোড লিখুন । আমি লক্ষ্য করেছি যে আপনি a => b => some-expression-involving-a-and-bতরকারী ফাংশন উত্পাদন করতে একটি বাক্য গঠন ব্যবহার করছেন । এটি আকর্ষণীয়, এবং কিছু পরিস্থিতিতে কার্যকর হতে পারে, তবে আপনি এখানে এমন কিছু করছেন না যা তরকারিযুক্ত ফাংশনগুলির দ্বারা উপকৃত হয় এবং পরিবর্তে traditionalতিহ্যবাহী একাধিক-যুক্তি ফাংশনগুলি ব্যবহার করা আরও বুদ্ধিমান জাভাস্ক্রিপ্ট হতে পারে। এটি করার ফলে এক নজরে কী চলছে তা দেখতে সহজ হতে পারে। আপনি const name = lambda-expressionফাংশনগুলি সংজ্ঞায়িত করতেও ব্যবহার করছেন , এটির function name (args) { ... }পরিবর্তে এটি ব্যবহার করা আরও মূ id় হবে। আমি জানি তারা শব্দার্থগতভাবে কিছুটা আলাদা, তবে আপনি যদি এই পার্থক্যের উপর নির্ভর না করেন তবে আমি যখন সম্ভব তখন আরও সাধারণ রূপটি ব্যবহার করার পরামর্শ দিই।


5
প্রকারের জন্য +1! কেবলমাত্র ভাষাটি তাদের নেই, এর অর্থ এই নয় যে আপনি তাদের সম্পর্কে ভাবেন না । ECMAScript এর জন্য বেশ কয়েকটি ডকুমেন্টেশন সিস্টেমে বিভিন্ন ধরণের ফাংশন রেকর্ড করার জন্য একটি ভাষা রয়েছে। বেশ কয়েকটি ইসমাস্ক্রিপ্ট আইডিই-তে একটি প্রকারের ভাষাও রয়েছে (এবং সাধারণত তারা প্রধান ডকুমেন্টেশন সিস্টেমগুলির জন্য প্রকারের ভাষাও বুঝতে পারে), এবং তারা এমনকি প্রকারের টীকাগুলি ব্যবহার করে প্রাথমিক প্রকারের চেকিং এবং হিউরিস্টিক ইঙ্গিতও করতে পারে
Jörg ডব্লু মিটাগ

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

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

@Jules শুধু নির্মল যা curried ফাংশন আমি উপরে আমার মন্তব্যে উল্লেখ ছিল: আপনি উহ্য হিসাবে, প্রতিটি নিদর্শনের obj => key => ...সরলীকৃত করা যেতে পারে (obj, key) => ...কারণ পরে getX(obj)(key)এছাড়াও সরলীকৃত করা যেতে পারে get(obj, key)। বিপরীতে, অন্য কার্ড ফাংশন, (getX, filter = vals => vals) => (objA, objB) => ...কমপক্ষে লিখিত হিসাবে বাকী কোডের প্রসঙ্গে, সহজেই সরল করা যায় না।
অ্যান্ড্রু উইলেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.