பாதுகாப்பான அணுகல் மற்றும் வலியுறுத்தலுக்கான டைப்ஸ்கிரிப்ட் ஆபரேட்டர்களை ஆய்வு செய்தல்
உடன் பணிபுரியும் போது , டெவலப்பர்கள் பெரும்பாலும் ஒரு பொருளின் பண்புகள் அல்லது முறைகளை அணுக வேண்டிய சூழ்நிலைகளை சந்திக்கின்றனர் அல்லது . இந்த சூழ்நிலைகளில், தி ! (ஆச்சரியக்குறி) மற்றும் ஆபரேட்டர்கள் செயல்பாட்டுக்கு வருகிறார்கள். இந்த ஆபரேட்டர்கள், டைப்ஸ்கிரிப்ட் எவ்வாறு கையாளப்படுகிறது என்பதைக் கட்டுப்படுத்த டெவலப்பர்களை அனுமதிக்கின்றனர் பூஜ்ய அல்லது வரையறுக்கப்படாத மதிப்புகள்.
தி ஆபரேட்டர், பொதுவாக "பூஜ்யமற்ற வலியுறுத்தல் ஆபரேட்டர்" என்று அறியப்படுகிறது, இது மாறி அல்லது வெளிப்பாடு அணுகப்படவில்லை என்று டைப்ஸ்கிரிப்ட் கம்பைலருக்குச் சொல்லப் பயன்படுகிறது. அல்லது . மறுபுறம், தி ?. ஆபரேட்டர், அல்லது "விரும்பினால் செயினிங் ஆபரேட்டர்", அதன் பண்புகள் அல்லது முறைகளை அணுக முயற்சிக்கும் முன், பொருள் இருக்கிறதா என்று பாதுகாப்பாகச் சரிபார்க்கிறது.
பயன்பாடுகளை உருவாக்கும் போது இந்த நுட்பமான வேறுபாடு முக்கியமானது வரையறுக்கப்படாத மதிப்புகளை அணுகுவது குறிப்பிடத்தக்க சிக்கல்களை ஏற்படுத்தும். இந்த இரண்டு ஆபரேட்டர்களும் குறியீடு பாதுகாப்பு மற்றும் வாசிப்புத்திறனை மேம்படுத்த உதவுகின்றன, ஆனால் அவை வெவ்வேறு நோக்கங்களுக்காகப் பயன்படுத்தப்படுகின்றன.
இடையே உள்ள முக்கிய வேறுபாடுகளைப் புரிந்துகொள்வது மற்றும் டெவலப்பர்கள் மேலும் எழுத உதவலாம் , வரையறுக்கப்படாத தரவுகளுடன் பணிபுரியும் போது ஏற்படும் பொதுவான ஆபத்துக்களைத் தவிர்ப்பது. இந்த கட்டுரையில், இந்த கருத்துகளின் பயன்பாட்டை விளக்குவதற்கு எடுத்துக்காட்டுகளுடன் ஆழமாக மூழ்கடிப்போம்.
கட்டளை | பயன்பாட்டின் உதாரணம் |
---|---|
மதிப்பு இரண்டும் இல்லை என்று கருதுவதற்கு TypeScript ஐ கட்டாயப்படுத்துகிறது அல்லது இல்லை , பூஜ்ய காசோலைகளை புறக்கணித்தல்.எடுத்துக்காட்டு: const தரவு = obj!.data; | |
ஒரு பொருளின் பண்புகள் அல்லது முறைகளை பாதுகாப்பாக அணுகலாம் அல்லது .எடுத்துக்காட்டு: const தரவு = obj?.data; | |
ஒரு செயல்பாடு அல்லது மதிப்பின் எதிர்பார்க்கப்படும் வெளியீட்டைப் பற்றி வலியுறுத்த யூனிட் சோதனைகளில் பயன்படுத்தப்படுகிறது.உதாரணம்: எதிர்பார்ப்பு(முடிவு) to.equal('Test'); | |
கன்சோலுக்கு தரவை வெளியிடுகிறது, இது பெரும்பாலும் பிழைத்திருத்த நோக்கங்களுக்காகப் பயன்படுத்தப்படுகிறது.எடுத்துக்காட்டு: console.log(data); | |
அநாமதேய செயல்பாடுகளை ஒரு சுருக்கமான வழியில் வரையறுக்கிறது, அடிக்கடி அழைப்பு செயல்பாடுகளில் பயன்படுத்தப்படுகிறது.Example: const obj = { doSomething: () =>எடுத்துக்காட்டு: const obj = {doSomething: () => console.log('Action')}; | |
இரண்டும் இருக்கும் சூழ்நிலைகளில் பயன்படுத்தப்படுகிறது மற்றும் மதிப்புகள் பாதுகாப்பாக கையாளப்பட வேண்டும்.உதாரணம்: const result = obj?.data; | |
குறியீட்டின் ஒரு பகுதியின் நடத்தையைச் சரிபார்க்கும் சோதனை வழக்கை வரையறுக்கிறது.Example: it('should return data', () =>எடுத்துக்காட்டு: அது('தரவைத் தர வேண்டும்', () => {...}); | |
டைப்ஸ்கிரிப்ட் அல்லது ஜாவாஸ்கிரிப்டில் பண்புகள் மற்றும் மதிப்புகள் கொண்ட ஒரு பொருள் கட்டமைப்பைக் குறிக்கிறது.எடுத்துக்காட்டு: const obj = {தரவு: 'சோதனை'}; |
டைப்ஸ்கிரிப்டில் பூஜ்யமற்ற கூற்று மற்றும் விருப்ப சங்கிலியைப் புரிந்துகொள்வது
ஸ்கிரிப்ட்களின் முதல் தொகுப்பு இரண்டு முக்கியமான டைப்ஸ்கிரிப்ட் அம்சங்களை ஆராய்கிறது: தி ஆபரேட்டர் (!) மற்றும் ஆபரேட்டர் (?.). பூஜ்யமற்ற கூற்று என்பது டைப்ஸ்கிரிப்ட் கம்பைலருக்கு ஒரு மதிப்பு பூஜ்யமாகவோ அல்லது வரையறுக்கப்படாததாகவோ இருப்பதற்கான நேரடி வழியாகும். தொகுக்கும் நேரத்தில் டைப்ஸ்கிரிப்ட் அதை நிரூபிக்க முடியாவிட்டாலும், இயக்க நேரத்தில் ஒரு பொருள் இருக்கும் என்று நாம் உறுதியாக நம்பும்போது இது மிகவும் பயனுள்ளதாக இருக்கும். உதாரணமாக, இல் , நாங்கள் கம்பைலரிடம் ஏதேனும் பூஜ்ய சரிபார்ப்புகளைத் தவிர்த்துவிட்டு obj இருப்பதாகக் கருதுகிறோம். இந்த அணுகுமுறை, வசதியாக இருந்தாலும், வழிவகுக்கும் இயக்க நேர பிழைகள் பொருள் பூஜ்யமாக அல்லது வரையறுக்கப்படாததாக மாறினால்.
மறுபுறம், விருப்ப செயினிங் ஆபரேட்டர் பூஜ்யமாக இருக்கும் ஒரு பொருளில் உள்ள உள்ளமை பண்புகள் அல்லது முறைகளை அணுக ஒரு பாதுகாப்பான முறையை வழங்குகிறது. வழக்கில் , தரவுப் பண்புகளை அணுக முயற்சிக்கும் முன், பொருள் இருக்கிறதா என்று குறியீடு சரிபார்க்கிறது. பொருள் பூஜ்யமாகவோ அல்லது வரையறுக்கப்படாததாகவோ இருந்தால், அது பிழையை வீசுவதற்குப் பதிலாக வரையறுக்கப்படாமல் திரும்பும். பொருள்கள் நிபந்தனையுடன் உருவாக்கப்படும் அல்லது APIகள் போன்ற வெளிப்புற மூலங்களிலிருந்து பெறப்படும் மாறும் சூழல்களில் இந்த முறை மிகவும் பயனுள்ளதாக இருக்கும். இது செயலிழப்புகள் அல்லது எதிர்பாராத நடத்தைகளைத் தடுக்கிறது, மேலும் உங்கள் குறியீட்டை அதிகமாக்குகிறது .
இரண்டாவது உதாரணம் இந்த ஆபரேட்டர்களைப் பயன்படுத்தி செயல்பாட்டு அழைப்புகளில் கவனம் செலுத்துகிறது. பூஜ்யமற்ற வலியுறுத்தலுடன், பொருள் மற்றும் முறை இரண்டும் இருப்பதைக் கருத்தில் கொண்டு, ஒரு முறையின் அழைப்பை கட்டாயப்படுத்துகிறோம். . டெவலப்பர் தரவு மீது முழுக் கட்டுப்பாட்டைக் கொண்டிருக்கும் சூழ்நிலைகளில் இது உதவியாக இருக்கும், ஆனால் அனுமானம் தோல்வியுற்றால் அது ஆபத்தை ஏற்படுத்தும். முறை இல்லாவிட்டால் அல்லது பொருள் பூஜ்யமாக இருந்தால், நிரல் விதிவிலக்கு அளிக்கும். இது பூஜ்யமற்ற வலியுறுத்தலை அதிக ஆபத்து, அதிக வெகுமதி கருவியாக மாற்றுகிறது.
செயல்பாடு அழைப்புகளுக்கு விருப்ப சங்கிலி பயன்படுத்தப்படுகிறது , செயல்படுத்த முயற்சிக்கும் முன் முறை உள்ளதா எனச் சரிபார்ப்பதன் மூலம் இதுபோன்ற இயக்க நேரப் பிழைகளைத் தடுக்கிறது. முறை அல்லது பொருள் வரையறுக்கப்படாமல் இருந்தால், எதுவும் நடக்காது, மேலும் நிரல் பிழையின்றி தொடர்ந்து செயல்படுத்துகிறது. பொருளானது மாறும் வகையில் எடுக்கப்பட்ட அல்லது நிரலின் சில நிலைகளில் வரையறுக்கப்படாத சூழ்நிலைகளில் இந்த நுட்பம் மிகவும் பரிந்துரைக்கப்படுகிறது. இது பாதுகாப்பான செயல்பாட்டிற்கு அனுமதிக்கிறது மற்றும் வெர்போஸ் பூஜ்ய சரிபார்ப்பு குறியீட்டின் தேவையை குறைக்கிறது, இரண்டையும் மேம்படுத்துகிறது மற்றும் குறியீடு வாசிப்புத்திறன்.
டைப்ஸ்கிரிப்டில் பூஜ்யமற்ற கூற்று மற்றும் விருப்ப சங்கிலியைக் கையாளுதல்
டைப்ஸ்கிரிப்ட் - பொருளின் சொத்து அணுகலுக்கான பூஜ்யமற்ற வலியுறுத்தல் மற்றும் விருப்ப சங்கிலியைப் பயன்படுத்தி முகப்பு சூழல்
// Example 1: Using non-null assertion operator (!)
// The assumption here is that obj is definitely not null or undefined
const obj: { data?: string } | null = { data: 'Hello' };
const data: string = obj!.data; // Non-null assertion, ignores potential null/undefined
console.log(data); // Output: 'Hello'
// Example 2: Optional chaining (?.) for safer access
// This approach checks if obj exists before accessing data property
const obj2: { data?: string } | null = null;
const data2: string | undefined = obj2?.data; // Safely returns undefined if obj2 is null
console.log(data2); // Output: undefined
// Note: The first approach forces the compiler to assume obj is not null
// The second approach ensures no runtime error if obj is null or undefined
பூஜ்யமற்ற உறுதிப்பாட்டுடன் பாதுகாப்பான செயல்பாடு அழைப்பு மற்றும் விருப்ப சங்கிலி
டைப்ஸ்கிரிப்ட் - பிழை கையாளுதல் மற்றும் பாதுகாப்பான அணுகலுடன் ஆப்ஜெக்ட் செயல்பாடு அழைப்புகளை உள்ளடக்கிய முகப்பு சூழல்
// Example 1: Using non-null assertion operator for function invocation
// Assumes obj is not null or undefined before invoking the method
const objFunc: { doSomething?: () => void } | null = { doSomething: () => console.log('Action') };
objFunc!.doSomething(); // Forces execution, assuming objFunc is valid
// Example 2: Optional chaining operator for function invocation
// This approach safely checks if objFunc exists before calling the method
const objFunc2: { doSomething?: () => void } | null = null;
objFunc2?.doSomething(); // No error thrown, simply does nothing if objFunc2 is null
// Conclusion: Non-null assertion is riskier but direct, while optional chaining is safer but may return undefined
பூஜ்யமற்ற உறுதிப்பாடு மற்றும் விருப்ப சங்கிலிக்கான அலகு சோதனைகள்
டைப்ஸ்கிரிப்ட் - வெவ்வேறு சூழல்களில் இரண்டு அணுகுமுறைகளையும் சோதிக்கும் அலகு
// Unit Test 1: Testing non-null assertion operator (!)
import { expect } from 'chai';
it('should return data with non-null assertion', () => {
const obj = { data: 'Test' };
const result = obj!.data;
expect(result).to.equal('Test');
});
// Unit Test 2: Testing optional chaining operator (?.)
it('should return undefined if obj is null using optional chaining', () => {
const obj = null;
const result = obj?.data;
expect(result).to.be.undefined;
});
// Ensures both methods behave as expected in null/undefined scenarios
மேம்பட்ட நுட்பங்கள்: பூஜ்யமற்ற கூற்றுகளை ஆராய்தல் மற்றும் விருப்ப சங்கிலி
அடிப்படை பயன்பாட்டு நிகழ்வுகளுக்கு கூடுதலாக மற்றும் முன்னர் விவாதிக்கப்பட்டது, இந்த ஆபரேட்டர்கள் சிக்கலான தரவு கட்டமைப்புகளை கையாள்வதில் முக்கிய பங்கு வகிக்கின்றனர், குறிப்பாக பெரிய அளவிலான பயன்பாடுகளில். ஆழமாக உள்ளமைக்கப்பட்ட பொருள்கள் அல்லது API களில் இருந்து பெறப்பட்ட பெரிய தரவுத்தொகுப்புகளுடன் பணிபுரியும் போது, பயன்பாட்டு வாழ்க்கைச் சுழற்சியின் வெவ்வேறு நிலைகளில் சில பண்புகள் இருக்கலாம் அல்லது இல்லாத சூழ்நிலைகளை சந்திப்பது பொதுவானது. விருப்ப சங்கிலியைப் பயன்படுத்துவதன் மூலம், டெவலப்பர்கள் படிநிலையில் உள்ள ஒவ்வொரு சொத்துக்கும் பூஜ்ய காசோலைகளை மீண்டும் மீண்டும் சேர்க்காமல் தூய்மையான மற்றும் மிகவும் பராமரிக்கக்கூடிய குறியீட்டை எழுதலாம்.
கருத்தில் கொள்ள வேண்டிய மற்றொரு முக்கியமான அம்சம் என்னவென்றால், இந்த ஆபரேட்டர்கள் டைப்ஸ்கிரிப்ட்டின் கண்டிப்பான பயன்முறையுடன் எவ்வாறு தொடர்பு கொள்கிறார்கள் என்பதுதான். கடுமையான பயன்முறையில், டைப்ஸ்கிரிப்ட் கடுமையான பூஜ்ய மற்றும் வரையறுக்கப்படாத சோதனைகளைச் செயல்படுத்துகிறது, இது வரையறுக்கப்படாத பண்புகளை அணுகுவது மிகவும் சவாலானது. தி சாத்தியமான பூஜ்ய மதிப்புகள் பற்றிய டைப்ஸ்கிரிப்ட்டின் எச்சரிக்கைகளைத் தவிர்க்க, டெவலப்பர்களை ஆபரேட்டர் அனுமதிக்கிறது, ஆனால் இது எச்சரிக்கையுடன் பயன்படுத்தப்பட வேண்டும், ஏனெனில் தவறாகப் பயன்படுத்தினால் இயக்க நேரப் பிழைகள் ஏற்படலாம். எனவே, தி ஒரு பொருள் அல்லது சொத்தின் இருப்பு நிச்சயமற்றதாக இருக்கும் சூழ்நிலைகளில் ஆபரேட்டர் பெரும்பாலும் விரும்பப்படுகிறது.
மேலும், பிற நவீன ஜாவாஸ்கிரிப்ட் அம்சங்களுடன் இணைந்து விருப்ப சங்கிலியைப் பயன்படுத்துதல் (அல்லது ?? ஆபரேட்டர்களைப் பயன்படுத்தி) குறியீடு பாதுகாப்பு மற்றும் வாசிப்புத்திறனை கணிசமாக மேம்படுத்த முடியும். உதாரணமாக, டெவலப்பர்கள் ஒரு பொருளின் சொத்தை பாதுகாப்பாக அணுகலாம் மற்றும் சொத்து வரையறுக்கப்படாமல் இருந்தால், வீழ்ச்சி மதிப்பை வழங்கலாம். இது குறிப்பாக படிவங்கள், பயனர் உள்ளீடுகள் அல்லது மதிப்புகள் இல்லாத அல்லது விருப்பமான உள்ளமைவுகளில் பயனுள்ளதாக இருக்கும், இது குறியீட்டின் வலிமையை மேலும் மேம்படுத்துகிறது.
- பூஜ்யமற்ற உறுதிமொழி ஆபரேட்டர் (!) டைப்ஸ்கிரிப்ட்டில் என்ன செய்கிறது?
- தி ஆபரேட்டர் டைப்ஸ்கிரிப்ட் கம்பைலரிடம் பூஜ்ய அல்லது வரையறுக்கப்படாத காசோலைகளைப் புறக்கணிக்கச் சொல்கிறார், மாறி எப்போதும் வரையறுக்கப்பட்டதாகக் கருதுகிறது.
- பூஜ்யமற்ற உறுதிப்பாட்டிலிருந்து விருப்ப சங்கிலி (?.) எவ்வாறு வேறுபடுகிறது?
- விருப்ப சங்கிலி பண்புகள் அல்லது முறைகளை பாதுகாப்பாக அணுகுகிறது, பொருள் பூஜ்யமாக இருந்தால் வரையறுக்கப்படாமல் திரும்பும் பூஜ்ய சோதனைகள் இல்லாமல் அணுகலை கட்டாயப்படுத்துகிறது.
- நான் எப்போது விருப்ப சங்கிலியைப் பயன்படுத்த வேண்டும்?
- பயன்படுத்தவும் இயக்க நேரப் பிழைகளைத் தடுக்கவும், பண்புகளை பாதுகாப்பாக அணுகவும் சாத்தியமான வரையறுக்கப்படாத அல்லது பூஜ்ய பொருள்களுடன் பணிபுரியும் போது.
- பூஜ்யமற்ற வலியுறுத்தல் இயக்க நேரப் பிழைகளுக்கு வழிவகுக்கும்?
- ஆம், பயன்படுத்தி மதிப்பானது பூஜ்யமாகவோ அல்லது வரையறுக்கப்படாமலோ இருந்தால் இயக்க நேரப் பிழைகளை ஏற்படுத்தலாம், ஏனெனில் இது டைப்ஸ்கிரிப்ட்டின் பாதுகாப்புச் சோதனைகளைத் தவிர்க்கிறது.
- விருப்ப சங்கிலியைப் பயன்படுத்துவதன் நன்மை என்ன?
- விருப்ப சங்கிலி பொருள்களில் வரையறுக்கப்படாத பண்புகளை அணுக முயற்சிக்கும்போது செயலிழப்பைத் தவிர்ப்பதன் மூலம் குறியீடு பாதுகாப்பை மேம்படுத்துகிறது.
முடிவில், தி ஒரு மதிப்பு பூஜ்யமாக இருக்காது என்று நீங்கள் நம்பும்போது, ஆபரேட்டர் (!) பயனுள்ளதாக இருக்கும். இது TypeScript ஐ பாதுகாப்பு சோதனைகளை புறக்கணிக்க கட்டாயப்படுத்துகிறது, ஆனால் எதிர்பாராத இயக்க நேர பிழைகளை தவிர்க்க கவனமாக பயன்படுத்த வேண்டும். இந்த ஆபரேட்டர் உங்களுக்கு கட்டுப்பாட்டை வழங்குகிறது ஆனால் ஆபத்துகளுடன் வருகிறது.
மறுபுறம், தி ஆபரேட்டர் (?.) என்பது பண்புகள் மற்றும் முறைகளை அணுகுவதற்கான பாதுகாப்பான மாற்றாகும். பொருள் அல்லது சொத்து இல்லாதபோது வரையறுக்கப்படாமல் திரும்புவதன் மூலம் விபத்துகளைத் தடுக்க இது உதவுகிறது, மேலும் உங்கள் டைப்ஸ்கிரிப்ட் குறியீட்டை மிகவும் நம்பகமானதாகவும் சிக்கலான சூழ்நிலைகளில் பராமரிக்கக்கூடியதாகவும் மாற்றுகிறது.
- இந்த கட்டுரை டைப்ஸ்கிரிப்ட் ஆவணத்தால் ஈர்க்கப்பட்டது, இது எவ்வாறு வேலை செய்வது என்பதை விளக்குகிறது மற்றும் ஆபரேட்டர்கள். அதிகாரியிடம் மேலும் படிக்கவும் டைப்ஸ்கிரிப்ட் ஆவணப்படுத்தல் .
- ஜாவாஸ்கிரிப்ட் கையாளுதலின் கூடுதல் சூழலுக்கு மற்றும் மதிப்புகள், வருகை MDN வெப் டாக்ஸ் .
- நிஜ உலக டைப்ஸ்கிரிப்ட் பயன்பாடு பற்றிய நுண்ணறிவுகளை இந்த வலைப்பதிவு இடுகையில் காணலாம் LogRocket வலைப்பதிவு , இது சிறந்த நடைமுறைகளைப் பற்றி விவாதிக்கிறது.