জাভাস্ক্রিপ্ট অ্যাক্সেসরস (Getters এবং Setters)
জাভাস্ক্রিপ্টে অবজেক্টের ডাটা নিয়ন্ত্রণ করতে Getters ও Setters ব্যবহার করা হয়। এদের একত্রে বলা হয় Accessors। এগুলোর মাধ্যমে অবজেক্টের প্রপার্টি রিড ও আপডেট করার সময় অতিরিক্ত লজিক প্রয়োগ করা যায়।
➤ Getter এবং Setter কী?
- Getter: কোনো প্রপার্টির মান পড়ার সময় কল হয়।
- Setter: কোনো প্রপার্টির মান সেট করার সময় কল হয়।
➤ উদাহরণ ১: Basic Getter এবং Setter
let ছাত্র = {
প্রথম_নাম: "সাবির",
শেষ_নাম: "হোসেন",
get পুরো_নাম() {
return this.প্রথম_নাম + " " + this.শেষ_নাম;
},
set পুরো_নাম(value) {
let অংশ = value.split(" ");
this.প্রথম_নাম = অংশ[0];
this.শেষ_নাম = অংশ[1];
}
};
console.log(ছাত্র.পুরো_নাম); // সাবির হোসেন
ছাত্র.পুরো_নাম = "রাহিম উদ্দিন";
console.log(ছাত্র.প্রথম_নাম); // রাহিম
console.log(ছাত্র.শেষ_নাম); // উদ্দিন
ব্যাখ্যা: এখানে পুরো_নাম প্রপার্টি শুধুমাত্র একটি ফাংশন নয় — এটি একটি অ্যাক্সেসর প্রপার্টি। যখন আমরা এটি পড়ি, তখন get ফাংশন কল হয়, আর যখন সেট করি, তখন set ফাংশন কল হয়।
➤ উদাহরণ ২: Validation সহ Setter
let পণ্য = {
_মূল্য: 0,
get মূল্য() {
return this._মূল্য;
},
set মূল্য(মান) {
if (মান < 0) {
console.log("দুঃখিত, ঋণাত্মক মূল্য গ্রহণযোগ্য নয়।");
} else {
this._মূল্য = মান;
}
}
};
পণ্য.মূল্য = -৫০; // সতর্ক বার্তা দেখাবে
console.log(পণ্য.মূল্য); // 0
পণ্য.মূল্য = ২০০;
console.log(পণ্য.মূল্য); // ২০০
ব্যাখ্যা: এখানে আমরা setter ব্যবহার করে ভ্যালিডেশন চেক করেছি যেন ঋণাত্মক মূল্য সেট করা না যায়। _মূল্য একটি প্রাইভেট ভ্যারিয়েবল (নেইমিং convension)।
➤ Getter ও Setter এর সুবিধাসমূহ
- অবজেক্ট প্রপার্টির ওপর নিয়ন্ত্রণ রাখা যায়।
- ডাটা পড়া বা লেখা সময়ে ভ্যালিডেশন বা ফরম্যাটিং করা যায়।
- কোড রিডেবল ও গঠিত থাকে।
- ভবিষ্যতে পরিবর্তন করা সহজ হয় কারণ অভ্যন্তরীণ কাঠামো পরিবর্তন করলেও বাইরের কোড অপরিবর্তিত থাকে।
➤ Object.defineProperty() দিয়ে Getter/Setter
let ব্যবহারকারী = {
প্রথম_নাম: "তামিম",
শেষ_নাম: "ইকবাল"
};
Object.defineProperty(ব্যবহারকারী, "পুরো_নাম", {
get: function() {
return this.প্রথম_নাম + " " + this.শেষ_নাম;
},
set: function(value) {
let অংশ = value.split(" ");
this.প্রথম_নাম = অংশ[0];
this.শেষ_নাম = অংশ[1];
}
});
console.log(ব্যবহারকারী.পুরো_নাম); // তামিম ইকবাল
ব্যাখ্যা: Object.defineProperty() ব্যবহার করেও অ্যাক্সেসর তৈরি করা যায়। এটি পুরানো এবং বিশেষ পরিস্থিতিতে ব্যবহৃত হয়।
➤ উপসংহার
জাভাস্ক্রিপ্ট অ্যাক্সেসরস (get/set) ব্যবহার করে অবজেক্ট প্রপার্টির রিডিং ও রাইটিং-এ পূর্ণ নিয়ন্ত্রণ রাখা যায়। এটি শুধু ভ্যালু এক্সেস বা আপডেট করার জন্য নয়, বরং নিরাপদ এবং স্মার্ট উপায়ে ডাটা হ্যান্ডল করার জন্য ব্যবহৃত হয়।