ফাংশন ডেকোরেশন এবং কম্পোজিশন

Underscore.js Best Practices - আন্ডারস্কোর.জেএস (underscorejs) - Web Development

230

ফাংশন ডেকোরেশন (Function Decoration) কি?

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

Underscore.js-এ ফাংশন ডেকোরেশন সাধারণত হায়ার অর্ডার ফাংশন ব্যবহার করে করা হয়, যেখানে একটি ফাংশন অন্য একটি ফাংশনকে আর্গুমেন্ট হিসেবে গ্রহণ করে এবং তার আচরণ পরিবর্তন বা সম্প্রসারণ করে।

ফাংশন ডেকোরেশন উদাহরণ:

ধরা যাক, একটি ফাংশন আছে যা কিছু কাজ করে, এবং আপনি তার আগে বা পরে কিছু অতিরিক্ত কাজ করতে চান।

উদাহরণ:

// মূল ফাংশন
function greet(name) {
  console.log("Hello, " + name);
}

// ডেকোরেটেড ফাংশন
function logBefore(fn) {
  return function(...args) {
    console.log("Before calling function");
    fn(...args);
  };
}

var greetWithLog = logBefore(greet);
greetWithLog("Alice"); // "Before calling function" followed by "Hello, Alice"

এখানে, greet ফাংশনটি মূল কাজটি করছে, এবং logBefore একটি ডেকোরেটর ফাংশন যা মূল ফাংশন কল করার আগে একটি অতিরিক্ত কাজ করছে (লগ মেসেজ প্রিন্ট করা)।


কম্পোজিশন (Composition) কি?

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

Underscore.js-এ ফাংশন কম্পোজিশন খুবই সহজ, এবং এটি হায়ার অর্ডার ফাংশন ব্যবহারের মাধ্যমে কার্যকরভাবে করা যায়।

কম্পোজিশন উদাহরণ:

ধরা যাক, আপনার কাছে তিনটি ফাংশন আছে এবং আপনি তাদের একটি কম্পোজড ফাংশনে একত্রিত করতে চান।

উদাহরণ:

// 1. ফাংশন 1
function double(num) {
  return num * 2;
}

// 2. ফাংশন 2
function addThree(num) {
  return num + 3;
}

// 3. ফাংশন 3
function square(num) {
  return num * num;
}

// কম্পোজিশন ফাংশন
function compose(...fns) {
  return function(value) {
    return fns.reduceRight((acc, fn) => fn(acc), value);
  };
}

// ফাংশন কম্পোজিশন
var composedFunction = compose(square, addThree, double);

console.log(composedFunction(2)); // ((2 * 2) + 3) ^ 2 = 49

এখানে, আমরা তিনটি ফাংশন (double, addThree, square) কম্পোজ করেছি যাতে তাদের আউটপুট পরবর্তী ফাংশনে ইনপুট হিসেবে চলে যায়। compose() ফাংশনটি ডান থেকে বাম দিকে ফাংশনগুলো একত্রিত করে।


Underscore.js এ ফাংশন ডেকোরেশন এবং কম্পোজিশন

Underscore.js ফাংশনাল প্রোগ্রামিংয়ের বিভিন্ন টুল এবং কৌশল প্রদান করে, যা ফাংশন ডেকোরেশন এবং কম্পোজিশনের জন্য উপকারী। _.wrap() এবং _.compose() এই ধরনের কাজের জন্য ব্যবহৃত হতে পারে।

১. _.wrap() – ফাংশন ডেকোরেশন

Underscore.js-এ _.wrap() ফাংশনটি একটি ফাংশনকে অন্য একটি ফাংশনের মধ্যে ডেকোরেট করে, যা মূল ফাংশনটি কল করার আগে বা পরে অতিরিক্ত কাজ করতে পারে।

উদাহরণ:

function greet(name) {
  console.log("Hello, " + name);
}

var greetWithLogging = _.wrap(greet, function(func, name) {
  console.log("Calling greet function...");
  func(name);
});

greetWithLogging("Alice"); 
// Output:
// Calling greet function...
// Hello, Alice

এখানে, _.wrap() ফাংশনটি greet ফাংশনটিকে একটি নতুন ফাংশনে র‍্যাপ করেছে, যা greet ফাংশনটি কল করার আগে একটি লগ মেসেজ প্রিন্ট করছে।

২. _.compose() – ফাংশন কম্পোজিশন

Underscore.js-এ _.compose() ফাংশনটি ফাংশন কম্পোজিশন করতে ব্যবহৃত হয়। এটি একটি নতুন ফাংশন তৈরি করে, যেখানে আপনি একাধিক ফাংশনকে একত্রিত করতে পারেন।

উদাহরণ:

var double = function(num) { return num * 2; };
var addThree = function(num) { return num + 3; };
var square = function(num) { return num * num; };

var composed = _.compose(square, addThree, double);

console.log(composed(2)); // 49

এখানে, _.compose() ফাংশনটি double, addThree, এবং square ফাংশনগুলোকে একত্রিত করে একটি নতুন ফাংশন তৈরি করেছে, যেখানে প্রথমে double(2) হবে, তারপর addThree(4) এবং শেষে square(7)


সারাংশ

ফাংশন ডেকোরেশন এবং ফাংশন কম্পোজিশন হল Functional Programming এর গুরুত্বপূর্ণ কৌশল, যা কোডকে আরও ছোট, পরিষ্কার এবং পুনঃব্যবহারযোগ্য করে তোলে। Underscore.js _.wrap() এবং _.compose() ফাংশনগুলির মাধ্যমে ডেকোরেশন এবং কম্পোজিশন সহজভাবে করতে সহায়তা করে। _.wrap() একটি ফাংশনের আচরণকে পরিবর্তন করে, এবং _.compose() বিভিন্ন ফাংশনকে একত্রিত করে একটি শক্তিশালী নতুন ফাংশন তৈরি করে। Underscore.js ফাংশনাল প্রোগ্রামিংয়ের এই কৌশলগুলির সাহায্যে কোডের কার্যকারিতা এবং পঠনযোগ্যতা বাড়ানো যায়।

Content added By
Promotion

Are you sure to start over?

Loading...