Q35. What are getters and setters in JavaScript?
প্রপার্টি পড়া ও লেখার আগে নিজের কাজ চালানোর উপায় — computed property সহ।
Getter হলো প্রপার্টি পড়ার সময় চালানো ফাংশন, আর setter হলো প্রপার্টিতে মান দেওয়ার সময় চালানো ফাংশন। ফলে আপনি একটা সাধারণ প্রপার্টির মতোই ব্যবহার করতে পারেন, কিন্তু ভিতরে লুকানো লজিক চলে।
const user = {
firstName: "Rahim",
lastName: "Karim",
get fullName() {
return this.firstName + " " + this.lastName;
},
};
console.log(user.fullName); // "Rahim Karim" — পড়লে getter চলে
console.log(user.firstName); // "Rahim" — সাধারণ প্রপার্টিধাপে ধাপে — user.fullName লিখলে JavaScript বুঝে নেয় এটা getter, তাই get fullName() ফাংশনটি চালায়। ফাংশনের ভিতরে this.firstName ও this.lastName পড়া হয় এবং জোড়া লাগানো হয়। ব্রাউজারে user.fullName লিখলেও () ছাড়াই getter চলে।
const temperature = {
celsius: 20,
get fahrenheit() {
return this.celsius * 9 / 5 + 32;
},
set fahrenheit(value) {
this.celsius = (value - 32) * 5 / 9;
},
};
console.log(temperature.fahrenheit); // 68
temperature.fahrenheit = 212;
console.log(temperature.celsius); // 100ধাপে ধাপে — আগে celsius = 20 থেকে getter হিসাব করে 68 দেয়। তারপর temperature.fahrenheit = 212 লিখলে setter চলে, সেখানে value = 212 বসে সেটাকে সেলসিয়াসে বদলে celsius-এ রাখা হয়, ফলে (212 - 32) * 5 / 9 = 100।
class-এ এগুলো আরও পরিষ্কার লেখা যায়, আর সাধারণ প্রপার্টি থেকে get-এর নামে underscore ব্যবহার করার ঐতিহাসিক অভ্যাসটি আধুনিক JavaScript-এ প্রয়োজন নেই।
class Rectangle {
constructor(width, height) {
this.width = width;
this.height = height;
}
get area() {
return this.width * this.height;
}
get isSquare() {
return this.width === this.height;
}
}class User {
#email; // সত্যিকারের private field
constructor(name, email) {
this.name = name;
this.#email = email;
}
get email() {
return this.#email;
}
set email(value) {
if (!value.includes("@")) {
throw new Error("সঠিক ইমেইল দিন");
}
this.#email = value;
}
}
const user = new User("Rahim", "rahim@example.com");
user.email = "nope"; // Error: সঠিক ইমেইল দিন// class ছাড়া defineProperty দিয়ে
const user = {};
Object.defineProperty(user, "name", {
get() {
return "Rahim";
},
enumerable: true,
configurable: true,
});
console.log(user.name); // "Rahim"
console.log(Object.keys(user)); // ["name"]| বিষয় | Getter | Setter |
|---|---|---|
| কখন চলে | প্রপার্টি পড়লে | প্রপার্টিতে মান দিলে |
| ফেরত দেয় | যেকোনো মান | সাধারণত কিছু নয় |
| লেখার নিয়ম | শুধু get | শুধু set |
| ব্যবহার | হিসাব করা মান | মান যাচাই বা রূপান্তর |
getter ও setter খুব বেশি ব্যবহার করলে কোড সহজ হয়ে যায় — পড়তে চাইলে দেখা যায় কোথা থেকে মান আসে। কিন্তু প্রতিটা প্রপার্টির জন্য জোড়া getter-setter লিখলে কোড ভারী হয়ে যায়; সাধারণ প্রপার্টিই রাখুন, প্রয়োজন হলে ব্যবহার করুন।