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