টাইপস্ক্রিপ্ট ক্লাস
এই গাইডে টাইপস্ক্রিপ্টের ক্লাস সিস্টেমের প্রতিটি গুরুত্বপূর্ণ কনসেপ্ট বাংলা ভাষায় ব্যাখ্যা, ব্যবহার ও কোড উদাহরণসহ তুলে ধরা হয়েছে।
১. ক্লাস ডিফিনিশন (Class Definitions)
ব্যাখ্যা: ক্লাস হচ্ছে অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের একটি মূল ভিত্তি, যার মাধ্যমে এমন অবজেক্ট তৈরি করা যায় যেগুলোর মধ্যে তথ্য (properties) এবং আচরণ (methods) থাকে।
কোথায় ব্যবহৃত হয়: যখন আমরা কোনো কিছুর ব্লুপ্রিন্ট তৈরি করতে চাই যেমনঃ ইউজার, প্রোডাক্ট, গাড়ি ইত্যাদি।
class User {
name: string;
age: number;
constructor(name: string, age: number) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name}`);
}
}
২. কনস্ট্রাক্টর (Constructors)
ব্যাখ্যা: কনস্ট্রাক্টর একটি বিশেষ মেথড যেটি ক্লাস থেকে অবজেক্ট তৈরি হওয়ার সময় অটোমেটিক কল হয়।
কোথায় ব্যবহৃত হয়: অবজেক্ট তৈরির সময় প্রাথমিক মান সেট করার জন্য।
class Product {
constructor(public name: string, public price: number) {}
}
const pen = new Product("Pen", 10);
৩. অ্যাক্সেস মোডিফায়ার (Access Modifiers)
ব্যাখ্যা: অ্যাক্সেস মোডিফায়ার দ্বারা কোনো প্রপার্টি বা মেথড কোথা থেকে অ্যাক্সেসযোগ্য তা নির্ধারণ করা হয়।
public
: যেকোনো জায়গা থেকে ব্যবহারযোগ্য (ডিফল্ট)private
: শুধুমাত্র ক্লাসের ভেতরে ব্যবহারযোগ্যprotected
: ক্লাস এবং তার সাবক্লাসের মধ্যে ব্যবহারযোগ্য
কোথায় ব্যবহৃত হয়: ডেটা এনক্যাপসুলেশন এবং নিরাপত্তা বজায় রাখতে।
class BankAccount {
private balance: number;
constructor(initialBalance: number) {
this.balance = initialBalance;
}
public deposit(amount: number) {
this.balance += amount;
}
public getBalance() {
return this.balance;
}
}
৪. রিড-অনলি প্রপার্টি (Readonly Properties)
ব্যাখ্যা: রিড-অনলি প্রপার্টি একবার সেট করার পর আর পরিবর্তন করা যায় না।
কোথায় ব্যবহৃত হয়: যখন কোন প্রপার্টি অপরিবর্তনীয় (immutable) রাখা প্রয়োজন।
class Book {
readonly isbn: string;
constructor(isbn: string) {
this.isbn = isbn;
}
}
৫. অপশনাল প্রপার্টি (Optional Properties)
ব্যাখ্যা: অপশনাল প্রপার্টি এমন একটি প্রপার্টি যেটা দেওয়া না দিলেও চলে (?
দিয়ে চিহ্নিত)।
কোথায় ব্যবহৃত হয়: যখন কোনো ডেটা ঐচ্ছিক হতে পারে।
class User {
constructor(
public name: string,
public age?: number // ঐচ্ছিক
) {}
}
const u1 = new User("John");
৬. প্যারামিটার প্রপার্টি (Parameter Properties)
ব্যাখ্যা: কনস্ট্রাক্টরের মধ্যে যে প্যারামিটারগুলোতে public/private/protected
ব্যবহৃত হয়, সেগুলো অটোমেটিক ক্লাসের প্রপার্টি হয়ে যায়।
কোথায় ব্যবহৃত হয়: কোড সংক্ষিপ্ত ও পরিচ্ছন্ন রাখতে।
class Car {
constructor(public brand: string, public model: string) {}
}
৭. গেটার এবং সেটার (Getter and Setter)
ব্যাখ্যা: কোনো প্রপার্টির মান পড়া বা সেট করার সময় গেটার ও সেটার মেথড ব্যবহার করা হয়।
কোথায় ব্যবহৃত হয়: ডেটা এক্সেসের উপরে নিয়ন্ত্রণ রাখার জন্য।
class Person {
private _age: number = 0;
get age() {
return this._age;
}
set age(value: number) {
if (value >= 0) {
this._age = value;
}
}
}
৮. স্ট্যাটিক সদস্য (Static Members)
ব্যাখ্যা: স্ট্যাটিক প্রপার্টি বা মেথড ক্লাসে থাকে এবং অবজেক্ট ছাড়াও ক্লাস থেকেই অ্যাক্সেস করা যায়।
কোথায় ব্যবহৃত হয়: শেয়ার করা ডেটা বা ইউটিলিটি মেথড সংরক্ষণ করতে।
class MathUtil {
static PI = 3.14;
static square(n: number) {
return n * n;
}
}
console.log(MathUtil.PI);
console.log(MathUtil.square(5));
৯. অ্যাবস্ট্রাক্ট ক্লাস এবং মেথড (Abstract Classes and Methods)
ব্যাখ্যা: অ্যাবস্ট্রাক্ট ক্লাস এমন একটি ক্লাস যা থেকে সরাসরি অবজেক্ট তৈরি করা যায় না। এর ভিতরের অ্যাবস্ট্রাক্ট মেথডগুলোর ইমপ্লিমেন্টেশন অবশ্যই সাবক্লাসে দিতে হবে।
কোথায় ব্যবহৃত হয়: এমন বেস ক্লাস বানাতে যেখানে কমন স্ট্রাকচার থাকবে কিন্তু ইমপ্লিমেন্টেশন আলাদা হবে।
abstract class Animal {
constructor(public name: string) {}
abstract makeSound(): void;
}
class Dog extends Animal {
makeSound() {
console.log("ঘেউ ঘেউ!");
}
}
const d = new Dog("Tommy");
d.makeSound();
১০. ইনহেরিটেন্স (Inheritance)
ব্যাখ্যা: ইনহেরিটেন্সের মাধ্যমে এক ক্লাস আরেক ক্লাসের প্রপার্টি ও মেথড নিজের মধ্যে গ্রহণ করতে পারে।
কোথায় ব্যবহৃত হয়: যখন কিছু কমন বৈশিষ্ট্য একাধিক ক্লাসে দরকার হয়।
class Vehicle {
constructor(public brand: string) {}
move() {
console.log("গাড়ি চলছে...");
}
}
class Bike extends Vehicle {
ringBell() {
console.log("টিন টিন!");
}
}
const b = new Bike("Yamaha");
b.move();
b.ringBell();
১১. this
, super
, এবং instanceof
🔹 this
ব্যাখ্যা: this
হচ্ছে সেই অবজেক্ট যার কনটেক্সটে কোনো ফাংশন কল হচ্ছে। ক্লাসের ভিতরে this
মানে হলো ঐ ক্লাসের অবজেক্ট।
class Player {
name: string;
constructor(name: string) {
this.name = name;
}
greet() {
console.log(`Hi, I am ${this.name}`);
}
}
🔹 super
ব্যাখ্যা: super
হচ্ছে parent (base) ক্লাসকে নির্দেশ করে। সাবক্লাসের ভেতরে super()
দিয়ে parent constructor কল করা যায়, আর super.method()
দিয়ে parent এর মেথড এক্সেস করা যায়।
class Animal {
constructor(public name: string) {}
move() {
console.log("চলছে...");
}
}
class Cat extends Animal {
constructor(name: string) {
super(name);
}
move() {
super.move();
console.log("নরম পায়ে হাঁটছে...");
}
}
🔹 instanceof
ব্যাখ্যা: instanceof
অপারেটর দিয়ে চেক করা যায় কোনো অবজেক্ট কোনো নির্দিষ্ট ক্লাসের ইনস্ট্যান্স কিনা।
class Animal {}
class Dog extends Animal {}
const d = new Dog();
console.log(d instanceof Dog); // true
console.log(d instanceof Animal); // true
১২. ইন্টারফেস বনাম ক্লাস (Interface vs Class)
ব্যাখ্যা:
interface
শুধুমাত্র structure define করে — কোনো বাস্তব ইমপ্লিমেন্টেশন রাখে না।class
structure + behavior (ইমপ্লিমেন্টেশন) দুইটাই দেয়।
কোথায় ব্যবহৃত হয়:
interface
: type checking ও contracts এর জন্য।class
: বাস্তব object তৈরি করার জন্য।
interface Printable {
print(): void;
}
class Invoice implements Printable {
print() {
console.log("Invoice printed");
}
}
১৩. মিক্সিন (Mixins)
ব্যাখ্যা: মিক্সিন হলো এমন একটা প্যাটার্ন যা দিয়ে একাধিক class এর behavior একত্রে মিশিয়ে ব্যবহার করা যায়।
কোথায় ব্যবহৃত হয়: অনেকগুলো আলাদা ফিচার একাধিক ক্লাসে শেয়ার করতে চাইলে।
type Constructor<T = {}> = new (...args: any[]) => T;
function Jumpable<TBase extends Constructor>(Base: TBase) {
return class extends Base {
jump() {
console.log("আমি লাফ দিচ্ছি!");
}
};
}
class Person {
name = "রাহাত";
}
const JumpingPerson = Jumpable(Person);
const jp = new JumpingPerson();
jp.jump();
১৪. ডেকোরেটর (Decorators)
ব্যাখ্যা: ডেকোরেটর হলো একধরনের ফাংশন যা ক্লাস, মেথড বা প্রপার্টিকে সাজানোর জন্য ব্যবহার হয়। এগুলো compile-time এ কাজ করে।
কোথায় ব্যবহৃত হয়: ক্লাসকে অ্যাডিশনাল ফিচার দেওয়ার জন্য — যেমন লগিং, অথেনটিকেশন, ক্যাশিং ইত্যাদি।
নোট:
experimentalDecorators
টাইপস্ক্রিপ্ট কনফিগেtrue
করে নিতে হয়।
function Logger(constructor: Function) {
console.log("Logging class:", constructor.name);
}
@Logger
class Cat {
constructor() {
console.log("একটা বিড়াল তৈরি হলো");
}
}
এই গাইডটি এখন TypeScript ক্লাস সম্পর্কিত প্রায় সবকিছু কভার করে ফেলেছে। তোমার যদি আরও কোনো টপিক দরকার হয় — জানিও, সাথে সাথে যোগ করে দেব। 💡