জাভাস্ক্রিপ্টে class একটি ব্লুপ্রিন্ট বা টেমপ্লেট হিসেবে কাজ করে, যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি ES6 (ECMAScript 2015) থেকে পরিচিত হয়েছে এবং প্রোটোটাইপ-ভিত্তিক অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণাকে ক্লাস-ভিত্তিক শৈলীতে রূপান্তর করে। class এর মাধ্যমে কোড আরও পাঠযোগ্য, রক্ষণাবেক্ষণযোগ্য এবং সংগঠিত হয়।
ক্লাস ডিফাইন করতে class কীওয়ার্ড ব্যবহার করা হয়। একটি ক্লাসের মধ্যে কনস্ট্রাক্টর (constructor) এবং মেথডস (methods) থাকতে পারে।
class Person {
// কনস্ট্রাক্টর
constructor(name, age) {
this.name = name;
this.age = age;
}
// মেথড
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const person1 = new Person("Alice", 25);
person1.greet(); // আউটপুট: Hello, my name is Alice and I am 25 years old.
এখানে, Person একটি ক্লাস যা name এবং age প্রপার্টি গ্রহণ করে এবং একটি greet মেথড সংজ্ঞায়িত করে।
ক্লাসের মধ্যে constructor একটি বিশেষ মেথড যা নতুন অবজেক্ট তৈরি করার সময় স্বয়ংক্রিয়ভাবে কল হয়। এটি সাধারণত ক্লাসের প্রপার্টি বা ফিল্ড ইনিশিয়ালাইজ করতে ব্যবহৃত হয়।
class Car {
constructor(make, model) {
this.make = make;
this.model = model;
}
displayInfo() {
console.log(`Car make: ${this.make}, model: ${this.model}`);
}
}
const car1 = new Car("Toyota", "Corolla");
car1.displayInfo(); // আউটপুট: Car make: Toyota, model: Corolla
এখানে, constructor মেথডটি ক্লাসের অবজেক্ট তৈরি করার সময় make এবং model প্রপার্টি ইনিশিয়ালাইজ করছে।
জাভাস্ক্রিপ্টে ক্লাসের মধ্যে ইনহেরিটেন্স (Inheritance) সুবিধা রয়েছে, যার মাধ্যমে একটি ক্লাস অন্য ক্লাসের প্রপার্টি ও মেথড উত্তরাধিকারসূত্রে পেতে পারে। এটি extends কীওয়ার্ডের মাধ্যমে করা হয়।
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // প্যারেন্ট ক্লাসের কনস্ট্রাক্টর কল
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
}
}
const dog1 = new Dog("Buddy", "Golden Retriever");
dog1.speak(); // আউটপুট: Buddy barks.
এখানে, Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে এবং speak মেথডটি ওভাররাইড করেছে।
ক্লাসের স্ট্যাটিক মেথড একটি বিশেষ ধরনের মেথড যা ক্লাসের ইনস্ট্যান্স (অবজেক্ট) থেকে নয়, সরাসরি ক্লাস থেকে কল করা হয়। এটি সাধারণত ক্লাস-ভিত্তিক কাজ বা সহায়ক ফাংশন হিসেবে ব্যবহৃত হয়।
class MathOperations {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathOperations.add(3, 4)); // আউটপুট: 7
console.log(MathOperations.multiply(3, 4)); // আউটপুট: 12
এখানে, add এবং multiply দুটি স্ট্যাটিক মেথড ক্লাস থেকেই কল করা হয়েছে, কোনো ইনস্ট্যান্স তৈরি না করেই।
জাভাস্ক্রিপ্ট ES2022-এ ক্লাসে প্রাইভেট প্রপার্টি ও মেথড সমর্থন করেছে, যার মাধ্যমে ক্লাসের ভিতরে প্রপার্টি বা মেথড শুধু সেই ক্লাস থেকেই অ্যাক্সেস করা যায়, বাইরের কোনো কোড থেকে নয়। এটি # চিহ্ন দিয়ে নির্ধারণ করা হয়।
class Person {
#name; // প্রাইভেট প্রপার্টি
constructor(name, age) {
this.#name = name; // প্রাইভেট প্রপার্টি অ্যাসাইন
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.#name} and I am ${this.age} years old.`);
}
}
const person1 = new Person("Alice", 25);
person1.greet(); // আউটপুট: Hello, my name is Alice and I am 25 years old.
console.log(person1.#name); // Error: Private field '#name' must be declared in an enclosing class
এখানে, #name একটি প্রাইভেট প্রপার্টি, যা শুধুমাত্র Person ক্লাসের ভিতরে অ্যাক্সেস করা যাবে।
গেটার এবং সেটার মেথডের মাধ্যমে ক্লাসের প্রপার্টি অ্যাক্সেস এবং পরিবর্তন করা সহজ হয়, এবং প্রপার্টির মান নিয়ন্ত্রণ করা যায়।
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
// গেটার
get area() {
return this.width * this.height;
}
// সেটার
set area(value) {
this.height = value / this.width;
}
}
const rect = new Rectangle(10, 5);
console.log(rect.area); // আউটপুট: 50
rect.area = 100;
console.log(rect.height); // আউটপুট: 10
এখানে, area গেটার মেথডটি রেক্টেঙ্গলের ক্ষেত্রফল রিটার্ন করে এবং সেটার মেথডটি ক্ষেত্রফল পরিবর্তন করলে উচ্চতা আপডেট করে।
ক্লাস ডিক্লারেশন ছাড়াও, জাভাস্ক্রিপ্টে ক্লাস এক্সপ্রেশন ব্যবহার করে ক্লাস ডিফাইন করা যায়। এটি ফাংশন এক্সপ্রেশন এর মতোই।
const Car = class {
constructor(make, model) {
this.make = make;
this.model = model;
}
displayInfo() {
console.log(`Car make: ${this.make}, model: ${this.model}`);
}
};
const car1 = new Car("Honda", "Civic");
car1.displayInfo(); // আউটপুট: Car make: Honda, model: Civic
জাভাস্ক্রিপ্টে ক্লাস ব্যবহার করা ফাংশন-ভিত্তিক পদ্ধতির তুলনায় আরো পরিষ্কার এবং সংগঠিত কোড লেখার সুযোগ দেয়। তবে, ক্লাস আসলে জাভাস্ক্রিপ্টের প্রোটোটাইপ ভিত্তিক মডেলের উপর ভিত্তি করে তৈরি, তাই কার্যকরভাবে তারা একইভাবে কাজ করে।
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
const person1 = new Person("Bob", 30);
person1.greet(); // আউটপুট: Hello, my name is Bob and I am 30 years old.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const person1 = new Person("Bob", 30);
person1.greet(); // আউটপুট: Hello, my name is Bob and I am 30 years old.
দেখা যাচ্ছে, ক্লাস ভিত্তিক কোড আরও পরিষ্কার এবং সংগঠিত।
জাভাস্ক্রিপ্টের ক্লাস একটি শক্তিশালী বৈশিষ্ট্য যা অবজেক্ট ও শ্রেণিভিত্তিক প্রোগ্রামিং ধারণা সমর্থন করে। এটি প্রোটোটাইপ-ভিত্তিক জাভাস্ক্রিপ্টের জন্য একটি সংগঠিত উপায় সরবরাহ করে। ক্লাসে কনস্ট্রাক্টর, মেথড, ইনহেরিটেন্স, স্ট্যাটিক মেথড, প্রাইভেট প্রপার্টি ও মেথডের মতো বৈশিষ্ট্য রয়েছে, যা কোডকে আরো সুশৃঙ্খল ও পাঠযোগ্য করে তোলে। ক্লাস ব্যবহার করে বড় এবং জটিল প্রজেক্টগুলির কোড রক্ষণাবেক্ষণ সহজ হয় এবং ডেভেলপারদের জন্য কোডের কাঠামো বোঝা সহজ হয়।
ক্লাস সম্পর্কে গভীর জ্ঞান অর্জন করলে আপনার জাভাস্ক্রিপ্ট প্রোগ্রামিং দক্ষতাও বৃদ্ধি পাবে, যা আরও উন্নত এবং কার্যকরী কোড লেখার ক্ষেত্রে সহায়ক হবে।
জাভাস্ক্রিপ্টে class একটি ব্লুপ্রিন্ট বা টেমপ্লেট হিসেবে কাজ করে, যা অবজেক্ট তৈরি করার জন্য ব্যবহৃত হয়। এটি ES6 (ECMAScript 2015) থেকে পরিচিত হয়েছে এবং প্রোটোটাইপ-ভিত্তিক অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং (OOP) ধারণাকে ক্লাস-ভিত্তিক শৈলীতে রূপান্তর করে। class এর মাধ্যমে কোড আরও পাঠযোগ্য, রক্ষণাবেক্ষণযোগ্য এবং সংগঠিত হয়।
ক্লাস ডিফাইন করতে class কীওয়ার্ড ব্যবহার করা হয়। একটি ক্লাসের মধ্যে কনস্ট্রাক্টর (constructor) এবং মেথডস (methods) থাকতে পারে।
class Person {
// কনস্ট্রাক্টর
constructor(name, age) {
this.name = name;
this.age = age;
}
// মেথড
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const person1 = new Person("Alice", 25);
person1.greet(); // আউটপুট: Hello, my name is Alice and I am 25 years old.
এখানে, Person একটি ক্লাস যা name এবং age প্রপার্টি গ্রহণ করে এবং একটি greet মেথড সংজ্ঞায়িত করে।
ক্লাসের মধ্যে constructor একটি বিশেষ মেথড যা নতুন অবজেক্ট তৈরি করার সময় স্বয়ংক্রিয়ভাবে কল হয়। এটি সাধারণত ক্লাসের প্রপার্টি বা ফিল্ড ইনিশিয়ালাইজ করতে ব্যবহৃত হয়।
class Car {
constructor(make, model) {
this.make = make;
this.model = model;
}
displayInfo() {
console.log(`Car make: ${this.make}, model: ${this.model}`);
}
}
const car1 = new Car("Toyota", "Corolla");
car1.displayInfo(); // আউটপুট: Car make: Toyota, model: Corolla
এখানে, constructor মেথডটি ক্লাসের অবজেক্ট তৈরি করার সময় make এবং model প্রপার্টি ইনিশিয়ালাইজ করছে।
জাভাস্ক্রিপ্টে ক্লাসের মধ্যে ইনহেরিটেন্স (Inheritance) সুবিধা রয়েছে, যার মাধ্যমে একটি ক্লাস অন্য ক্লাসের প্রপার্টি ও মেথড উত্তরাধিকারসূত্রে পেতে পারে। এটি extends কীওয়ার্ডের মাধ্যমে করা হয়।
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
class Dog extends Animal {
constructor(name, breed) {
super(name); // প্যারেন্ট ক্লাসের কনস্ট্রাক্টর কল
this.breed = breed;
}
speak() {
console.log(`${this.name} barks.`);
}
}
const dog1 = new Dog("Buddy", "Golden Retriever");
dog1.speak(); // আউটপুট: Buddy barks.
এখানে, Dog ক্লাস Animal ক্লাস থেকে ইনহেরিট করেছে এবং speak মেথডটি ওভাররাইড করেছে।
ক্লাসের স্ট্যাটিক মেথড একটি বিশেষ ধরনের মেথড যা ক্লাসের ইনস্ট্যান্স (অবজেক্ট) থেকে নয়, সরাসরি ক্লাস থেকে কল করা হয়। এটি সাধারণত ক্লাস-ভিত্তিক কাজ বা সহায়ক ফাংশন হিসেবে ব্যবহৃত হয়।
class MathOperations {
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathOperations.add(3, 4)); // আউটপুট: 7
console.log(MathOperations.multiply(3, 4)); // আউটপুট: 12
এখানে, add এবং multiply দুটি স্ট্যাটিক মেথড ক্লাস থেকেই কল করা হয়েছে, কোনো ইনস্ট্যান্স তৈরি না করেই।
জাভাস্ক্রিপ্ট ES2022-এ ক্লাসে প্রাইভেট প্রপার্টি ও মেথড সমর্থন করেছে, যার মাধ্যমে ক্লাসের ভিতরে প্রপার্টি বা মেথড শুধু সেই ক্লাস থেকেই অ্যাক্সেস করা যায়, বাইরের কোনো কোড থেকে নয়। এটি # চিহ্ন দিয়ে নির্ধারণ করা হয়।
class Person {
#name; // প্রাইভেট প্রপার্টি
constructor(name, age) {
this.#name = name; // প্রাইভেট প্রপার্টি অ্যাসাইন
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.#name} and I am ${this.age} years old.`);
}
}
const person1 = new Person("Alice", 25);
person1.greet(); // আউটপুট: Hello, my name is Alice and I am 25 years old.
console.log(person1.#name); // Error: Private field '#name' must be declared in an enclosing class
এখানে, #name একটি প্রাইভেট প্রপার্টি, যা শুধুমাত্র Person ক্লাসের ভিতরে অ্যাক্সেস করা যাবে।
গেটার এবং সেটার মেথডের মাধ্যমে ক্লাসের প্রপার্টি অ্যাক্সেস এবং পরিবর্তন করা সহজ হয়, এবং প্রপার্টির মান নিয়ন্ত্রণ করা যায়।
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
// গেটার
get area() {
return this.width * this.height;
}
// সেটার
set area(value) {
this.height = value / this.width;
}
}
const rect = new Rectangle(10, 5);
console.log(rect.area); // আউটপুট: 50
rect.area = 100;
console.log(rect.height); // আউটপুট: 10
এখানে, area গেটার মেথডটি রেক্টেঙ্গলের ক্ষেত্রফল রিটার্ন করে এবং সেটার মেথডটি ক্ষেত্রফল পরিবর্তন করলে উচ্চতা আপডেট করে।
ক্লাস ডিক্লারেশন ছাড়াও, জাভাস্ক্রিপ্টে ক্লাস এক্সপ্রেশন ব্যবহার করে ক্লাস ডিফাইন করা যায়। এটি ফাংশন এক্সপ্রেশন এর মতোই।
const Car = class {
constructor(make, model) {
this.make = make;
this.model = model;
}
displayInfo() {
console.log(`Car make: ${this.make}, model: ${this.model}`);
}
};
const car1 = new Car("Honda", "Civic");
car1.displayInfo(); // আউটপুট: Car make: Honda, model: Civic
জাভাস্ক্রিপ্টে ক্লাস ব্যবহার করা ফাংশন-ভিত্তিক পদ্ধতির তুলনায় আরো পরিষ্কার এবং সংগঠিত কোড লেখার সুযোগ দেয়। তবে, ক্লাস আসলে জাভাস্ক্রিপ্টের প্রোটোটাইপ ভিত্তিক মডেলের উপর ভিত্তি করে তৈরি, তাই কার্যকরভাবে তারা একইভাবে কাজ করে।
function Person(name, age) {
this.name = name;
this.age = age;
}
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
const person1 = new Person("Bob", 30);
person1.greet(); // আউটপুট: Hello, my name is Bob and I am 30 years old.
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
greet() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
}
}
const person1 = new Person("Bob", 30);
person1.greet(); // আউটপুট: Hello, my name is Bob and I am 30 years old.
দেখা যাচ্ছে, ক্লাস ভিত্তিক কোড আরও পরিষ্কার এবং সংগঠিত।
জাভাস্ক্রিপ্টের ক্লাস একটি শক্তিশালী বৈশিষ্ট্য যা অবজেক্ট ও শ্রেণিভিত্তিক প্রোগ্রামিং ধারণা সমর্থন করে। এটি প্রোটোটাইপ-ভিত্তিক জাভাস্ক্রিপ্টের জন্য একটি সংগঠিত উপায় সরবরাহ করে। ক্লাসে কনস্ট্রাক্টর, মেথড, ইনহেরিটেন্স, স্ট্যাটিক মেথড, প্রাইভেট প্রপার্টি ও মেথডের মতো বৈশিষ্ট্য রয়েছে, যা কোডকে আরো সুশৃঙ্খল ও পাঠযোগ্য করে তোলে। ক্লাস ব্যবহার করে বড় এবং জটিল প্রজেক্টগুলির কোড রক্ষণাবেক্ষণ সহজ হয় এবং ডেভেলপারদের জন্য কোডের কাঠামো বোঝা সহজ হয়।
ক্লাস সম্পর্কে গভীর জ্ঞান অর্জন করলে আপনার জাভাস্ক্রিপ্ট প্রোগ্রামিং দক্ষতাও বৃদ্ধি পাবে, যা আরও উন্নত এবং কার্যকরী কোড লেখার ক্ষেত্রে সহায়ক হবে।
আপনি আমাকে যেকোনো প্রশ্ন করতে পারেন, যেমনঃ
Are you sure to start over?