مقدمه
مدیریت سطح دسترسی به متدها و پراپرتیها در کلاسهای جاوااسکریپت از اصول کلیدی برنامهنویسی
شیگرا است. با خصوصیسازی (private) و حفاظت (protected) میتوانید از دسترسی ناخواسته و تغییرات
اشتباه جلوگیری کنید و کدهای ایمنتر و حرفهایتر بنویسید. اینها مواردی هستند که به یکی دیگر از
اصول کلیدی شیگرایی با نام Encapsulation یا کپسولهسازی مربوط میشوند.
کپسولهسازی نه تنها باعث امنیت داده میشود، بلکه توسعه و نگهداری کد را آسانتر
میکند. این مفهوم کمک میکند تا پیادهسازی داخلی اشیا مخفی بماند و فقط اینترفیسها یا رابطهای
لازم در اختیار کاربر یا دولوپر باشد.
تعریف پراپرتی و متد Private
برای تعریف پراپرتی یا متد خصوصی (private) در کلاسهای مدرن جاوااسکریپت از پیشوند #
استفاده میشود. این اعضا فقط از داخل همان کلاس قابل دسترسی هستند و حتی کلاسهای فرزند یا
نمونهها نمیتوانند به آنها دسترسی پیدا کنند.
در مثال زیر، پراپرتی #balance و متد showBalance فقط از داخل
کلاس BankAccount در
دسترس هستند.
JAVASCRIPT
class BankAccount {
#balance = 0;
deposit(amount) {
this.#balance += amount;
}
showBalance() {
console.log(this.#balance);
}
}
let acc = new BankAccount();
acc.deposit(100);
acc.showBalance();
در اینجا اگر تلاش کنید مستقیماً به #balance از بیرون کلاس دسترسی
پیدا کنید، با خطا مواجه میشوید. این ویژگی باعث میشود دادههای حساس فقط از طریق متدهای
تعریفشده در کلاس قابل تغییر باشند و امنیت بیشتری فراهم شود.
متدهای private نیز مانند پراپرتیها با # تعریف میشوند و فقط از داخل همان کلاس قابل استفادهاند.
مثال زیر را ببینید.
JAVASCRIPT
class Logger {
#log(msg) {
console.log("LOG:", msg);
}
doLog() {
this.#log("Hello");
}
}
let l = new Logger();
l.doLog();
در این مثال، متد #log فقط از داخل خود کلاس Logger قابل
فراخوانی است و اگر تلاش کنید آن را از بیرون کلاس یا توسط نمونه صدا بزنید، با خطا مواجه خواهید
شد. این ویژگی باعث میشود منطق داخلی کلاس از دسترسی مستقیم محافظت شود و فقط از طریق متدهای عمومی
(public) مانند doLog قابل استفاده باشد.
تعریف پراپرتی و متد Protected
در جاوااسکریپت کلیدواژه protected وجود ندارد، اما قراردادی رایح است که برای اعضای
protected از
پیشوند زیرخط (_) استفاده شود. این پراپرتیها و متدها واقعاً private نیستند اما نشان
میدهند که
دستکاری مستقیم آنها توصیه نمیشود و معمولاً فقط برای کلاس و فرزندانش مناسب هستند.
در مثال زیر، مقدار _salary به عنوان protected در نظر گرفته میشود و
کلاس فرزند به آن دسترسی
دارد.
JAVASCRIPT
class Employee {
_salary;
constructor(salary) {
this._salary = salary;
}
}
class Manager extends Employee {
increaseSalary() {
this._salary += 1000;
}
}
let m = new Manager(5000);
m.increaseSalary();
console.log(m._salary);
در اینجا اگرچه پراپرتی _salary به صورت protected تعریف نشده و
همچنان از بیرون کلاس قابل دسترسی است، اما با قراردادن پیشوند زیرخط (_) به توسعهدهندگان هشدار
داده میشود که این عضو فقط برای استفاده داخلی کلاس و فرزندان آن در نظر گرفته شده و نباید
مستقیماً تغییر داده شود. این یک قرارداد رایج در جامعه جاوااسکریپت است و رعایت آن به خوانایی و
نگهداری بهتر کد کمک میکند.
تعریف صحیح پراپرتی و متدهای private و protected، پایهای برای کپسولهسازی و امنیت ساختار دادهها
در برنامهنویسی شیگرا است. این کار باعث پایداری بیشتر، قابل نگهداری بودن و جلوگیری از خطاهای
ناخواسته میشود.
هرگاه نیازی به مخفی کردن دادهها یا توابع داخلی داشتید، از private (#) استفاده کنید و برای
قراردادی کردن protected از پیشوند _ بهره بگیرید تا توسعهدهندگان دیگر پیام شما را درک کنند.