TypeScript এ ডেকোরেটরস একটি বিশেষ ধরনের ফাংশন যা ক্লাস, মেথড, প্রপার্টি বা প্যারামিটারকে কাস্টমাইজ বা এডিট করতে ব্যবহৃত হয়। ডেকোরেটরস মূলত মেটা-প্রোগ্রামিং টুল হিসেবে কাজ করে এবং এটি ক্লাস বা মেথডে অতিরিক্ত আচরণ বা বৈশিষ্ট্য যোগ করতে ব্যবহৃত হয়।
TypeScript এ ডেকোরেটরস ব্যবহার করতে হলে আপনাকে অবশ্যই experimentalDecorators অপশনটি tsconfig.json ফাইলে true করতে হবে। ডেকোরেটরস শুধুমাত্র TypeScript বা ESNext এর ক্ষেত্রে সাপোর্টেড।
১. ডেকোরেটরস কী?
ডেকোরেটরস এমন একটি ফাংশন যা একটি লক্ষ্য (target) গ্রহণ করে এবং তাকে পরিবর্তন বা সংশোধন করে। এই লক্ষ্য হতে পারে:
- ক্লাস
- মেথড
- প্রপার্টি
- প্যারামিটার
ডেকোরেটরস ব্যবহার করে আপনি এই লক্ষ্যগুলিতে অতিরিক্ত বৈশিষ্ট্য বা আচরণ যোগ করতে পারেন।
২. ডেকোরেটরসের ধরন
ডেকোরেটরসের প্রধান ধরনের মধ্যে রয়েছে:
- ক্লাস ডেকোরেটর
- মেথড ডেকোরেটর
- প্রপার্টি ডেকোরেটর
- প্যারামিটার ডেকোরেটর
৩. ক্লাস ডেকোরেটর (Class Decorators)
ক্লাস ডেকোরেটরটি একটি ক্লাসের উপর কাজ করে এবং সাধারণত ক্লাসের কন্সট্রাকটর ফাংশনকে পরিবর্তন বা প্রসারিত করে।
উদাহরণ:
function LogClass(target: Function) {
console.log(`Class ${target.name} has been created.`);
}
@LogClass
class Person {
constructor(public name: string, public age: number) {}
}
const person = new Person("Alice", 30);
এখানে @LogClass ডেকোরেটরটি Person ক্লাসের উপর প্রয়োগ করা হয়েছে। ক্লাস তৈরি হলে এটি কন্সট্রাকটরের মাধ্যমে লগ করবে।
আলোচনা:
@LogClassহল একটি ক্লাস ডেকোরেটর যাtargetহিসেবে ফাংশন প্যারামিটার গ্রহণ করে।- যখন আপনি
@LogClassব্যবহার করেন, তখন TypeScript এটিPersonক্লাসের কন্সট্রাকটর ফাংশনকে পাস করবে।
৪. মেথড ডেকোরেটর (Method Decorators)
মেথড ডেকোরেটর একটি ক্লাসের মেথডের উপর কাজ করে এবং মেথডের আচরণ পরিবর্তন করতে ব্যবহৃত হয়।
উদাহরণ:
function LogMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Called ${propertyKey} with arguments: ${args}`);
return originalMethod.apply(this, args);
};
}
class Person {
constructor(public name: string, public age: number) {}
@LogMethod
greet(message: string) {
console.log(`${this.name} says: ${message}`);
}
}
const person = new Person("Alice", 30);
person.greet("Hello"); // লগ করবে মেথড কলের তথ্য
এখানে @LogMethod ডেকোরেটরটি greet মেথডের উপরে প্রয়োগ করা হয়েছে। মেথডটি কল করার সময় ডেকোরেটরটি সেই মেথডের আর্গুমেন্ট এবং তার রিটার্ন ভ্যালু লগ করবে।
আলোচনা:
target: ক্লাসের প্রোটোটাইপ বা কন্সট্রাকটর ফাংশন।propertyKey: মেথড বা প্রপার্টির নাম।descriptor: মেথডের ডেসক্রিপ্টর যা মেথডের আচরণ পরিচালনা করে।
৫. প্রপার্টি ডেকোরেটর (Property Decorators)
প্রপার্টি ডেকোরেটরগুলি প্রপার্টি অথবা ফিল্ডের উপর কাজ করে, তবে এটি সাধারণত ক্লাসের প্রপার্টির পরিবর্তে কোন অতিরিক্ত কাজ বা বৈশিষ্ট্য যোগ করতে ব্যবহৃত হয়।
উদাহরণ:
function ReadOnly(target: any, propertyKey: string) {
const descriptor: PropertyDescriptor = {
writable: false
};
Object.defineProperty(target, propertyKey, descriptor);
}
class Person {
@ReadOnly
name: string;
constructor(name: string) {
this.name = name;
}
}
const person = new Person("Alice");
console.log(person.name); // "Alice"
person.name = "Bob"; // এর পরেও এই প্রপার্টি পরিবর্তন হবে না
console.log(person.name); // "Alice"
এখানে @ReadOnly ডেকোরেটরটি name প্রপার্টির উপরে প্রয়োগ করা হয়েছে, যাতে সেই প্রপার্টি আর পরিবর্তনযোগ্য না হয়।
আলোচনা:
target: প্রপার্টির মালিকানাধীন ক্লাস।propertyKey: প্রপার্টির নাম।
৬. প্যারামিটার ডেকোরেটর (Parameter Decorators)
প্যারামিটার ডেকোরেটর প্যারামিটারগুলির উপর কাজ করে এবং কিভাবে প্যারামিটারটি ব্যবহৃত হবে তা নির্ধারণ করে। এটি সাধারণত মেথডের প্যারামিটার গুলি কাস্টমাইজ করার জন্য ব্যবহৃত হয়।
উদাহরণ:
function LogParameter(target: any, propertyKey: string, parameterIndex: number) {
console.log(`Method ${propertyKey} parameter at index ${parameterIndex} has been decorated.`);
}
class Person {
greet(@LogParameter message: string) {
console.log(message);
}
}
const person = new Person();
person.greet("Hello");
এখানে @LogParameter ডেকোরেটরটি greet মেথডের প্যারামিটার message এর উপর প্রয়োগ করা হয়েছে। এটি সেই প্যারামিটারকে লগ করবে।
আলোচনা:
target: মেথড বা কন্সট্রাকটরের প্রোটোটাইপ।propertyKey: মেথড বা প্রপার্টির নাম।parameterIndex: প্যারামিটারটির ইনডেক্স।
৭. ডেকোরেটরস ব্যবহার করার কিছু গুরুত্বপূর্ণ বিষয়
experimentalDecorators: ডেকোরেটরস ব্যবহারের জন্যtsconfig.jsonএexperimentalDecoratorsঅপশনটিtrueহতে হবে।- ডেকোরেটর অর্ডার: ডেকোরেটরগুলো প্রযোজ্য হবে যেভাবে আপনি সেগুলো কোডে লিখেছেন।
- অপেক্ষিত আচরণ: ডেকোরেটরটি ব্যবহারের সময় কোনও নির্দিষ্ট আচরণ তৈরির জন্য কাস্টম লগিক ব্যবহার করা যেতে পারে।
ডেকোরেটরস TypeScript এ কোডের শক্তিশালী কাস্টমাইজেশন ক্ষমতা প্রদান করে এবং কোডকে আরও পরিষ্কার ও পুনঃব্যবহারযোগ্য করতে সহায়তা করে।
Read more