TypeScript ক্লাস, প্রোপার্টি, মেথড এবং প্যারামিটার ডেকোরেটরস

TypeScript এর Decorators এবং Metadata - টাইপস্ক্রিপ্ট (Typescript) - Web Development

242

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

ডেকোরেটরস ব্যবহার করতে আপনার tsconfig.jsonexperimentalDecorators অপশনটি true করতে হবে।


১. ক্লাস ডেকোরেটর (Class Decorators)

ক্লাস ডেকোরেটর হল এমন একটি ফাংশন যা ক্লাস ডেফিনিশনকে কাস্টমাইজ করে। এটি সাধারণত একটি ক্লাসের কন্সট্রাকটর ফাংশনকে টার্গেট করে। ক্লাস ডেকোরেটর একটি ফাংশন গ্রহণ করে এবং সেটি ক্লাসের ইনস্ট্যান্স তৈরি হওয়া পর্যন্ত কার্যকর হয়।

উদাহরণ:

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

@LogClass
class Person {
  constructor(public name: string, public age: number) {}
}

const person = new Person("John", 30);  // আউটপুট: "Class created: Person"

এখানে, @LogClass ডেকোরেটরটি Person ক্লাসের ওপর প্রয়োগ করা হয়েছে। ক্লাসের ইনস্ট্যান্স তৈরি হওয়ার আগে এই ডেকোরেটরটি কন্সট্রাকটরের মাধ্যমে কার্যকর হবে।


২. মেথড ডেকোরেটর (Method Decorators)

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

উদাহরণ:

function LogMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
  const originalMethod = descriptor.value;
  
  descriptor.value = function (...args: any[]) {
    console.log(`Called method ${propertyKey} with arguments: ${args}`);
    return originalMethod.apply(this, args);
  };
}

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

  @LogMethod
  greet(message: string) {
    console.log(`${this.name} says: ${message}`);
  }
}

const person = new Person("Alice");
person.greet("Hello!");  // আউটপুট: "Called method greet with arguments: [ 'Hello!' ]"

এখানে @LogMethod ডেকোরেটরটি greet মেথডের ওপর প্রয়োগ করা হয়েছে। মেথডটি কল করার সময়, এটি প্রথমে মেথডের নাম এবং আর্গুমেন্টগুলি লগ করবে এবং তারপর আসল মেথডটি কার্যকর হবে।


৩. প্রোপার্টি ডেকোরেটর (Property Decorators)

প্রোপার্টি ডেকোরেটর ফাংশনটি একটি ক্লাসের প্রোপার্টি (যেমন: বৈশিষ্ট্য বা ভেরিয়েবল)কে কাস্টমাইজ করে। এটি সাধারণত প্রোপার্টির উপর কিছু অতিরিক্ত আচরণ যোগ করতে ব্যবহৃত হয়।

উদাহরণ:

function LogProperty(target: any, propertyKey: string) {
  let value: string;

  const getter = () => value;
  const setter = (newValue: string) => {
    console.log(`Setting value of ${propertyKey} to ${newValue}`);
    value = newValue;
  };

  Object.defineProperty(target, propertyKey, { get: getter, set: setter });
}

class Person {
  @LogProperty
  public name: string;

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

const person = new Person("John");
person.name = "Alice";  // আউটপুট: "Setting value of name to Alice"

এখানে @LogProperty ডেকোরেটরটি name প্রোপার্টির ওপর প্রয়োগ করা হয়েছে। যখন আপনি name প্রোপার্টির মান পরিবর্তন করবেন, তখন এটি নতুন মান সেট করার আগে লগ করবে।


৪. প্যারামিটার ডেকোরেটর (Parameter Decorators)

প্যারামিটার ডেকোরেটর ব্যবহার করে আপনি একটি মেথডের প্যারামিটারকে কাস্টমাইজ বা অ্যাসাইন করতে পারেন। প্যারামিটার ডেকোরেটর সাধারণত মেথডের প্যারামিটার সহ কোডের আরো লজিক প্রয়োগ করতে ব্যবহৃত হয়।

উদাহরণ:

function LogParameter(target: any, propertyKey: string, parameterIndex: number) {
  const existingMetadata = Reflect.getOwnMetadata("log_parameters", target, propertyKey) || [];
  existingMetadata.push(parameterIndex);
  Reflect.defineMetadata("log_parameters", existingMetadata, target, propertyKey);
}

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

  greet(@LogParameter message: string) {
    console.log(`${this.name} says: ${message}`);
  }
}

const person = new Person("Alice");
person.greet("Hello!");

// Log the metadata
const metadata = Reflect.getOwnMetadata("log_parameters", person, "greet");
console.log(metadata); // প্যারামিটার ইনডেক্সটি দেখাবে

এখানে @LogParameter ডেকোরেটরটি greet মেথডের message প্যারামিটারের ওপর প্রয়োগ করা হয়েছে। এটি প্যারামিটার ইনডেক্সটিকে মেটাডেটা হিসেবে রেকর্ড করে, যাতে আপনি পরে প্যারামিটারগুলির সাথে কাজ করতে পারেন।


ডেকোরেটরসের ব্যবহারিক প্রয়োগ

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

এছাড়া, ডেকোরেটরসকে ব্যবহার করে আপনি ক্লাসের মধ্যে অবজেক্ট স্টেট ম্যানেজমেন্ট, মেথড ট্রেসিং, এবং ডাটা ভ্যালিডেশন সহজেই বাস্তবায়ন করতে পারেন।


সারাংশ

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

Content added By
Promotion

Are you sure to start over?

Loading...