ডেকোরেটরস এর ব্যবহার এবং কনফিগারেশন

TypeScript ডেকোরেটরস - টাইপস্ক্রিপ্ট (Typescript) - Web Development

243

ডেকোরেটরস TypeScript এবং ECMAScript-এর একটি শক্তিশালী বৈশিষ্ট্য যা ক্লাস, মেথড, প্রোপার্টি, প্যারামিটার এবং এক্সপ্রেশনদের উপর কাস্টম আচরণ যোগ করতে সাহায্য করে। ডেকোরেটরস মূলত এডভান্সড কনসেপ্ট এবং মেটা-প্রোগ্রামিং এর একটি অংশ, যা ক্লাস এবং তার উপাদানগুলোর আচরণ পরিবর্তন বা প্রসারিত করার জন্য ব্যবহৃত হয়।

TypeScript-এ ডেকোরেটরস ব্যবহার করার জন্য কিছু কনফিগারেশন এবং সেটিংস প্রয়োজন হয়, এবং এগুলো মূলত একটি কোডের মেটা-ডেটা সংযুক্ত করে, যা পরে প্রোগ্রামের আচরণ পরিবর্তন বা প্রসারিত করার জন্য ব্যবহৃত হতে পারে।


১. ডেকোরেটরস কী?

ডেকোরেটরস হল একধরনের ফাংশন যা ক্লাসের প্রপার্টি বা মেথডে বিশেষ কার্যকলাপ যোগ করে। ডেকোরেটরস সাধারণত একটি ক্লাস বা তার উপাদানগুলোর ওপরে আংশিক বা পুরোপুরি পরিবর্তন করতে ব্যবহৃত হয়। উদাহরণস্বরূপ, মেথড বা প্রপার্টির জন্য লোকালাইজেশন, লগিং, অথেন্টিকেশন, বা ভ্যালিডেশন যোগ করা হতে পারে।


২. ডেকোরেটরস এর ধরন

TypeScript-এ ডেকোরেটরস কয়েকটি ধরণের হতে পারে। মূলত, ডেকোরেটরস ব্যবহার করা হয়:

  • ক্লাস ডেকোরেটর (Class Decorators)
  • প্রপার্টি ডেকোরেটর (Property Decorators)
  • মেথড ডেকোরেটর (Method Decorators)
  • প্যারামিটার ডেকোরেটর (Parameter Decorators)

এখানে প্রতিটি ধরন বিস্তারিতভাবে আলোচনা করা হয়েছে:


৩. ক্লাস ডেকোরেটর

ক্লাস ডেকোরেটর একটি ফাংশন, যা ক্লাস ডিফিনিশনের উপরে ব্যবহৃত হয়। এটি ক্লাসের এক্সটেনশন বা আচরণ পরিবর্তন করার জন্য ব্যবহৃত হয়।

উদাহরণ:

function logClass(target: any) {
  console.log(`Class ${target.name} created.`);
}

@logClass
class Person {
  constructor(public name: string) {}
}

const person = new Person('John');  // এটি "Class Person created." মুদ্রণ করবে।

এখানে @logClass একটি ক্লাস ডেকোরেটর যা Person ক্লাসের ইনস্ট্যান্স তৈরি হওয়ার সময় একটি মেসেজ লগ করবে।


৪. প্রপার্টি ডেকোরেটর

প্রপার্টি ডেকোরেটর কোনো প্রপার্টি অথবা ফিল্ডের উপর কাজ করে। এটি ফিল্ডের জন্য কাস্টম আচরণ যোগ করতে পারে। সাধারণত প্রপার্টি ডেকোরেটর একটি ফাংশন যা প্রপার্টি এবং তার ক্লাস কনটেক্সট প্যারামিটার হিসেবে গ্রহণ করে।

উদাহরণ:

function logProperty(target: any, propertyKey: string) {
  let value = target[propertyKey];
  
  const getter = () => {
    console.log(`Getting value of ${propertyKey}: ${value}`);
    return value;
  };
  
  const setter = (newValue: any) => {
    console.log(`Setting value of ${propertyKey}: ${newValue}`);
    value = newValue;
  };
  
  Object.defineProperty(target, propertyKey, {
    get: getter,
    set: setter,
  });
}

