কার্যকরী বৈশিষ্ট্যগুলি
ক্রিয়ামূলক প্রোগ্রামিং বা কার্যকরী গ্রন্থাগারকে কী সংজ্ঞায়িত করে তার কোনও পরিষ্কার-সীমানা নেই। কার্যকরী ভাষার কিছু বৈশিষ্ট্য জাভাস্ক্রিপ্টে নির্মিত হয়েছে:
- প্রথম শ্রেণীর, উচ্চ-অর্ডার ফাংশন
- লম্বডাস / বেনামে ফাংশন, ক্লোজার সহ
অন্যদের কিছু যত্ন সহ জাভাস্ক্রিপ্টে সম্পন্ন করা সম্ভব:
- অপরিচ্ছন্নতা
- রেফারেন্সিয়াল স্বচ্ছতা
এখনও অন্যরা ES6 এর অংশ, এবং এখন আংশিক বা সম্পূর্ণ উপলব্ধ:
- কমপ্যাক্ট, এমনকি সংশ্লেষ, ফাংশন
- টেল-কল অপ্টিমাইজেশনের মাধ্যমে পারফরম্যান্ট পুনরাবৃত্তি
এবং আরও অনেকগুলি রয়েছে যা জাভাস্ক্রিপ্টের স্বাভাবিক নাগালের বাইরে রয়েছে:
- প্যাটার্ন ম্যাচিং
- অলস মূল্যায়ন
- হোমোকোনসিটি
তারপরে একটি লাইব্রেরি এটি কী ধরণের বৈশিষ্ট্যগুলি সমর্থন করার চেষ্টা করছে তা বেছে নিতে এবং এখনও যুক্তিসঙ্গতভাবে "কার্যকরী" বলা যেতে পারে।
কল্পনা-জমির স্পেসিফিকেশন
ফ্যান্টাসি জমি মান ধরনের গাণিতিক শ্রেণী তত্ত্ব ও বিমূর্ত বীজগণিত কার্যকরী প্রোগ্রামিং বৈশিষ্ট্যসমূহ নিয়ে আসা একটি সংখ্যা জন্য একটি নির্দিষ্ট হয়, যেমন ধরনের Monoid , Functor এবং একসংখ্যা । এই ধরণেরগুলি মোটামুটি বিমূর্ত এবং সম্ভবত আরও পরিচিত ধারণাগুলি প্রসারিত করে। উদাহরণস্বরূপ, ফ্যান্ট্যাক্টরগুলি এমন পাত্রে থাকে যা map
কোনও ফাংশন দিয়ে চালিয়ে যেতে পারে , যেভাবে অ্যারেটি map
ব্যবহার করে চলতে পারে Array.prototype.map
।
ফোকলেট
ফোকাটেল হ'ল ফ্যান্টাসি-ল্যান্ড স্পেসিফিকেশনের বিভিন্ন অংশ প্রয়োগকারী এবং সহযোগী ইউটিলিটি ফাংশনের একটি ছোট সংগ্রহ types এই ধরণেরগুলি হ'ল হতে পারে , হয় , কার্যের মতো (অন্যত্র যা ভবিষ্যত বলা হয় তার সাথে খুব মিল, এবং প্রতিশ্রুতির সাথে আরও হালাল কাজিন), এবং বৈধকরণ
ফোকাটেল সম্ভবত ফ্যান্টাসি-ল্যান্ড স্পেসিফিকেশনের সর্বাধিক পরিচিত বাস্তবায়ন এবং এটি সজ্জিত। তবে এখানে একটি নির্দিষ্ট বা ডিফল্ট বাস্তবায়ন বলে কিছু নেই; ফ্যান্টাসি-ল্যান্ড কেবল বিমূর্ত প্রকারগুলি নির্দিষ্ট করে এবং অবশ্যই একটি বাস্তবায়ন অবশ্যই এই জাতীয় কংক্রিটের প্রকারগুলি তৈরি করে। ফোকাটেলের কার্যকরী লাইব্রেরি হওয়ার দাবিটি স্পষ্ট: এটি সাধারণত ফাংশনাল প্রোগ্রামিং ভাষাগুলিতে প্রাপ্ত ডেটা প্রকারগুলি সরবরাহ করে যা কার্যকরী পদ্ধতিতে প্রোগ্রাম করা যথেষ্ট সহজ করে তোলে।
এই উদাহরণটি, ফোকাটেল ডকুমেন্টেশন থেকে ( দ্রষ্টব্য : ডক্সের সাম্প্রতিক সংস্করণগুলিতে নয়) দেখায় যে এটি কীভাবে ব্যবহৃত হতে পারে:
var Maybe = require('data.maybe')
function find(predicate, xs) {
return xs.reduce(function(result, x) {
return result.orElse(function() {
return predicate(x)? Maybe.Just(x)
: Maybe.Nothing()
})
}, Maybe.Nothing())
}
var numbers = [1, 2, 3, 4, 5]
var anyGreaterThan2 = find(function(a) { return a > 2 }, numbers)
var anyGreaterThan8 = find(function(a) { return a > 8 }, numbers)
রামদা
রামদা (অস্বীকৃতি: আমি অন্যতম লেখক) একটি খুব ভিন্ন ধরণের লাইব্রেরি। এটি আপনার জন্য নতুন ধরণের সরবরাহ করে না। 1 পরিবর্তে এটি বিদ্যমান ধরণের উপর পরিচালনা করা সহজতর করার জন্য এটি ফাংশন সরবরাহ করে। এটি ছোট ফাংশনগুলি বৃহত্তরগুলিতে রচনা করার, অপরিবর্তনীয় ডেটার সাথে কাজ করার, পার্শ্ব-প্রতিক্রিয়াগুলি এড়িয়ে যাওয়ার ধারণার চারপাশে তৈরি করা হয়েছে।
রামদা বিশেষত তালিকাগুলিতে কাজ করে, তবে বস্তুগুলিতে এবং কখনও কখনও স্ট্রিংগুলিতেও। এটি এর কলগুলির অনেকগুলি এমনভাবে প্রতিনিধিত্ব করে যে এটি ফোকলেট বা অন্যান্য ফ্যান্টাসি-ভূমি বাস্তবায়নে হস্তক্ষেপ করবে। উদাহরণস্বরূপ, Ramda এর map
ফাংশন, এক একইভাবে পরিচালনা Array.prototype
, তাই R.map(square, [1, 2, 3, 4]); //=> [1, 4, 9, 16]
। তবে ফোকাটলে Maybe
ফ্যান্টাসি-ল্যান্ড Functor
স্পেস প্রয়োগ করে যা মানচিত্রকেও নির্দিষ্ট করে, আপনি map
এটির সাথে রামদা ব্যবহার করতে পারেন :
R.map(square, Maybe.Just(5));
R.map(square, Maybe.Nothing);
রমদার একটি কার্যকরী লাইব্রেরি হওয়ার দাবী ফাংশনগুলি রচনা করা সহজ করে, আপনার ডেটাটিকে কখনও রূপান্তরিত করে না এবং কেবল খাঁটি ফাংশন উপস্থাপন করে। রামদার সাধারণত ব্যবহারটি হ'ল ছোটগুলি রচনা করে আরও জটিল ক্রিয়াকলাপ তৈরি করা হবে, যেমন রামদার ফিলোসফি সম্পর্কিত একটি নিবন্ধে দেখা গেছে
var userRatingForComments = R.pipe(
R.pluck('username')
R.map(R.propOf(users)),
R.pluck('rating'),
);
অন্যান্য গ্রন্থাগারসমূহ
আসলে আমি আরও লাইব্রেরি পেয়েছি, তারা সবাই দুটি বিভাগে পড়ে বলে মনে হচ্ছে। আন্ডারস্কোর, লোডাশ রামদার মতো very ফ্যান্টাসি-ল্যান্ড, পয়েন্টফ্রি-ফ্যান্টাসি ফোকলের মতো।
এটা আসলে সঠিক নয়। প্রথমত, ফ্যান্টাসি-ল্যান্ড কেবল একটি স্পেসিফিকেশন যা গ্রন্থাগারগুলি বিভিন্ন ধরণের জন্য প্রয়োগ করার সিদ্ধান্ত নিতে পারে। ফোকটেল সেই স্পেসিফিকেশনের অনেকগুলি বাস্তবায়নগুলির মধ্যে একটি, সম্ভবত সেরা গোলাকার একটি, সম্ভবত সবচেয়ে পরিপক্ক। পয়েন্টফ্রি-ফ্যান্টাসি এবং রামদা-ফ্যান্টাসি অন্যগুলি এবং আরও অনেকগুলি রয়েছে ।
আন্ডারস্কোর এবং lodash Folktale ভালো কিছু তুলনায় অনেক কম সংযোগ সঙ্গে ফাংশন মহান সংখ্যা প্রদান, কৃত্রিম Ramda মত যে তারা দখল ব্যাগ লাইব্রেরি আছে। এমনকি নির্দিষ্ট কার্যকারিতাও প্রায়শই রামদা'র সাথে ওভারল্যাপ হয়। তবে আরও গভীর স্তরে, রামদা those লাইব্রেরি থেকে খুব আলাদা উদ্বেগ রয়েছে। রামদার নিকটতম কাজিনরা সম্ভবত এফকিট , ফনুক , এবং ডাব্লু জে এর মতো লাইব্রেরি রয়েছে ।
বিল্বি তার নিজস্ব বিভাগে রয়েছেন, রামদা সরবরাহ করেছেন এমন কিছু সরঞ্জাম এবং ফ্যান্টাসি-ল্যান্ডের সাথে সামঞ্জস্যপূর্ণ কিছু ধরণের দুটি সরঞ্জাম সরবরাহ করে। (বিল্বির লেখকও ফ্যান্টাসি-ল্যান্ডের মূল লেখক))
আপনার কল
এই সমস্ত গ্রন্থাগারকে কার্যকরী বলা ডান রয়েছে, যদিও এগুলি কার্যকরী পদ্ধতির এবং কার্যকরী প্রতিশ্রুতিতে ডিগ্রীতে ব্যাপকভাবে পরিবর্তিত হয়।
এই লাইব্রেরির কিছু আসলে একসাথে ভাল কাজ করে। রামদার ফোকলেট বা অন্যান্য ফ্যান্টাসি-জমি বাস্তবায়নের সাথে ভাল কাজ করা উচিত। যেহেতু তাদের উদ্বেগ সবেমাত্র ওভারল্যাপ হয়, তাই তারা সত্যই দ্বন্দ্ব করে না, তবে রমদা আন্তঃব্যবস্থাপনা তুলনামূলকভাবে মসৃণ করতে যথেষ্ট কাজ করেছে। আপনি বেছে নিতে পারেন এমন আরও কয়েকটি সংমিশ্রণের জন্য এটি সম্ভবত কম সত্য, তবে ES6 এর সহজ ফাংশন বাক্য গঠনটি সংহত করার বাইরে কিছুটা ব্যথাও নিতে পারে।
লাইব্রেরির পছন্দ বা ব্যবহারের জন্য লাইব্রেরির স্টাইল আপনার প্রকল্প এবং আপনার পছন্দগুলিতে নির্ভর করে। প্রচুর ভাল বিকল্প উপলব্ধ রয়েছে, এবং সংখ্যাগুলি বাড়ছে, এবং তাদের মধ্যে অনেকগুলি উন্নতি করছে। জেএসে ক্রিয়ামূলক প্রোগ্রামিং করার জন্য এটি একটি ভাল সময়।
1 ঠিক আছে, একটি সাইড-প্রজেক্ট রয়েছে, রামদা-ফ্যান্টাসি ফোকটলে যা করে তার অনুরূপ কিছু করে, তবে এটি মূল গ্রন্থাগারের অংশ নয়।