জাভাস্ক্রিপ্টে ক্লাসসমূহ

জাভাস্ক্রিপ্টে ক্লাসসমূহ

এই প্রবন্ধটি জাভাস্ক্রিপ্টে ক্লাসসমূহ ব্যাখ্যা করে।

YouTube Video

জাভাস্ক্রিপ্টে ক্লাসসমূহ

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

ক্লাস সংজ্ঞা

একটি ক্লাস class কি-ওয়ার্ড দিয়ে সংজ্ঞায়িত করা হয় এবং সাধারণত একটি constructor নামক পদ্ধতি দিয়ে আরম্ভ করা হয়।

 1class Person {
 2    // Constructor method (called when the class is instantiated)
 3    constructor(name, age) {
 4        this.name = name; // Property definition
 5        this.age = age;
 6    }
 7
 8    // Method definition
 9    greet() {
10        return `Hello, my name is ${this.name}`;
11    }
12}
13
14// Instantiation of the class
15const alice = new Person("Alice", 25);
16console.log(alice.greet()); // Hello, my name is Alice
  • আমরা class Person এর মাধ্যমে একটি ক্লাস সংজ্ঞায়িত করি।
  • constructor হল একটি বিশেষ পদ্ধতি যা একটি অবজেক্ট তৈরি হলে স্বয়ংক্রিয়ভাবে ডাকা হয়।
  • this কি-ওয়ার্ডটি ক্লাসের অভ্যন্তরে ক্লাসের উদাহরণ বা অবজেক্টকে বোঝায়।

ক্লাস গুণাবলী এবং পদ্ধতিসমূহ

একটি ক্লাস গুণাবলী এবং পদ্ধতিসমূহ সংজ্ঞায়িত করতে পারে। গুণাবলী একটি অবজেক্টের বৈশিষ্ট্য এবং পদ্ধতিসমূহ এর ফাংশনগুলিকে উপস্থাপন করে।

 1class Car {
 2    constructor(brand, model) {
 3        this.brand = brand;
 4        this.model = model;
 5    }
 6
 7    // Method definition
 8    drive() {
 9        console.log(`Driving a ${this.brand} ${this.model}`);
10    }
11}
12
13const car1 = new Car("Toyota", "Corolla");
14car1.drive(); // Driving a Toyota Corolla

এই উদাহরণে, একটি Car ক্লাস brand এবং model গুণাবলী এবং একটি drive পদ্ধতির সঙ্গে ডিক্লেয়ার করা হয়েছে।

ক্লাস উত্তরাধিকার

ক্লাসগুলি অন্যান্য ক্লাস থেকে উত্তরাধিকারসূত্রে প্রাপ্ত করতে পারে। উত্তরাধিকার ব্যবহার করে, আপনি একটি বিদ্যমান ক্লাসের উপর ভিত্তি করে একটি নতুন ক্লাস তৈরি করতে পারেন এবং এতে অতিরিক্ত কার্যকারিতা যোগ করতে পারেন।

 1class Animal {
 2    constructor(name) {
 3        this.name = name;
 4    }
 5
 6    speak() {
 7        console.log(`${this.name} makes a noise`);
 8    }
 9}
10
11// Inherit from the Animal class
12class Dog extends Animal {
13    constructor(name, breed) {
14        super(name); // Call the constructor of the parent class (Animal)
15        this.breed = breed;
16    }
17
18    // Override the method
19    speak() {
20        console.log(`${this.name} barks`);
21    }
22}
23
24const dog = new Dog("Rex", "German Shepherd");
25dog.speak(); // Rex barks

এই উদাহরণে, Dog ক্লাসটি Animal ক্লাস থেকে উত্তরাধিকার লাভ করে।

  • extends কি-ওয়ার্ডটি Animal ক্লাস থেকে উত্তরাধিকার পেতে ব্যবহৃত হয়।
  • Dog ক্লাসের কনস্ট্রাক্টরে, প্যারেন্ট ক্লাসের কনস্ট্রাক্টর ডাকার জন্য super() ব্যবহার করা হয়। এটি আপনাকে প্যারেন্ট ক্লাসের প্রাথমিককরণ প্রক্রিয়া উত্তরাধিকার সূত্রে পেতে সক্ষম করে।
  • উত্তরাধিকারপ্রাপ্ত ক্লাসের ভিতরে, আপনি প্যারেন্ট ক্লাসের পদ্ধতিসমূহ ওভাররাইড করতে পারেন। এই উদাহরণে, "Rex makes a noise" এর পরিবর্তে "Rex barks" দেখানো হয়।

স্ট্যাটিক মেথডসমূহ

যখন আপনি একটি ক্লাসের মধ্যে স্ট্যাটিক মেথড নির্ধারণ করেন, তখন মেথডটি ক্লাসের সাথে সংশ্লিষ্ট হয়। স্ট্যাটিক মেথডগুলি ইনস্ট্যান্স না করেও ডাকা যেতে পারে।

1class MathUtils {
2    // Static method
3    static add(a, b) {
4        return a + b;
5    }
6}
7
8console.log(MathUtils.add(5, 10)); // 15