class Person {
  @logProperty
  name: string;

  constructor(name: string) {
    this.name = name;
  }
}

const person = new Person('John');
person.name = 'Alice';    // এটি "Setting value of name: Alice" মুদ্রণ করবে।
console.log(person.name);  // এটি "Getting value of name: Alice" মুদ্রণ করবে।

এখানে @logProperty একটি প্রপার্টি ডেকোরেটর যা প্রপার্টি সেট এবং গেট করার সময় কাস্টম লগিং ফাংশন প্রয়োগ করে।


৫. মেথড ডেকোরেটর

মেথড ডেকোরেটর একটি ফাংশন যা ক্লাসের মেথডে কাস্টম আচরণ যোগ করতে ব্যবহৃত হয়। এটি সাধারণত মেথডের ইনপুট এবং আউটপুট পরিবর্তন করতে পারে।

উদাহরণ:

function logMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  
  descriptor.value = function(...args: any[]) {
    console.log(`Calling ${propertyKey} with arguments: ${JSON.stringify(args)}`);
    const result = originalMethod.apply(this, args);
    console.log(`Result of ${propertyKey}: ${result}`);
    return result;
  };
  
  return descriptor;
}

class Calculator {
  @logMethod
  add(a: number, b: number): number {
    return a + b;
  }
}

const calc = new Calculator();
calc.add(2, 3);  // এটি "Calling add with arguments: [2, 3]" এবং "Result of add: 5" মুদ্রণ করবে।

এখানে @logMethod একটি মেথড ডেকোরেটর যা add মেথডের ইনপুট এবং আউটপুট লগ করবে।


৬. প্যারামিটার ডেকোরেটর

প্যারামিটার ডেকোরেটর একটি ফাংশনের প্যারামিটারগুলির উপর কাজ করে। এটি মূলত একটি নির্দিষ্ট প্যারামিটার নিয়ে কাজ করে এবং তার কাস্টম আচরণ সেট করতে সাহায্য করে।

উদাহরণ:

function logParameter(target: any, propertyKey: string, parameterIndex: number) {
  console.log(`Parameter at index ${parameterIndex} in method ${propertyKey} is being logged.`);
}

class User {
  greet(@logParameter message: string): void {
    console.log(message);
  }
}

const user = new User();
user.greet('Hello');  // এটি "Parameter at index 0 in method greet is being logged." মুদ্রণ করবে।

এখানে @logParameter একটি প্যারামিটার ডেকোরেটর যা greet মেথডের প্যারামিটার লগ করবে।


৭. ডেকোরেটরস ব্যবহার করার কনফিগারেশন

ডেকোরেটরস ব্যবহারের জন্য TypeScript-এ একটি কনফিগারেশন সেটিং পরিবর্তন করতে হয়। tsconfig.json ফাইলে experimentalDecorators অপশনটি true করতে হবে।

{
  "compilerOptions": {
    "experimentalDecorators": true,
    "target": "es6"
  }
}

এটি ডেকোরেটরস ব্যবহারের জন্য TypeScript কম্পাইলারকে সক্ষম করবে।


সারাংশ

ডেকোরেটরস TypeScript-এ একটি শক্তিশালী টুল যা কোডের বিভিন্ন অংশে কাস্টম আচরণ যোগ করার জন্য ব্যবহৃত হয়। এটি কোডের রক্ষণাবেক্ষণ, পুনঃব্যবহারযোগ্যতা, এবং পাঠযোগ্যতা উন্নত করে। তবে, ডেকোরেটরস ব্যবহারের জন্য আপনাকে experimentalDecorators কনফিগারেশন সক্রিয় করতে হবে, যা TypeScript-এ ডেকোরেটরের বৈশিষ্ট্য সক্ষম করবে।

Content added By
Promotion

Are you sure to start over?

Loading...