জাভাস্ক্রিপ্টে static method এমন একটি মেথড যা কোনো নির্দিষ্ট object বা instance-এর জন্য নয়, বরং সরাসরি class-এর সাথে যুক্ত থাকে। তাই static method ব্যবহার করতে সাধারণত class-এর নামের পরে . দিয়ে মেথডটি কল করা হয়।
Static method বিশেষভাবে utility function, helper operation, validation, calculation এবং factory method তৈরিতে কাজে লাগে। এই টিউটোরিয়ালে আমরা static method-এর ধারণা থেকে শুরু করে class, instance, static property, inheritance এবং বাস্তব প্রয়োগ পর্যন্ত ধাপে ধাপে দেখব।
একটি class-এর ভিতরে static keyword ব্যবহার করে static method তৈরি করা যায়। এই method-কে object তৈরি না করেই class-এর নাম ব্যবহার করে কল করা যায়।
class MyClass { static myStaticMethod() { console.log("This is a static method."); } } MyClass.myStaticMethod();
এখানে myStaticMethod() একটি static method। তাই new MyClass() তৈরি করার প্রয়োজন নেই। সরাসরি MyClass.myStaticMethod() লিখে method-টি কল করা হয়েছে।
Instance method সাধারণত object বা instance-এর data নিয়ে কাজ করে এবং সেটি object-এর মাধ্যমে কল করা হয়। অন্যদিকে static method class-এর সাথে যুক্ত থাকে এবং class-এর নাম দিয়ে কল করা হয়।
class Person { constructor(name) { this.name = name; } greet() { return "Hello " + this.name; } static info() { return "Person is a class for creating people."; } } const person1 = new Person("Rahim"); console.log(person1.greet()); console.log(Person.info());
নোট - person1.info() দিয়ে static method কল করা যাবে না। Static method-এর জন্য class-এর নাম ব্যবহার করতে হবে।
অনেক সময় এমন কিছু function দরকার হয় যেগুলোর জন্য কোনো object-এর ব্যক্তিগত data প্রয়োজন হয় না। এ ধরনের reusable কাজ class-এর static method হিসেবে রাখা যায়।
class MathUtils { static square(number) { return number * number; } static cube(number) { return number * number * number; } } console.log(MathUtils.square(5)); console.log(MathUtils.cube(3));
এখানে square() এবং cube() কোনো নির্দিষ্ট object-এর data ব্যবহার করছে না। তাই এগুলো static utility method হিসেবে রাখা উপযুক্ত।
একই class-এর একটি static method থেকে অন্য static method-কে class-এর নাম ব্যবহার করে কল করা যায়। এটি বড় utility class-কে ছোট ছোট reusable method-এ ভাগ করতে সাহায্য করে।
class Calculator { static double(number) { return number * 2; } static tripleAndDouble(number) { const triple = number * 3; return Calculator.double(triple); } } console.log(Calculator.tripleAndDouble(5));
প্রথমে 5 × 3 = 15, এরপর 15 × 2 = 30। এখানে একটি static method অন্য static method ব্যবহার করেছে।
Factory method এমন একটি static method যা class-এর নতুন instance তৈরি করে return করতে পারে। যখন object তৈরির নিয়মকে একটি নির্দিষ্ট method-এর মধ্যে রাখতে চাই, তখন এই pattern উপকারী।
class Person { constructor(name, age) { this.name = name; this.age = age; } static createAdult(name) { return new Person(name, 18); } } const person = Person.createAdult("Karim"); console.log(person.name); console.log(person.age);
এখানে createAdult() একটি static factory method। এটি নতুন Person object তৈরি করে return করছে।
Static method-এর পাশাপাশি class-এর সাথে static property-ও রাখা যায়। Static property কোনো নির্দিষ্ট instance-এর নয়; এটি class-এর সাথে সম্পর্কিত।
class Company { static name = "WebsSchool"; static getName() { return Company.name; } } console.log(Company.name); console.log(Company.getName());
নোট - Static property এবং static method ব্যবহার করার সময় class-এর নাম ব্যবহার করা হয়।
Static method-এর ভিতরে this instance-কে নির্দেশ করে না। static context-এ this সাধারণত সেই class-কে নির্দেশ করে। তাই class-এর static property বা অন্য static method-এ access করতে this ব্যবহার করা যায়।
class Counter { static count = 0; static increase() { this.count++; return this.count; } } console.log(Counter.increase()); console.log(Counter.increase());
এখানে this.count দিয়ে Counter class-এর static property পরিবর্তন করা হয়েছে।
JavaScript class inheritance-এর ক্ষেত্রে static method subclass-এর কাছেও পাওয়া যেতে পারে। subclass চাইলে inherited static method ব্যবহার করতে পারে এবং প্রয়োজন হলে একই নামের static method দিয়ে override করতে পারে।
class Animal { static type() { return "Animal"; } } class Dog extends Animal {} console.log(Dog.type());
এখানে Dog class, Animal class থেকে inherit করেছে। তাই Dog.type() কল করলেও inherited static method পাওয়া যাচ্ছে।
Static method validation বা helper operation-এর জন্যও ব্যবহার করা যায়। যেমন কোনো email-এর format পরীক্ষা করার মতো কাজের জন্য আলাদা object তৈরি করার প্রয়োজন নেই।
class Validator { static isEmail(value) { return value.includes("@"); } static isPositive(number) { return number > 0; } } console.log(Validator.isEmail("user@example.com")); console.log(Validator.isPositive(10));
এ ধরনের helper method কোনো নির্দিষ্ট object-এর state-এর ওপর নির্ভর করে না। তাই static method হিসেবে রাখা কোডকে পরিষ্কার ও সহজে ব্যবহারযোগ্য করতে পারে।
যখন কোনো operation-এর জন্য object-এর আলাদা data বা state প্রয়োজন হয় না এবং কাজটি class-এর সাধারণ নিয়ম বা utility হিসেবে ব্যবহার করা যায়, তখন static method উপযুক্ত হতে পারে।
Static method শেখার সময় নিচের বিষয়গুলো মনে রাখা গুরুত্বপূর্ণ।
নোট - Static method আর instance method-এর পার্থক্য পরিষ্কারভাবে বোঝা JavaScript OOP শেখার একটি গুরুত্বপূর্ণ ধাপ।