توابع کارخانهای (Factory Functions) و توابع سازنده (Constructor Functions) در جاوااسکریپت
ساختن اشیاء یکی یکی یک اشتباه است.
اگر برای هر کاربر یا همکلاسی یک شیء به صورت دستی بنویسید، کد را تکرار میکنید. اگر ۱۰۰ کاربر داشته باشید، همان منطق را ۱۰۰ بار مینویسید. این کار منجر به باگ میشود. ممکن است بعداً بهطور تصادفی یک ویژگی (property) را تغییر دهید و برنامه خود را از کار بیندازید.
در عوض، برای نوشتن کد تمیز از این دو الگو استفاده کنید.
۱. توابع کارخانهای (Factory Functions)
یک کارخانه واقعی را تصور کنید. مواد اولیه وارد میشود و یک محصول نهایی خارج میشود.
یک تابع کارخانهای پارامترها را میگیرد و یک شیء جدید را برمیگرداند.
مثال:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
مزایا:
- شما منطق را یک بار مینویسید.
- شما تابع را برای هر شیء جدید دوباره استفاده میکنید.
- دادهها ایمن میمانند. نام در محدوده (scope) تابع باقی میماند. شما نمیتوانید بهطور تصادفی آن را از بیرون بازنویسی کنید.
۲. توابع سازنده (Constructor Functions)
توابع سازنده نیز اشیاء را ایجاد میکنند. آنها از کلمه کلیدی new و کلمه کلیدی this استفاده میکنند. طبق قرارداد، این توابع را با حرف بزرگ شروع میکنید.
مثال:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
وقتی از new استفاده میکنید، جاوااسکریپت کار را برای شما انجام میدهد:
- یک شیء جدید ایجاد میکند.
- آن را به
thisاختصاص میدهد. - شیء را بهطور خودکار برمیگرداند.
نیازی به دستور return ندارید.
مقیاسپذیری کد شما
میتوانید این الگوها را با آرایهها ترکیب کنید تا حجم زیادی از دادهها را مدیریت کنید. به جای تایپ کردن تکتک نامها، از یک تابع map استفاده کنید.
مثال:
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
حالا لیستی از اشیاء آماده برای استفاده دارید.
خلاصه:
- برای جلوگیری از تکرار، از ساخت دستی اشیاء خودداری کنید.
- از توابع کارخانهای برای کپسولهسازی منطق و محافظت از دادهها استفاده کنید.
- از توابع سازنده برای بهرهگیری از کلمه کلیدی
newجهت ایجاد خودکار اشیاء استفاده کنید. - همیشه منطق خود را یک بار بنویسید و در همه جا از آن استفاده کنید.
منبع: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb