Q33. What is function composition?
ছোট ছোট ফাংশন জোড়া লাগিয়ে বড় ফাংশন বানানো, pipe ও compose-এর কাজ।
Function composition মানে ছোট ছোট ফাংশনকে একটার ফলাফল আরেকটার ইনপুট হিসেবে দিয়ে জোড়া লাগানো, যাতে সব মিলিয়ে একটি বড় ফাংশনের মতো আচরণ করে। প্রতিটি ফাংশন একটিমাত্র কাজ করে, কিন্তু জোড়া লাগলে জটিল লজিক হয়ে ওঠে।
const add = (n) => n + 1;
const double = (n) => n * 2;
const square = (n) => n * n;
// তিনটা মিলিয়ে একটা ফাংশন
const complex = (n) => square(double(add(n)));
console.log(complex(3)); // 64 — কারণ 3 -> 4 -> 8 -> 64ধাপে ধাপে — ইনপুট 3 আগে add-এ ঢোকে, ফল 4। সেই 4 double-এ গিয়ে 8 হয়, আর সেই 8 square-এ গিয়ে 64 হয়। তাই উত্তর 64।
এই জোড়া লাগানোর জন্য বিশেষ helper ফাংশন লেখা হয়, যার নাম pipe।
// pipe — বাম থেকে ডানে কাজ করে
const pipe = (...fns) => (value) =>
fns.reduce((acc, fn) => fn(acc), value);
const process = pipe(
(n) => n + 1, // 3 -> 4
(n) => n * 2, // 4 -> 8
(n) => n * n // 8 -> 64
);
console.log(process(3)); // 64pipe কীভাবে কাজ করে তা ধাপে ধাপে দেখি — প্রথমে শুরু মান value নেওয়া হয়। তারপর reduce প্রতিটি ফাংশনের ফলাফল পরের ফাংশনের ইনপুট বানায়, যতক্ষণ না সব ফাংশন শেষ হয় এবং চূড়ান্ত ফলত্র ফেরত হয়।
// compose — ডান থেকে বামে কাজ করে
const compose = (...fns) => (value) =>
fns.reduceRight((acc, fn) => fn(acc), value);
const process = compose(
(n) => n * n, // 8 -> 64
(n) => n * 2, // 4 -> 8
(n) => n + 1 // 3 -> 4
);
console.log(process(3)); // 64// বাস্তব উদাহরণ — ডেটা বিশুদ্ধ করা
const trim = (s) => s.trim();
const toLower = (s) => s.toLowerCase();
const addBang = (s) => s + "!";
const clean = pipe(trim, toLower, addBang);
console.log(clean(" HELLO ")); // "hello!"// pipeline বানানোর pattern
const validator = (schema) => (data) => {
const errors = {};
for (const key in schema) {
if (!schema[key](data[key])) {
errors[key] = "ভুল মান";
}
}
return { valid: Object.keys(errors).length === 0, errors };
};
const rules = validator({
name: (v) => typeof v === "string" && v.length > 0,
age: (v) => typeof v === "number" && v > 0,
});
console.log(rules({ name: "Rahim", age: 25 }));| বিষয় | pipe | compose |
|---|---|---|
| দিক | বাম থেকে ডানে | ডান থেকে বামে |
| প্রথম কাজ করে | উপরের ফাংশন | নিচের ফাংশন |
| পড়তে সহজ | বেশি | কম |
| সাধারণ ব্যবহার | ডেটা প্রসেসিং | ফাংশন তৈরি |
Composition ভালো কাজ করে যখন প্রতিটি ফাংশন একটিমাত্র কাজ করে এবং বাইরের কোনো অবস্থার উপর নির্ভর করে না। তাহলে ছোট ছোট ফাংশন জোড়া লাগিয়ে বড় ও পরীক্ষা করা সহজ লজিক তৈরি হয়।