சக்திவாய்ந்த இயக்க நேர தரவு அணுகலைத் திறக்க JavaScript அலங்கரிப்பான்கள், தரவு மற்றும் பிரதிபலிப்பை ஆராயுங்கள், மேம்பட்ட செயல்பாடு, மேம்பட்ட பராமரிப்பு மற்றும் உங்கள் பயன்பாடுகளில் அதிக நெகிழ்வுத்தன்மையை செயல்படுத்துகிறது.
JavaScript அலங்கரிப்பான்கள், தரவு மற்றும் பிரதிபலிப்பு: மேம்படுத்தப்பட்ட செயல்பாட்டிற்கான இயக்க நேர தரவு அணுகல்
JavaScript, அதன் ஆரம்ப ஸ்கிரிப்டிங் பங்கிற்கு அப்பால் உருவாகி, இப்போது சிக்கலான வலை பயன்பாடுகள் மற்றும் சேவையக-பக்க சூழல்களுக்கு அடிப்படையாக உள்ளது. இந்த பரிணாமம் சிக்கலை நிர்வகிக்கவும், பராமரிப்பை மேம்படுத்தவும், குறியீடு மறுபயன்பாட்டை ஊக்குவிக்கவும் மேம்பட்ட நிரலாக்க நுட்பங்களை அவசியமாக்குகிறது. அலங்கரிப்பான்கள், ஒரு நிலை 2 ECMAScript முன்மொழிவு, தரவு பிரதிபலிப்புடன் இணைந்து, இயக்க நேர தரவு அணுகல் மற்றும் அம்சம் சார்ந்த நிரலாக்க (AOP) முன்னுதாரணங்களை செயல்படுத்துவதன் மூலம் இந்த இலக்குகளை அடைய ஒரு சக்திவாய்ந்த வழிமுறையை வழங்குகிறது.
அலங்கரிப்பான்களைப் புரிந்துகொள்வது
அலங்கரிப்பான்கள் என்பது தொடரியல் சர்க்கரையின் ஒரு வடிவமாகும், இது வகுப்புகள், முறைகள், பண்புகள் அல்லது அளவுருக்களின் நடத்தையை மாற்ற அல்லது நீட்டிக்க ஒரு சுருக்கமான மற்றும் அறிவிப்பு வழியை வழங்குகிறது. இவை @ குறியீட்டால் முன்னொட்டு செய்யப்பட்ட செயல்பாடுகளாகும், மேலும் அவை அலங்கரிக்கும் உறுப்புக்கு உடனடியாக முன் வைக்கப்படுகின்றன. இது அலங்கரிக்கப்பட்ட கூறுகளின் முக்கிய தர்க்கத்தை நேரடியாக மாற்றாமல், பதிவு செய்தல், சரிபார்ப்பு அல்லது அங்கீகாரம் போன்ற குறுக்கு வெட்டு கவலைகளைச் சேர்க்க அனுமதிக்கிறது.
ஒரு எளிய உதாரணத்தைக் கவனியுங்கள். ஒரு குறிப்பிட்ட முறை அழைக்கப்படும் ஒவ்வொரு முறையும் நீங்கள் பதிவு செய்ய வேண்டும் என்று கற்பனை செய்து பாருங்கள். அலங்கரிப்பான்கள் இல்லாமல், ஒவ்வொரு முறையிலும் பதிவு செய்யும் தர்க்கத்தை கைமுறையாக சேர்க்க வேண்டும். அலங்கரிப்பான்களுடன், நீங்கள் ஒரு @log அலங்கரிப்பாளரை உருவாக்கி, நீங்கள் பதிவு செய்ய விரும்பும் முறைகளுக்கு அதைப் பயன்படுத்தலாம். இந்த அணுகுமுறை முக்கிய முறை தர்க்கத்திலிருந்து பதிவு செய்யும் தர்க்கத்தை தனித்தனியாக வைத்திருக்கிறது, குறியீடு வாசிப்புத்திறன் மற்றும் பராமரிப்பை மேம்படுத்துகிறது.
அலங்கரிப்பான்களின் வகைகள்
JavaScript இல் நான்கு வகையான அலங்கரிப்பான்கள் உள்ளன, ஒவ்வொன்றும் ஒரு தனித்துவமான நோக்கத்திற்காக செயல்படுகின்றன:
- வகுப்பு அலங்கரிப்பான்கள்: இந்த அலங்கரிப்பான்கள் வகுப்பு கட்டமைப்பாளரை மாற்றுகின்றன. புதிய பண்புகள், முறைகளைச் சேர்க்க அல்லது ஏற்கனவே உள்ளவற்றை மாற்ற அவை பயன்படுத்தப்படலாம்.
- முறை அலங்கரிப்பான்கள்: இந்த அலங்கரிப்பான்கள் ஒரு முறையின் நடத்தையை மாற்றுகின்றன. முறை செயல்படுத்தப்படுவதற்கு முன்னும் பின்னும் பதிவு செய்தல், சரிபார்ப்பு அல்லது அங்கீகார தர்க்கத்தை சேர்க்க அவை பயன்படுத்தப்படலாம்.
- சொத்து அலங்கரிப்பான்கள்: இந்த அலங்கரிப்பான்கள் ஒரு சொத்தின் விளக்கத்தை மாற்றுகின்றன. தரவு பிணைப்பு, சரிபார்ப்பு அல்லது சோம்பேறி துவக்கத்தை செயல்படுத்த அவை பயன்படுத்தப்படலாம்.
- அளவுரு அலங்கரிப்பான்கள்: இந்த அலங்கரிப்பான்கள் ஒரு முறையின் அளவுருக்கள் பற்றிய தரவை வழங்குகின்றன. அளவுரு வகைகள் அல்லது மதிப்புகளின் அடிப்படையில் சார்பு ஊசி அல்லது சரிபார்ப்பு தர்க்கத்தை செயல்படுத்த அவை பயன்படுத்தப்படலாம்.
அடிப்படை அலங்கரிப்பான் தொடரியல்
அலங்கரிப்பான் என்பது அலங்கரிக்கப்பட்ட உறுப்பின் வகையைப் பொறுத்து ஒன்று, இரண்டு அல்லது மூன்று வாதங்களை எடுக்கும் ஒரு செயல்பாடு:
- வகுப்பு அலங்கரிப்பான்: வகுப்பு கட்டமைப்பாளரை அதன் வாதமாக எடுத்துக்கொள்கிறது.
- முறை அலங்கரிப்பான்: மூன்று வாதங்களை எடுக்கும்: இலக்கு பொருள் (நிலையான உறுப்பினருக்கான கன்ஸ்ட்ரக்டர் செயல்பாடு அல்லது ஒரு நிகழ்வு உறுப்பினருக்கான வகுப்பின் முன்மாதிரி), உறுப்பினரின் பெயர் மற்றும் உறுப்பினருக்கான சொத்து விவரிப்பான்.
- சொத்து அலங்கரிப்பான்: இரண்டு வாதங்களை எடுக்கும்: இலக்கு பொருள் மற்றும் சொத்தின் பெயர்.
- அளவுரு அலங்கரிப்பான்: மூன்று வாதங்களை எடுக்கும்: இலக்கு பொருள், முறையின் பெயர் மற்றும் முறையின் அளவுரு பட்டியலில் அளவுருவின் குறியீட்டு எண்.
ஒரு எளிய வகுப்பு அலங்கரிப்பாளரின் உதாரணம் இங்கே:
function sealed(constructor: Function) {
Object.seal(constructor);
Object.seal(constructor.prototype);
}
@sealed
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
இந்த எடுத்துக்காட்டில், @sealed அலங்கரிப்பான் Greeter வகுப்பிற்கு பயன்படுத்தப்படுகிறது. sealed செயல்பாடு கட்டமைப்பாளர் மற்றும் அதன் முன்மாதிரி இரண்டையும் உறைய வைக்கிறது, மேலும் மாற்றங்களைத் தடுக்கிறது. சில வகுப்புகளின் மாறாத தன்மையை உறுதி செய்வதற்கு இது பயனுள்ளதாக இருக்கும்.
தரவு பிரதிபலிப்பின் சக்தி
வகுப்புகள், முறைகள், பண்புகள் மற்றும் அளவுருக்களுடன் தொடர்புடைய தரவை இயக்க நேரத்தில் அணுகுவதற்கான வழியை தரவு பிரதிபலிப்பு வழங்குகிறது. இது சார்பு ஊசி, வரிசைப்படுத்துதல் மற்றும் சரிபார்ப்பு போன்ற சக்திவாய்ந்த திறன்களை செயல்படுத்துகிறது. ஜாவா அல்லது C# போன்ற மொழிகள் செய்வது போல் JavaScript தன்னால் பிரதிபலிப்பை ஆதரிக்காது. இருப்பினும், reflect-metadata போன்ற நூலகங்கள் இந்த செயல்பாட்டை வழங்குகின்றன.
ரோன் பக்கிளால் உருவாக்கப்பட்ட reflect-metadata நூலகம், அலங்கரிப்பான்களைப் பயன்படுத்தி வகுப்புகள் மற்றும் அவற்றின் உறுப்பினர்களுக்கு தரவை இணைக்க உங்களை அனுமதிக்கிறது, பின்னர் இந்த தரவை இயக்க நேரத்தில் மீட்டெடுக்கிறது. இது மிகவும் நெகிழ்வான மற்றும் கட்டமைக்கக்கூடிய பயன்பாடுகளை உருவாக்க உதவுகிறது.
reflect-metadata ஐ நிறுவுதல் மற்றும் இறக்குமதி செய்தல்
reflect-metadata ஐப் பயன்படுத்த, நீங்கள் முதலில் npm அல்லது yarn ஐப் பயன்படுத்தி அதை நிறுவ வேண்டும்:
npm install reflect-metadata --save
அல்லது yarn ஐப் பயன்படுத்தி:
yarn add reflect-metadata
பின்னர், அதை உங்கள் திட்டத்தில் இறக்குமதி செய்ய வேண்டும். TypeScript இல், உங்கள் பிரதான கோப்பின் மேலே பின்வரும் வரியைச் சேர்க்கலாம் (எ.கா., index.ts அல்லது app.ts):
import 'reflect-metadata';
இந்த இறக்குமதி அறிக்கை முக்கியமானது, ஏனெனில் இது அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பால் பயன்படுத்தப்படும் தேவையான Reflect API களை நிரப்புகிறது. இந்த இறக்குமதியை நீங்கள் மறந்துவிட்டால், உங்கள் குறியீடு சரியாக வேலை செய்யாமல் போகலாம், மேலும் நீங்கள் இயக்க நேர பிழைகளை சந்திக்க நேரிடும்.
அலங்கரிப்பான்களுடன் தரவை இணைத்தல்
reflect-metadata நூலகம் பொருள்களுடன் தரவை இணைக்க Reflect.defineMetadata செயல்பாட்டை வழங்குகிறது. இருப்பினும், அலங்கரிப்பான்களைப் பயன்படுத்தி தரவை வரையறுப்பது மிகவும் பொதுவானது மற்றும் வசதியானது. Reflect.metadata அலங்கரிப்பான் தொழிற்சாலை அலங்கரிப்பான்களைப் பயன்படுத்தி தரவை வரையறுக்க ஒரு சுருக்கமான வழியை வழங்குகிறது.
இதோ ஒரு உதாரணம்:
import 'reflect-metadata';
const formatMetadataKey = Symbol("format");
function format(formatString: string) {
return Reflect.metadata(formatMetadataKey, formatString);
}
function getFormat(target: any, propertyKey: string) {
return Reflect.getMetadata(formatMetadataKey, target, propertyKey);
}
class Example {
@format("Hello, %s")
greeting: string = "World";
greet() {
let formatString = getFormat(this, "greeting");
return formatString.replace("%s", this.greeting);
}
}
let example = new Example();
console.log(example.greet()); // Output: Hello, World
இந்த எடுத்துக்காட்டில், @format அலங்கரிப்பான் Example வகுப்பின் greeting சொத்துடன் "Hello, %s" என்ற வடிவமைப்பு சரத்தை தொடர்புபடுத்த பயன்படுகிறது. getFormat செயல்பாடு இயக்க நேரத்தில் இந்த தரவை மீட்டெடுக்க Reflect.getMetadata ஐப் பயன்படுத்துகிறது. பின்னர் greet முறை வாழ்த்து செய்தியை வடிவமைக்க இந்த தரவைப் பயன்படுத்துகிறது.
தரவு API ஐ பிரதிபலிக்கவும்
reflect-metadata நூலகம் தரவுடன் வேலை செய்ய பல செயல்பாடுகளை வழங்குகிறது:
Reflect.defineMetadata(metadataKey, metadataValue, target, propertyKey?): ஒரு பொருள் அல்லது சொத்துடன் தரவை இணைக்கிறது.Reflect.getMetadata(metadataKey, target, propertyKey?): ஒரு பொருள் அல்லது சொத்திலிருந்து தரவை மீட்டெடுக்கிறது.Reflect.hasMetadata(metadataKey, target, propertyKey?): ஒரு பொருள் அல்லது சொத்தில் தரவு உள்ளதா என்பதை சரிபார்க்கிறது.Reflect.deleteMetadata(metadataKey, target, propertyKey?): ஒரு பொருள் அல்லது சொத்திலிருந்து தரவை நீக்குகிறது.Reflect.getMetadataKeys(target, propertyKey?): ஒரு பொருள் அல்லது சொத்தில் வரையறுக்கப்பட்ட அனைத்து தரவு விசைகளின் வரிசையை வழங்குகிறது.Reflect.getOwnMetadataKeys(target, propertyKey?): ஒரு பொருள் அல்லது சொத்தில் நேரடியாக வரையறுக்கப்பட்ட அனைத்து தரவு விசைகளின் வரிசையை வழங்குகிறது (பரம்பரை தரவைத் தவிர்த்து).
பயன்பாட்டு வழக்குகள் மற்றும் நடைமுறை எடுத்துக்காட்டுகள்
நவீன JavaScript மேம்பாட்டில் அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பு ஏராளமான பயன்பாடுகளைக் கொண்டுள்ளன. இங்கே சில எடுத்துக்காட்டுகள்:
சார்பு ஊசி
சார்பு ஊசி (DI) என்பது ஒரு வடிவமைப்பு முறை ஆகும், இது ஒரு வகுப்பை உருவாக்குவதற்கு பதிலாக சார்புகளை ஒரு வகுப்பிற்கு வழங்குவதன் மூலம் கூறுகளுக்கு இடையே தளர்வான இணைப்பை ஊக்குவிக்கிறது. JavaScript இல் DI கொள்கலன்களை செயல்படுத்த அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் பயன்படுத்தலாம்.
உங்களிடம் UserService உள்ளது, அது UserRepository ஐச் சார்ந்துள்ளது. சார்புகளைக் குறிப்பிட அலங்கரிப்பான்களைப் பயன்படுத்தலாம் மற்றும் இயக்க நேரத்தில் அவற்றை தீர்க்க DI கொள்கலனைப் பயன்படுத்தலாம்.
import 'reflect-metadata';
const Injectable = (): ClassDecorator => {
return (target: any) => {
Reflect.defineMetadata('design:paramtypes', [], target);
};
};
const Inject = (token: any): ParameterDecorator => {
return (target: any, propertyKey: string | symbol, parameterIndex: number) => {
let existingParameters: any[] = Reflect.getOwnMetadata('design:paramtypes', target, propertyKey) || [];
existingParameters[parameterIndex] = token;
Reflect.defineMetadata('design:paramtypes', existingParameters, target, propertyKey);
};
};
class UserRepository {
getUsers() {
return ['user1', 'user2'];
}
}
@Injectable()
class UserService {
private userRepository: UserRepository;
constructor(@Inject(UserRepository) userRepository: UserRepository) {
this.userRepository = userRepository;
}
getUsers() {
return this.userRepository.getUsers();
}
}
// Simple DI Container
class Container {
private static dependencies = new Map();
static register(key: any, concrete: { new(...args: any[]): T }): void {
Container.dependencies.set(key, concrete);
}
static resolve(key: any): T {
const concrete = Container.dependencies.get(key);
if (!concrete) {
throw new Error(`No binding found for ${key}`);
}
const paramtypes = Reflect.getMetadata('design:paramtypes', concrete) || [];
const dependencies = paramtypes.map((param: any) => Container.resolve(param));
return new concrete(...dependencies);
}
}
// Register Dependencies
Container.register(UserRepository, UserRepository);
Container.register(UserService, UserService);
// Resolve UserService
const userService = Container.resolve(UserService);
console.log(userService.getUsers()); // Output: ['user1', 'user2']
இந்த எடுத்துக்காட்டில், @Injectable அலங்கரிப்பான் ஊசி போடக்கூடிய வகுப்புகளைக் குறிக்கிறது, மேலும் @Inject அலங்கரிப்பான் ஒரு கன்ஸ்ட்ரக்டரின் சார்புகளைக் குறிப்பிடுகிறது. Container வகுப்பு ஒரு எளிய DI கொள்கலனாக செயல்படுகிறது, அலங்கரிப்பான்களால் வரையறுக்கப்பட்ட தரவின் அடிப்படையில் சார்புகளைத் தீர்க்கிறது.
வரிசைப்படுத்துதல் மற்றும் வரிசை நீக்கம்
பொருள்களின் வரிசைப்படுத்துதல் மற்றும் வரிசை நீக்கம் செயல்முறையைத் தனிப்பயனாக்க அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் பயன்படுத்தலாம். பொருள்களை JSON அல்லது XML போன்ற வெவ்வேறு தரவு வடிவங்களுக்கு மேப்பிங் செய்வதற்கு அல்லது வரிசை நீக்கம் செய்வதற்கு முன் தரவை சரிபார்க்க இது பயனுள்ளதாக இருக்கும்.
நீங்கள் ஒரு வகுப்பை JSON க்கு வரிசைப்படுத்த விரும்பும் ஒரு சூழ்நிலையை கருத்தில் கொள்ளுங்கள், ஆனால் நீங்கள் சில பண்புகளை விலக்கவோ அல்லது மறுபெயரிடவோ விரும்புகிறீர்கள். வரிசைப்படுத்தல் விதிகளைச் சொல்ல அலங்கரிப்பான்களைப் பயன்படுத்தலாம், பின்னர் வரிசைப்படுத்தலைச் செய்ய தரவைப் பயன்படுத்தலாம்.
import 'reflect-metadata';
const Exclude = (): PropertyDecorator => {
return (target: any, propertyKey: string | symbol) => {
Reflect.defineMetadata('serialize:exclude', true, target, propertyKey);
};
};
const Rename = (newName: string): PropertyDecorator => {
return (target: any, propertyKey: string | symbol) => {
Reflect.defineMetadata('serialize:rename', newName, target, propertyKey);
};
};
class User {
@Exclude()
id: number;
@Rename('fullName')
name: string;
email: string;
constructor(id: number, name: string, email: string) {
this.id = id;
this.name = name;
this.email = email;
}
}
function serialize(obj: any): string {
const serialized: any = {};
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const exclude = Reflect.getMetadata('serialize:exclude', obj, key);
if (exclude) {
continue;
}
const rename = Reflect.getMetadata('serialize:rename', obj, key);
const newKey = rename || key;
serialized[newKey] = obj[key];
}
}
return JSON.stringify(serialized);
}
const user = new User(1, 'John Doe', 'john.doe@example.com');
const serializedUser = serialize(user);
console.log(serializedUser); // Output: {"fullName":"John Doe","email":"john.doe@example.com"}
இந்த எடுத்துக்காட்டில், @Exclude அலங்கரிப்பான் id சொத்தை வரிசைப்படுத்தலில் இருந்து விலக்கப்பட்டதாகக் குறிக்கிறது, மேலும் @Rename அலங்கரிப்பான் name சொத்தை fullName என மறுபெயரிடுகிறது. serialize செயல்பாடு வரையறுக்கப்பட்ட விதிகளின்படி வரிசைப்படுத்தலைச் செய்ய தரவைப் பயன்படுத்துகிறது.
சரிபார்ப்பு
வகுப்புகள் மற்றும் பண்புகளுக்கான சரிபார்ப்பு தர்க்கத்தை செயல்படுத்த அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் பயன்படுத்தலாம். தரவு செயலாக்கப்படுவதற்கு அல்லது சேமிக்கப்படுவதற்கு முன்பு சில அளவுகோல்களை பூர்த்தி செய்வதை உறுதி செய்வதற்கு இது பயனுள்ளதாக இருக்கும்.
ஒரு சொத்து காலியாக இல்லை அல்லது அது ஒரு குறிப்பிட்ட வழக்கமான வெளிப்பாட்டுடன் பொருந்த வேண்டும் என்பதை நீங்கள் சரிபார்க்க விரும்பும் ஒரு சூழ்நிலையை கருத்தில் கொள்ளுங்கள். சரிபார்ப்பு விதிகளைச் சொல்ல அலங்கரிப்பான்களைப் பயன்படுத்தலாம், பின்னர் சரிபார்ப்பைச் செய்ய தரவைப் பயன்படுத்தலாம்.
import 'reflect-metadata';
const Required = (): PropertyDecorator => {
return (target: any, propertyKey: string | symbol) => {
Reflect.defineMetadata('validate:required', true, target, propertyKey);
};
};
const Pattern = (regex: RegExp): PropertyDecorator => {
return (target: any, propertyKey: string | symbol) => {
Reflect.defineMetadata('validate:pattern', regex, target, propertyKey);
};
};
class Product {
@Required()
name: string;
@Pattern(/^\d+$/)
price: string;
constructor(name: string, price: string) {
this.name = name;
this.price = price;
}
}
function validate(obj: any): string[] {
const errors: string[] = [];
for (const key in obj) {
if (obj.hasOwnProperty(key)) {
const required = Reflect.getMetadata('validate:required', obj, key);
if (required && !obj[key]) {
errors.push(`${key} is required`);
}
const pattern = Reflect.getMetadata('validate:pattern', obj, key);
if (pattern && !pattern.test(obj[key])) {
errors.push(`${key} must match ${pattern}`);
}
}
}
return errors;
}
const product = new Product('', 'abc');
const errors = validate(product);
console.log(errors); // Output: ["name is required", "price must match /^\d+$/"]
இந்த எடுத்துக்காட்டில், @Required அலங்கரிப்பான் name சொத்தை தேவை என்று குறிக்கிறது, மேலும் @Pattern அலங்கரிப்பான் price சொத்து பொருந்த வேண்டிய ஒரு வழக்கமான வெளிப்பாட்டைக் குறிப்பிடுகிறது. validate செயல்பாடு சரிபார்ப்பைச் செய்ய தரவைப் பயன்படுத்துகிறது மற்றும் பிழைகளின் வரிசையை வழங்குகிறது.
AOP (அம்சம் சார்ந்த நிரலாக்கம்)
AOP என்பது ஒரு நிரலாக்க முன்னுதாரணமாகும், இது குறுக்கு வெட்டு கவலைகளைப் பிரிப்பதன் மூலம் தொகுதித்தன்மையை அதிகரிக்கச் செய்கிறது. அலங்கரிப்பான்கள் இயற்கையாகவே AOP சூழ்நிலைகளுக்குத் தங்களை வழங்குகின்றன. எடுத்துக்காட்டாக, பதிவு செய்தல், தணிக்கை மற்றும் பாதுகாப்பு சோதனைகள் ஆகியவை அலங்கரிப்பான்களாக செயல்படுத்தப்படலாம் மற்றும் முக்கிய முறை தர்க்கத்தை மாற்றாமல் முறைகளுக்கு பயன்படுத்தப்படலாம்.
எடுத்துக்காட்டு: அலங்கரிப்பான்களைப் பயன்படுத்தி ஒரு பதிவு செய்யும் அம்சத்தை செயல்படுத்தவும்.
import 'reflect-metadata';
function LogMethod(target: any, propertyKey: string, descriptor: PropertyDescriptor) {
const originalMethod = descriptor.value;
descriptor.value = function (...args: any[]) {
console.log(`Entering method: ${propertyKey} with arguments: ${JSON.stringify(args)}`);
const result = originalMethod.apply(this, args);
console.log(`Exiting method: ${propertyKey} with result: ${result}`);
return result;
};
return descriptor;
}
class Calculator {
@LogMethod
add(a: number, b: number): number {
return a + b;
}
@LogMethod
subtract(a: number, b: number): number {
return a - b;
}
}
const calculator = new Calculator();
calculator.add(5, 3);
calculator.subtract(10, 2);
// Output:
// Entering method: add with arguments: [5,3]
// Exiting method: add with result: 8
// Entering method: subtract with arguments: [10,2]
// Exiting method: subtract with result: 8
இந்த குறியீடு add மற்றும் subtract முறைகளுக்கான நுழைவு மற்றும் வெளியேறும் புள்ளிகளைப் பதிவு செய்யும், கால்குலேட்டரின் முக்கிய செயல்பாட்டிலிருந்து பதிவு செய்யும் கவலையை திறம்படப் பிரிக்கிறது.
அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் பயன்படுத்துவதன் நன்மைகள்
JavaScript இல் அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் பயன்படுத்துவது பல நன்மைகளை வழங்குகிறது:
- மேம்படுத்தப்பட்ட குறியீடு வாசிப்புத்திறன்: அலங்கரிப்பான்கள் வகுப்புகள் மற்றும் அவற்றின் உறுப்பினர்களின் நடத்தையை மாற்ற அல்லது நீட்டிக்க ஒரு சுருக்கமான மற்றும் அறிவிப்பு வழியை வழங்குகின்றன, குறியீட்டைப் படிக்கவும் புரிந்துகொள்ளவும் எளிதாக்குகிறது.
- அதிகரித்த தொகுதித்தன்மை: அலங்கரிப்பான்கள் கவலைகளைப் பிரிப்பதை ஊக்குவிக்கின்றன, குறுக்கு வெட்டு கவலைகளை தனிமைப்படுத்தவும் குறியீடு நகலைத் தவிர்க்கவும் உங்களை அனுமதிக்கின்றன.
- மேம்படுத்தப்பட்ட பராமரிப்புத்தன்மை: கவலைகளைப் பிரிப்பதன் மூலமும் குறியீடு நகலைக்குறைப்பதன் மூலமும், அலங்கரிப்பான்கள் குறியீட்டைப் பராமரிக்கவும் புதுப்பிக்கவும் எளிதாக்குகின்றன.
- அதிக நெகிழ்வுத்தன்மை: இயக்க நேரத்தில் தரவை அணுக தரவு பிரதிபலிப்பு உங்களை அனுமதிக்கிறது, மேலும் நெகிழ்வான மற்றும் கட்டமைக்கக்கூடிய பயன்பாடுகளை உருவாக்க உங்களை அனுமதிக்கிறது.
- AOP இயக்கம்: அலங்கரிப்பான்கள் முறைகளின் முக்கிய தர்க்கத்தை மாற்றாமல் அம்சங்களைப் பயன்படுத்த அனுமதிப்பதன் மூலம் AOP ஐ எளிதாக்குகின்றன.
சவால்கள் மற்றும் பரிசீலனைகள்
அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பு ஏராளமான நன்மைகளை வழங்கும் அதே வேளையில், மனதில் கொள்ள வேண்டிய சில சவால்கள் மற்றும் பரிசீலனைகள் உள்ளன:
- செயல்திறன் மேலீடு: தரவு பிரதிபலிப்பு சில செயல்திறன் மேலீட்டை அறிமுகப்படுத்தலாம், குறிப்பாக அதிகமாகப் பயன்படுத்தினால்.
- சிக்கலானது: அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் புரிந்துகொள்வதற்கும் பயன்படுத்துவதற்கும் JavaScript மற்றும்
reflect-metadataநூலகத்தைப் பற்றிய ஆழமான புரிதல் தேவைப்படுகிறது. - பிழைதிருத்தம்: பாரம்பரிய குறியீட்டை பிழைதிருத்துவதை விட அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் பயன்படுத்தும் குறியீட்டை பிழைதிருத்துவது மிகவும் சவாலானது.
- இணக்கத்தன்மை: அலங்கரிப்பான்கள் இன்னும் ஒரு நிலை 2 ECMAScript முன்மொழிவாகும், மேலும் அவற்றின் செயல்படுத்தல் வெவ்வேறு JavaScript சூழல்களில் மாறுபடலாம். TypeScript சிறந்த ஆதரவை வழங்குகிறது, ஆனால் இயக்க நேர நிரப்பு அவசியம் என்பதை நினைவில் கொள்ளுங்கள்.
சிறந்த நடைமுறைகள்
அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பை திறம்பட பயன்படுத்த, பின்வரும் சிறந்த நடைமுறைகளைக் கவனியுங்கள்:
- அலங்கரிப்பான்களை குறைவாகப் பயன்படுத்தவும்: குறியீடு வாசிப்புத்திறன், தொகுதித்தன்மை அல்லது பராமரிப்பு அடிப்படையில் அவை ஒரு தெளிவான நன்மையை வழங்கும் போது அலங்கரிப்பான்களைப் பயன்படுத்தவும். அலங்கரிப்பான்களை அதிகமாகப் பயன்படுத்துவதைத் தவிர்க்கவும், ஏனெனில் அவை குறியீட்டை மிகவும் சிக்கலாக்கி பிழைதிருத்த கடினமாக்கும்.
- அலங்கரிப்பான்களை எளிமையாக வைத்திருங்கள்: ஒற்றை பொறுப்பில் அலங்கரிப்பான்களை கவனம் செலுத்துங்கள். பல பணிகளைச் செய்யும் சிக்கலான அலங்கரிப்பான்களை உருவாக்குவதைத் தவிர்க்கவும்.
- அலங்கரிப்பான்களை ஆவணப்படுத்தவும்: ஒவ்வொரு அலங்கரிப்பாளரின் நோக்கத்தையும் பயன்பாட்டையும் தெளிவாக ஆவணப்படுத்தவும். இது மற்ற டெவலப்பர்கள் உங்கள் குறியீட்டைப் புரிந்துகொண்டு பயன்படுத்த எளிதாக்கும்.
- அலங்கரிப்பான்களை முழுமையாக சோதிக்கவும்: உங்கள் அலங்கரிப்பான்கள் சரியாக வேலை செய்கின்றன என்பதையும் அவை எதிர்பாராத பக்க விளைவுகளை ஏற்படுத்தாது என்பதையும் உறுதிப்படுத்த அவற்றை முழுமையாக சோதிக்கவும்.
- ஒரு நிலையான பெயரிடும் மரபைப் பயன்படுத்தவும்: குறியீடு வாசிப்புத்திறனை மேம்படுத்த அலங்கரிப்பான்களுக்கு ஒரு நிலையான பெயரிடும் மரபைப் பின்பற்றவும். உதாரணமாக, அனைத்து அலங்கரிப்பான் பெயர்களையும்
@உடன் முன்னொட்டாக வைக்கலாம்.
அலங்கரிப்பான்களுக்கு மாற்றுகள்
வகுப்புகள் மற்றும் முறைகளுக்கு செயல்பாட்டைச் சேர்ப்பதற்கான ஒரு சக்திவாய்ந்த வழிமுறையை அலங்கரிப்பான்கள் வழங்கும் அதே வேளையில், அலங்கரிப்பான்கள் கிடைக்காத அல்லது பொருத்தமற்ற சூழ்நிலைகளில் பயன்படுத்தக்கூடிய மாற்று அணுகுமுறைகள் உள்ளன.
உயர்-வரிசை செயல்பாடுகள்
உயர்-வரிசை செயல்பாடுகள் (HOFs) என்பது மற்ற செயல்பாடுகளை வாதங்களாக எடுக்கும் அல்லது செயல்பாடுகளை முடிவுகளாக வழங்கும் செயல்பாடுகள் ஆகும். பதிவு செய்தல், சரிபார்ப்பு மற்றும் அங்கீகாரம் போன்ற அலங்கரிப்பான்களைப் போன்ற அதே வடிவங்களை செயல்படுத்த HOF களைப் பயன்படுத்தலாம்.
கலவைகள்
கலவைகள் என்பது மற்ற வகுப்புகளுடன் அவற்றை உருவாக்குவதன் மூலம் வகுப்புகளுக்கு செயல்பாட்டைச் சேர்ப்பதற்கான ஒரு வழியாகும். கலவைகளை பல வகுப்புகளுக்கு இடையே குறியீட்டைப் பகிரவும் குறியீடு நகலைத் தவிர்க்கவும் பயன்படுத்தலாம்.
குரங்கு ஒட்டுதல்
குரங்கு ஒட்டுதல் என்பது இயக்க நேரத்தில் ஏற்கனவே உள்ள குறியீட்டின் நடத்தையை மாற்றுவதாகும். வகுப்புகள் மற்றும் முறைகளின் மூலக் குறியீட்டை மாற்றாமல் அவற்றுக்கு செயல்பாட்டைச் சேர்க்க குரங்கு ஒட்டுதலைப் பயன்படுத்தலாம். இருப்பினும், குரங்கு ஒட்டுதல் ஆபத்தானது மற்றும் எச்சரிக்கையுடன் பயன்படுத்தப்பட வேண்டும், ஏனெனில் இது எதிர்பாராத பக்க விளைவுகளுக்கு வழிவகுக்கும் மற்றும் குறியீட்டைப் பராமரிக்க கடினமாக்கும்.
முடிவுரை
JavaScript அலங்கரிப்பான்கள், தரவு பிரதிபலிப்புடன் இணைந்து, குறியீடு தொகுதித்தன்மை, பராமரிப்பு மற்றும் நெகிழ்வுத்தன்மையை மேம்படுத்துவதற்கான சக்திவாய்ந்த கருவிகளின் தொகுப்பை வழங்குகின்றன. இயக்க நேர தரவு அணுகலை செயல்படுத்துவதன் மூலம், அவை சார்பு ஊசி, வரிசைப்படுத்துதல், சரிபார்ப்பு மற்றும் AOP போன்ற மேம்பட்ட செயல்பாடுகளைத் திறக்கின்றன. செயல்திறன் மேலீடு மற்றும் சிக்கலானது போன்ற பரிசீலிக்க வேண்டிய சவால்கள் இருந்தாலும், அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பைப் பயன்படுத்துவதன் நன்மைகள் குறைபாடுகளை விட அதிகமாக இருக்கும். சிறந்த நடைமுறைகளைப் பின்பற்றுவதன் மூலமும், மாற்றுகளைப் புரிந்துகொள்வதன் மூலமும், டெவலப்பர்கள் இந்த நுட்பங்களைப் பயன்படுத்தி மிகவும் வலுவான மற்றும் அளவிடக்கூடிய JavaScript பயன்பாடுகளை உருவாக்க முடியும். JavaScript தொடர்ந்து உருவாகி வருவதால், நவீன வலை மேம்பாட்டில் சிக்கலை நிர்வகிக்கவும் குறியீடு மறுபயன்பாட்டை ஊக்குவிக்கவும் அலங்கரிப்பான்கள் மற்றும் தரவு பிரதிபலிப்பு ஆகியவை பெருகிய முறையில் முக்கியத்துவம் பெறுகின்றன.
இந்த கட்டுரை JavaScript அலங்கரிப்பான்கள், தரவு மற்றும் பிரதிபலிப்பு ஆகியவற்றின் விரிவான கண்ணோட்டத்தை வழங்குகிறது, அவற்றின் தொடரியல், பயன்பாட்டு வழக்குகள் மற்றும் சிறந்த நடைமுறைகளை உள்ளடக்கியது. இந்த கருத்துக்களைப் புரிந்துகொள்வதன் மூலம், டெவலப்பர்கள் JavaScript இன் முழு திறனையும் திறக்கலாம் மற்றும் அதிக சக்திவாய்ந்த மற்றும் பராமரிக்கக்கூடிய பயன்பாடுகளை உருவாக்க முடியும்.
இந்த நுட்பங்களைப் பின்பற்றுவதன் மூலம், உலகெங்கிலும் உள்ள டெவலப்பர்கள் அதிக தொகுதி, பராமரிக்கக்கூடிய மற்றும் அளவிடக்கூடிய JavaScript சுற்றுச்சூழல் அமைப்புக்கு பங்களிக்க முடியும்.