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; } }