𝗙𝗮𝗰𝘁𝗼𝗿𝘆 𝗙𝘂𝗻𝗰𝘁𝗶𝗼𝗻𝘀 𝗮𝗻𝗱 𝗖𝗼𝗻𝘀𝘁𝗿𝘂𝗰𝘁𝗼𝗿 𝗙𝘂𝗻𝗰𝘁𝗶𝗼𝗻𝘀 𝗶𝗻 𝗝𝗮𝘃𝗮𝗦𝗰𝗿𝗶𝗽𝘁
ഓരോന്നായി ഒബ്ജക്റ്റുകൾ (objects) നിർമ്മിക്കുന്നത് ഒരു തെറ്റാണ്.
ഓരോ ഉപയോക്താവിനും (user) അല്ലെങ്കിൽ സഹപാഠിക്കും (classmate) വേണ്ടി നിങ്ങൾ മാനുവലായി ഒരു ഒബ്ജക്റ്റ് എഴുതുകയാണെങ്കിൽ, നിങ്ങൾ കോഡ് ആവർത്തിക്കുന്നു. നിങ്ങൾക്ക് 100 ഉപയോക്താക്കളുണ്ടെങ്കിൽ, നിങ്ങൾ ഒരേ ലോജിക് തന്നെ 100 തവണ എഴുതേണ്ടി വരും. ഇത് ബഗുകൾക്ക് (bugs) കാരണമാകും. പിന്നീട് അറിയാതെ ഒരു പ്രോപ്പർട്ടി (property) മാറ്റുന്നത് വഴി നിങ്ങളുടെ ആപ്ലിക്കേഷൻ തകരാറിലാകാനും സാധ്യതയുണ്ട്.
വൃത്തിയുള്ള കോഡ് എഴുതുന്നതിനായി പകരം ഈ രണ്ട് പാറ്റേണുകൾ (patterns) ഉപയോഗിക്കുക.
- Factory Functions
ഒരു യഥാർത്ഥ ഫാക്ടറിയെക്കുറിച്ച് ചിന്തിക്കുക. അസംസ്കൃത വസ്തുക്കൾ അകത്തേക്ക് പോകുന്നു, ഒരു പൂർത്തിയായ ഉൽപ്പന്നം പുറത്തേക്ക് വരുന്നു.
ഒരു factory function പാരാമീറ്ററുകൾ സ്വീകരിക്കുകയും ഒരു പുതിയ ഒബ്ജക്റ്റ് തിരികെ നൽകുകയും (return) ചെയ്യുന്നു.
Example:
function classFactory(name) {
return {
reply() {
return `${name} is present`
}
}
}
ഗുണങ്ങൾ:
- നിങ്ങൾ ലോജിക് ഒരിക്കൽ മാത്രം എഴുതുന്നു.
- ഓരോ പുതിയ ഒബ്ജക്റ്റിനും വേണ്ടി നിങ്ങൾക്ക് ഈ ഫംഗ്ഷൻ വീണ്ടും ഉപയോഗിക്കാം.
- ഡാറ്റ സുരക്ഷിതമായിരിക്കും.
nameഎന്നത് ഫംഗ്ഷൻ സ്കോപ്പിനുള്ളിൽ (function scope) തന്നെയായിരിക്കും. പുറത്തുനിന്നും അറിയാതെ അത് മാറ്റാൻ (overwrite) നിങ്ങൾക്ക് കഴിയില്ല.
- Constructor Functions
Constructor functions-ഉം ഒബ്ജക്റ്റുകൾ നിർമ്മിക്കുന്നു. ഇവ "new" എന്ന കീവേഡും (keyword) "this" എന്ന കീവേഡും ഉപയോഗിക്കുന്നു. ഒരു രീതി അനുസരിച്ച് (convention), ഇവയുടെ പേര് തുടങ്ങുന്നത് ഒരു ക്യാപിറ്റൽ ലെറ്റർ (capital letter) ഉപയോഗിച്ചായിരിക്കും.
Example:
function Classmate(name) {
this.name = name
this.reply = function() {
return `${this.name} is present`
}
}
നിങ്ങൾ "new" ഉപയോഗിക്കുമ്പോൾ, JavaScript നിങ്ങൾക്കായി ഈ ജോലികൾ ചെയ്യുന്നു:
- ഇത് ഒരു പുതിയ ഒബ്ജക്റ്റ് നിർമ്മിക്കുന്നു.
- ഇത് അതിനെ "this"-ലേക്ക് അസൈൻ ചെയ്യുന്നു.
- ഇത് സ്വയമേവ ഒബ്ജക്റ്റ് റിട്ടേൺ ചെയ്യുന്നു.
നിങ്ങൾക്ക് ഒരു "return" സ്റ്റേറ്റ്മെന്റ് ആവശ്യമില്ല.
Scaling your code
വലിയ അളവിലുള്ള ഡാറ്റ കൈകാര്യം ചെയ്യുന്നതിനായി ഈ പാറ്റേണുകളെ അറേകളുമായി (arrays) സംയോജിപ്പിക്കാം. ഓരോ പേരും ടൈപ്പ് ചെയ്യുന്നതിന് പകരം ഒരു map ഫംഗ്ഷൻ ഉപയോഗിക്കുക.
Example:
const names = ['Kali', 'Andrew', 'Pearl', 'Percy']
const classmates = names.map(name => new Classmate(name))
ഇപ്പോൾ ഉപയോഗിക്കാൻ തയ്യാറായ ഒബ്ജക്റ്റുകളുടെ ഒരു ലിസ്റ്റ് നിങ്ങളുടെ പക്കലുണ്ട്.
സംഗ്രഹം:
- ആവർത്തനം ഒഴിവാക്കാൻ മാനുവൽ ഒബ്ജക്റ്റ് നിർമ്മാണം ഒഴിവാക്കുക.
- ലോജിക് എൻകാപ്സുലേറ്റ് (encapsulate) ചെയ്യാനും ഡാറ്റ സംരക്ഷിക്കാനും Factory Functions ഉപയോഗിക്കുക.
- സ്വയമേവ ഒബ്ജക്റ്റ് നിർമ്മാണത്തിനായി "new" കീവേഡ് ഉപയോഗിക്കാൻ Constructor Functions ഉപയോഗിക്കുക.
- എപ്പോഴും ലോജിക് ഒരിക്കൽ മാത്രം എഴുതുക, അത് എല്ലായിടത്തും വീണ്ടും ഉപയോഗിക്കുക.
Source: https://dev.to/pearlodi/factory-functions-and-constructor-functions-in-javascript-lmb