8.7 Class (ক্লাস)

 

Class হল অব্জেক্ট তৈরী করার টেম্পলেট। Class ডাটা এবং কোডকে Encapsulate করে। সহজ ভাষায় class এমন একটি টেমপ্লেট যেটি অনেকগুলো ভ্যারিয়েবল এবং ফাংশন দিয়ে তৈরী। 

জাভাস্ক্রিপ্ট একটি প্রোটোটাইপ বেসড ল্যাঙ্গুয়েজে। জাভাস্ক্রিপ্টে প্রতিটি অবজেক্টে [[Prototype]] নামে একটা হিডেন প্রোপার্টি থাকে যেগুলো অবজেক্ট প্রোপার্টি এবং মেথডকে এক্সটেন্ড করতে ব্যবহৃত হয়। class প্রথম জাভাস্ক্রিপ্টে আসে ES6 আসার পর। জাভাস্ক্রিপ্টে class নতুন কোনো functionality নিয়ে না আসলেও প্রোটোটাইপ এবং ইনহেরিট্যান্স এর উপর “syntactical sugar” হিসেবে কাজ করে যা cleaner এবং maintainable কোড লিখতে সাহায্য করে। 

constructor function :

// constructor function

function Person () {
    this.name = 'John',
    this.age = 23
}


// create an object
const person1 = new Person()

function কীওয়ার্ড এর পরিবর্তে আমরা class কীওয়ার্ড ব্যবহার করতে পারি। 

class এর প্রোপার্টিস constructor ফাংশন এসাইন  হয়।

// creating a class

class Person {
  constructor(name) {
    this.name = name;
  }
}
// creating an object

const person1 = new Person('John');
const person2 = new Person('Jack');

console.log(person1.name); // John
console.log(person2.name); // Jack

এখানে person1 এবং person2 person ক্লাসের অবজেক্ট।

জাভাস্ক্রিপ্ট class এ মেথড ডিফাইন করা খুব সহজ। মেথডের নামের শেষে () দিয়ে মেথড ডিক্লেয়ার করা হয়।

class Person {
    constructor(name) {
       this.name = name;
    }
    // defining method
    greet() {
        console.log(`Hello ${this.name}`);
    }
}

let person1 = new Person('John');

// accessing property
console.log(person1.name); // John

// accessing method
person1.greet(); // Hello John

 

জাভাস্ক্রিপ্টে getter মেথড অব্জেক্টের ভ্যালু get এবং setter মেথড অবজেক্টের ভ্যালু set করতে ব্যবহৃত হয়.

class Person {
    constructor(name) {
        this.name = name;
    }

    // getter
    get personName() {
        return this.name;
    }

    // setter
    set personName(x) {
        this.name = x;
    }
}

let person1 = new Person('Jack');
console.log(person1.name);           // Jack

// changing the value of name property
person1.personName = 'Sarah';
console.log(person1.name);          // Sarah

Hoisting:

class ব্যাবহারের পূর্বে  অবশই ডিফাইন করতে হবে । জাভাস্ক্রিপ্টের অন্য ফাংশন এবং ডিক্লারেশনের মত class hoisted নয় । 

// accessing class
const p = new Person(); // ReferenceError

// defining class
class Person {
  constructor(name) {
    this.name = name;
  }
}

উপরের কোড ব্লকটি এরর থ্রো করবে কারণ আমরা ডিফাইন এর পূর্বে একসেস করার চেষ্টা করতেসি।

class এর  একটি গুরুত্বপূর্ণ ফীচার হল আমরা ক্লাসকে extend করে নতুন class তৈরী করতে পারি যা প্যারেন্ট class এর সব ফীচার ইনহেরিট করে।  এতে করে কোড রেপিটেশন অনেক কম হয়। নতুন class এ কোনো অতিরিক্ত ফীচার দরকার হলে তাও অ্যাড করা সম্ভব।

// Initializing a class

class Hero {
   constructor(name, level) {
     this.name = name;
     this.level = level;
   }
   // Adding a method to the constructor

   greet() {
     return `${this.name} says hello.`;
    }
}




// Creating a new class from the parent

class Mage extends Hero {
  constructor(name, level, spell) {
     // Chain constructor with super
     super(name, level);

     // Add a new property
     this.spell = spell;
   }
}