এই উদাহরণে, MathUtils ক্লাসে একটি স্ট্যাটিক মেথড add নির্ধারিত আছে।

  • static কীওয়ার্ড ব্যবহার করে একটি স্ট্যাটিক মেথড নির্ধারণ করা হয়।
  • স্ট্যাটিক মেথডগুলি ক্লাস ইনস্ট্যান্সের অন্তর্গত নয় এবং ক্লাস থেকেই সরাসরি ডাকা যেতে পারে।

গেটার ও সেটার

ক্লাসে গেটার এবং সেটার নির্ধারণ করে, আপনি প্রপার্টিগুলির রিট্রিভাল এবং সেটিং ইনক্যাপসুলেট করতে পারবেন।

 1class Rectangle {
 2    constructor(width, height) {
 3        this.width = width;
 4        this.height = height;
 5    }
 6
 7    // Getter
 8    get area() {
 9        return this.width * this.height;
10    }
11
12    // Setter
13    set widthValue(newWidth) {
14        this.width = newWidth;
15    }
16}
17
18const rect = new Rectangle(10, 20);
19console.log(rect.area); // 200
20
21rect.widthValue = 15;
22console.log(rect.area); // 300

এই উদাহরণে, Rectangle ক্লাসে একটি area গেটার এবং একটি widthValue সেটার নির্ধারিত হয়েছে।

  • গেটার (get) ডাকা হয় যখন একটি প্রপার্টির মান রিট্রিভ করা হয়।
  • সেটার (set) ডাকা হয় যখন একটি প্রপার্টির মান নির্ধারণ করা হয়।

ক্লাস সিনট্যাক্স সুগার

জাভাস্ক্রিপ্টে, ক্লাস সিনট্যাক্স অভ্যন্তরীণভাবে কন্সট্রাক্টর ফাংশন এবং প্রোটোটাইপ ব্যবহার করে বাস্তবায়িত হয়। ক্লাস সিনট্যাক্স হল এই কোডগুলি আরও সংক্ষেপে লেখার জন্য সিনট্যাকটিক সুগার

 1// Example without using class syntax
 2function Person(name, age) {
 3    this.name = name;
 4    this.age = age;
 5}
 6
 7Person.prototype.greet = function() {
 8    return `Hello, my name is ${this.name}`;
 9};
10
11const person = new Person("Alice", 25);
12console.log(person.greet()); // Hello, my name is Alice

এই উদাহরণে, একটি কন্সট্রাক্টর ফাংশন Person নির্ধারিত, এবং একটি প্রোটোটাইপ ব্যবহার করে greet মেথড নির্ধারিত।

this পরিচালনা করা

ক্লাসের ভিতরে this কীওয়ার্ডটি ঐ ক্লাসের ইনস্ট্যান্সকে নির্দেশ করে। তবে, ক্লাস মেথডগুলিতে this ব্যবহারের ক্ষেত্রে আপনাকে সচেতন হতে হবে যে এর আচরণ স্কোপ-এর উপর নির্ভরশীল হতে পারে। সমস্যা বিশেষত দেখা দিতে পারে যখন মেথডগুলোকে কলব্যাক ফাংশন হিসেবে ব্যবহার করা হয়।

 1class Counter {
 2    constructor() {
 3        this.count = 0;
 4    }
 5
 6    increment() {
 7        this.count++;
 8        console.log(this.count);
 9    }
10}
11
12const counter = new Counter();
13setTimeout(counter.increment, 1000); // NaN
14// NaN, since this.count is undefined, it becomes NaN after incrementing.

এই ধরনের ক্ষেত্রে, setTimeout-এ কলব্যাক হিসাবে দেয়া হলে, this এর রেফারেন্স পরিবর্তিত হতে পারে। এই সমস্যাটি এড়াতে, bind মেথড ব্যবহার করে this নির্ধারণ করা বা অ্যারো ফাংশন ব্যবহার করার পরামর্শ দেওয়া হয়।

 1class Counter {
 2    constructor() {
 3        this.count = 0;
 4    }
 5
 6    increment() {
 7        this.count++;
 8        console.log(this.count);
 9    }
10}
11
12const counter = new Counter();
13
14// When using bind
15setTimeout(counter.increment.bind(counter), 1000);
16
17// When using an arrow function
18setTimeout(() => counter.increment(), 2000);

সারসংক্ষেপ

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

ক্লাস ব্যবহার করে আপনি অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং আরও স্বাভাবিকভাবে পরিচালনা করতে পারেন এবং কোডের পুনরায় ব্যবহারযোগ্যতা ও রক্ষণাবেক্ষণযোগ্যতা উন্নত করতে পারেন।

আপনি আমাদের ইউটিউব চ্যানেলে ভিজ্যুয়াল স্টুডিও কোড ব্যবহার করে উপরের নিবন্ধটি অনুসরণ করতে পারেন। দয়া করে ইউটিউব চ্যানেলটিও দেখুন।

YouTube Video