Currying এবং Partial Functions হল ফাংশনাল প্রোগ্রামিং এর দুটি অত্যন্ত গুরুত্বপূর্ণ কৌশল, যা JavaScript কোডের পুনঃব্যবহারযোগ্যতা এবং কার্যকারিতা বৃদ্ধি করতে সাহায্য করে। Lodash এ _.curry() এবং _.partial() ফাংশনগুলি এই কৌশলগুলোর বাস্তবায়ন সহজ করে দেয়। এই ফিচারগুলো ব্যবহারের মাধ্যমে আপনি কোডকে আরও বেশি মডুলার, পরিষ্কার এবং কার্যকরী করতে পারেন।
এই অধ্যায়ে Lodash এর _.curry() এবং _.partial() ফাংশনগুলির গুরুত্ব এবং এগুলোর বাস্তব প্রয়োগ দেখানো হবে।
১. Currying: একটি ফাংশনকে ধাপে ধাপে আর্গুমেন্ট প্রদান করা
Currying হল একটি ফাংশনাল প্রোগ্রামিং কৌশল, যেখানে একটি ফাংশনকে একাধিক আর্গুমেন্টের পরিবর্তে একটির পর একটি আর্গুমেন্ট প্রদান করা হয়। অর্থাৎ, একাধিক আর্গুমেন্ট গ্রহণকারী একটি ফাংশনকে একাধিক ফাংশনে ভাগ করা হয়, যা আর্গুমেন্টগুলো ধাপে ধাপে নেয়। Lodash এর _.curry() ফাংশনটি এই কৌশলটি সহজ করে দেয়।
উদাহরণ:
const _ = require('lodash');
// Currying function with _.curry
const add = _.curry((a, b, c) => a + b + c);
// Partially applied functions
const add5 = add(5); // First argument is fixed
const add5And3 = add5(3); // Second argument is fixed
console.log(add5And3(2)); // Output: 10 (5 + 3 + 2)
ব্যাখ্যা:
- এখানে,
_.curry()ব্যবহার করেadd()ফাংশনটিকে কিউরী করা হয়েছে। প্রথমে, আপনি5এবং3এর জন্য আর্গুমেন্ট দিয়ে দুটি আংশিক ফাংশন তৈরি করেছেন, এবং পরে2আর্গুমেন্ট দিয়ে তাদের যোগফল পেয়েছেন। - এই কৌশলটি আপনার কোডকে আরও মডুলার এবং পুনঃব্যবহারযোগ্য করে তোলে, যেখানে আপনি আর্গুমেন্টগুলো ধাপে ধাপে দিতে পারেন।
Currying এর সুবিধা:
- পুনঃব্যবহারযোগ্য কোড: একই ফাংশন ভিন্ন আর্গুমেন্ট দিয়ে একাধিক জায়গায় ব্যবহার করা যায়।
- ফাংশনাল প্রোগ্রামিংয়ের সুবিধা: ছোট ছোট ফাংশন তৈরি করে বড় সমস্যা সমাধান করা যায়।
২. Partial Functions: আংশিকভাবে ফাংশন অ্যাপ্লিকেশন
Partial Functions হল একটি ফাংশনাল প্রোগ্রামিং কৌশল যেখানে ফাংশনের কিছু আর্গুমেন্ট আগেই নির্ধারণ করা হয় এবং পরবর্তীতে বাকি আর্গুমেন্ট প্রদান করা হয়। Lodash এর _.partial() ফাংশনটি এই কৌশলটির বাস্তবায়ন সহজ করে দেয়।
উদাহরণ:
const _ = require('lodash');
// Partial function
const greet = _.partial((greeting, name) => `${greeting}, ${name}!`, 'Hello');
console.log(greet('John')); // Output: Hello, John!
ব্যাখ্যা:
- এখানে,
_.partial()ব্যবহার করেgreetফাংশনের প্রথম আর্গুমেন্ট হিসেবে'Hello'প্রদান করা হয়েছে, এবং পরবর্তী আর্গুমেন্ট হিসেবে'John'প্রদান করা হয়েছে। - এটি partial application এর একটি ভালো উদাহরণ, যেখানে আপনি একটি ফাংশনকে আংশিকভাবে প্রি-ফিল করতে পারেন এবং পরবর্তী সময়ে আর্গুমেন্টগুলি প্রদান করতে পারেন।
Partial Functions এর সুবিধা:
- কোডকে আরও সংক্ষিপ্ত এবং মডুলার করা: একটি ফাংশনের আর্গুমেন্ট প্রি-ফিল করে, সেই ফাংশনকে পুনঃব্যবহারযোগ্য করা যায়।
- কনফিগারেশন সহ ফাংশন তৈরি করা: যখন একাধিক স্থানে একই আর্গুমেন্ট প্রয়োগ হয়, তখন এই কৌশলটি বিশেষভাবে উপকারী।
৩. Currying এবং Partial Functions এর মধ্যে পার্থক্য
| বৈশিষ্ট্য | Currying | Partial Functions |
|---|---|---|
| প্রক্রিয়া | একাধিক আর্গুমেন্টকে এক এক করে গ্রহণ করা। | কিছু আর্গুমেন্ট আগে থেকেই স্থির করা, এবং পরে বাকী আর্গুমেন্ট দেওয়া হয়। |
| ব্যবহার | ফাংশনটির প্রতিটি আর্গুমেন্ট ধাপে ধাপে প্রদান করা। | আর্গুমেন্টের কিছু অংশ আগেই প্রি-ফিল করা হয়, পরবর্তীতে বাকি আর্গুমেন্ট দেওয়া হয়। |
| উদাহরণ | add(1)(2)(3) | greet('Hello')('John') |
৪. Lodash দিয়ে আরও কার্যকরী ব্যবহার
Lodash এর _.curry() এবং _.partial() ফাংশনগুলির সাহায্যে আপনি আরও অনেক কার্যকরী এবং পুনঃব্যবহারযোগ্য ফাংশন তৈরি করতে পারেন, যেমন:
একটি কমপ্লেক্স ক্যালকুলেশন ফাংশন - Currying ও Partial Functions একত্রে:
const _ = require('lodash');
// Currying with Partial Function
const calculatePrice = _.curry((taxRate, discount, price) => {
return price * (1 + taxRate) * (1 - discount);
});
// Partial functions for specific tax rate and discount
const calculateWithTax = calculatePrice(0.2); // Tax rate 20%
const calculateFinalPrice = calculateWithTax(0.1); // Discount 10%
console.log(calculateFinalPrice(100)); // Output: 120 (100 * 1.2 * 0.9)
এখানে, _.curry() এবং _.partial() একসাথে ব্যবহার করে একটি ক্যালকুলেশন ফাংশন তৈরি করা হয়েছে, যা tax rate এবং discount এর জন্য আংশিকভাবে প্রি-ফিল করা হয়েছে।
উপসংহার
Lodash এর _.curry() এবং _.partial() ফাংশনগুলি functional programming এর শক্তিশালী টুলস, যা আপনার কোডকে আরও মডুলার, পুনঃব্যবহারযোগ্য এবং কার্যকরী করে তোলে। Currying এবং Partial Functions এর মাধ্যমে আপনি ফাংশনগুলিকে ছোট ছোট অংশে ভাগ করতে পারেন এবং জটিল সমস্যাগুলোর সমাধান করতে পারেন। এই কৌশলগুলির মাধ্যমে আপনার কোডের পাঠযোগ্যতা, রিডেবিলিটি এবং কার্যকারিতা অনেক উন্নত হবে।
Read more