தமிழ்

டைப்ஸ்கிரிப்ட் ஃபங்ஷன் ஓவர்லோட்கள் மூலம் பல கையொப்ப வரையறைகளுடன் நெகிழ்வான, வகை-பாதுகாப்பான ஃபங்ஷன்களை உருவாக்குங்கள். தெளிவான எடுத்துக்காட்டுகளுடன் கற்றுக்கொள்ளுங்கள்.

டைப்ஸ்கிரிப்ட் ஃபங்ஷன் ஓவர்லோட்கள்: பல கையொப்ப வரையறைகளில் தேர்ச்சி பெறுதல்

டைப்ஸ்கிரிப்ட், ஜாவாஸ்கிரிப்டின் ஒரு சூப்பர்செட், குறியீட்டின் தரம் மற்றும் பராமரிப்பை மேம்படுத்துவதற்கான சக்திவாய்ந்த அம்சங்களை வழங்குகிறது. மிகவும் மதிப்புமிக்க, ஆனால் சில நேரங்களில் தவறாகப் புரிந்து கொள்ளப்பட்ட அம்சங்களில் ஒன்று ஃபங்ஷன் ஓவர்லோடிங் ஆகும். ஃபங்ஷன் ஓவர்லோடிங், ஒரே ஃபங்ஷனுக்கு பல கையொப்ப வரையறைகளை உருவாக்க உங்களை அனுமதிக்கிறது, இது வெவ்வேறு வகைகள் மற்றும் எண்ணிக்கையிலான ஆர்குமென்ட்களை துல்லியமான வகை பாதுகாப்புடன் கையாள உதவுகிறது. இந்த கட்டுரை டைப்ஸ்கிரிப்ட் ஃபங்ஷன் ஓவர்லோட்களை திறம்பட புரிந்துகொள்வதற்கும் பயன்படுத்துவதற்கும் ஒரு விரிவான வழிகாட்டியை வழங்குகிறது.

ஃபங்ஷன் ஓவர்லோட்கள் என்றால் என்ன?

சுருக்கமாக, ஃபங்ஷன் ஓவர்லோடிங் என்பது ஒரே பெயரில் ஆனால் வெவ்வேறு அளவுரு பட்டியல்களுடன் (அதாவது, வெவ்வேறு எண்ணிக்கை, வகைகள் அல்லது அளவுருக்களின் வரிசை) மற்றும் சாத்தியமான வெவ்வேறு ரிட்டர்ன் வகைகளுடன் ஒரு ஃபங்ஷனை வரையறுக்க உங்களை அனுமதிக்கிறது. டைப்ஸ்கிரிப்ட் கம்பைலர் இந்த பல கையொப்பங்களைப் பயன்படுத்தி, ஒரு ஃபங்ஷன் அழைப்பின் போது அனுப்பப்பட்ட ஆர்குமென்ட்களின் அடிப்படையில் மிகவும் பொருத்தமான ஃபங்ஷன் கையொப்பத்தைத் தீர்மானிக்கிறது. இது மாறுபட்ட உள்ளீட்டைக் கையாள வேண்டிய ஃபங்ஷன்களுடன் பணிபுரியும் போது அதிக நெகிழ்வுத்தன்மை மற்றும் வகை பாதுகாப்பை செயல்படுத்துகிறது.

இதை ஒரு வாடிக்கையாளர் சேவை ஹாட்லைன் போல நினைத்துப் பாருங்கள். நீங்கள் என்ன சொல்கிறீர்கள் என்பதைப் பொறுத்து, தானியங்கு அமைப்பு உங்களை சரியான துறைக்கு வழிநடத்துகிறது. டைப்ஸ்கிரிப்டின் ஓவர்லோட் சிஸ்டம் உங்கள் ஃபங்ஷன் அழைப்புகளுக்கு அதையே செய்கிறது.

ஃபங்ஷன் ஓவர்லோட்களை ஏன் பயன்படுத்த வேண்டும்?

ஃபங்ஷன் ஓவர்லோட்களைப் பயன்படுத்துவது பல நன்மைகளை வழங்குகிறது:

அடிப்படை தொடரியல் மற்றும் கட்டமைப்பு

ஒரு ஃபங்ஷன் ஓவர்லோட் பல கையொப்ப அறிவிப்புகளைக் கொண்டுள்ளது, அதைத் தொடர்ந்து அறிவிக்கப்பட்ட அனைத்து கையொப்பங்களையும் கையாளும் ஒரு ஒற்றை செயல்படுத்துதல் இருக்கும்.

பொதுவான கட்டமைப்பு பின்வருமாறு:


// கையொப்பம் 1
function myFunction(param1: type1, param2: type2): returnType1;

// கையொப்பம் 2
function myFunction(param1: type3): returnType2;

// செயல்படுத்துதல் கையொப்பம் (வெளியில் இருந்து தெரியாது)
function myFunction(param1: type1 | type3, param2?: type2): returnType1 | returnType2 {
  // செயல்படுத்துதல் தர்க்கம் இங்கே
  // அனைத்து சாத்தியமான கையொப்ப சேர்க்கைகளையும் கையாள வேண்டும்
}

முக்கியமான கருத்தாய்வுகள்:

நடைமுறை எடுத்துக்காட்டுகள்

சில நடைமுறை எடுத்துக்காட்டுகளுடன் ஃபங்ஷன் ஓவர்லோட்களை விளக்குவோம்.

எடுத்துக்காட்டு 1: சரம் அல்லது எண் உள்ளீடு

ஒரு ஃபங்ஷனைக் கவனியுங்கள், அது ஒரு சரம் அல்லது எண்ணை உள்ளீடாக எடுத்துக்கொண்டு, உள்ளீட்டு வகையின் அடிப்படையில் மாற்றப்பட்ட மதிப்பைத் திருப்பியளிக்கும்.


// ஓவர்லோட் கையொப்பங்கள்
function processValue(value: string): string;
function processValue(value: number): number;

// செயல்படுத்துதல்
function processValue(value: string | number): string | number {
  if (typeof value === 'string') {
    return value.toUpperCase();
  } else {
    return value * 2;
  }
}

// பயன்பாடு
const stringResult = processValue("hello"); // stringResult: string
const numberResult = processValue(10);    // numberResult: number

console.log(stringResult); // வெளியீடு: HELLO
console.log(numberResult); // வெளியீடு: 20

இந்த எடுத்துக்காட்டில், `processValue`-க்கு இரண்டு ஓவர்லோட் கையொப்பங்களை வரையறுக்கிறோம்: ஒன்று சரம் உள்ளீட்டிற்கும் மற்றொன்று எண் உள்ளீட்டிற்கும். செயல்படுத்துதல் ஃபங்ஷன் ஒரு வகை சோதனையைப் பயன்படுத்தி இரண்டு நிகழ்வுகளையும் கையாள்கிறது. டைப்ஸ்கிரிப்ட் கம்பைலர் ஃபங்ஷன் அழைப்பின் போது வழங்கப்பட்ட உள்ளீட்டின் அடிப்படையில் சரியான ரிட்டர்ன் வகையை ஊகிக்கிறது, இது வகை பாதுகாப்பை மேம்படுத்துகிறது.

எடுத்துக்காட்டு 2: வெவ்வேறு எண்ணிக்கையிலான ஆர்குமென்ட்கள்

ஒரு நபரின் முழுப் பெயரை உருவாக்கக்கூடிய ஒரு ஃபங்ஷனை உருவாக்குவோம். இது ஒரு முதல் பெயர் மற்றும் ஒரு கடைசிப் பெயரை ஏற்கலாம், அல்லது ஒரு முழுப் பெயர் சரத்தை ஏற்கலாம்.


// ஓவர்லோட் கையொப்பங்கள்
function createFullName(firstName: string, lastName: string): string;
function createFullName(fullName: string): string;

// செயல்படுத்துதல்
function createFullName(firstName: string, lastName?: string): string {
  if (lastName) {
    return `${firstName} ${lastName}`;
  } else {
    return firstName; // firstName உண்மையில் fullName என்று ধরেக்கொள்ளுங்கள்
  }
}

// பயன்பாடு
const fullName1 = createFullName("John", "Doe");  // fullName1: string
const fullName2 = createFullName("Jane Smith"); // fullName2: string

console.log(fullName1); // வெளியீடு: John Doe
console.log(fullName2); // வெளியீடு: Jane Smith

இங்கே, `createFullName` ஃபங்ஷன் இரண்டு சூழ்நிலைகளைக் கையாள ஓவர்லோட் செய்யப்பட்டுள்ளது: முதல் மற்றும் கடைசிப் பெயரைத் தனித்தனியாக வழங்குவது, அல்லது ஒரு முழுமையான முழுப் பெயரை வழங்குவது. செயல்படுத்துதல் `lastName?` என்ற ஒரு விருப்ப அளவுருவைப் பயன்படுத்தி இரண்டு நிகழ்வுகளுக்கும் இடமளிக்கிறது. இது பயனர்களுக்கு ஒரு சுத்தமான மற்றும் உள்ளுணர்வுடன் கூடிய API-ஐ வழங்குகிறது.

எடுத்துக்காட்டு 3: விருப்ப அளவுருக்களைக் கையாளுதல்

ஒரு முகவரியை வடிவமைக்கும் ஒரு ஃபங்ஷனைக் கவனியுங்கள். இது தெரு, நகரம் மற்றும் நாடு ஆகியவற்றை ஏற்கலாம், ஆனால் நாடு விருப்பத்தேர்வாக இருக்கலாம் (எ.கா., உள்ளூர் முகவரிகளுக்கு).


// ஓவர்லோட் கையொப்பங்கள்
function formatAddress(street: string, city: string, country: string): string;
function formatAddress(street: string, city: string): string;

// செயல்படுத்துதல்
function formatAddress(street: string, city: string, country?: string): string {
  if (country) {
    return `${street}, ${city}, ${country}`;
  } else {
    return `${street}, ${city}`;
  }
}

// பயன்பாடு
const fullAddress = formatAddress("123 Main St", "Anytown", "USA"); // fullAddress: string
const localAddress = formatAddress("456 Oak Ave", "Springfield");      // localAddress: string

console.log(fullAddress);  // வெளியீடு: 123 Main St, Anytown, USA
console.log(localAddress); // வெளியீடு: 456 Oak Ave, Springfield

இந்த ஓவர்லோட் பயனர்களை நாடுடனோ அல்லது நாடு இல்லாமலோ `formatAddress`-ஐ அழைக்க அனுமதிக்கிறது, இது ஒரு நெகிழ்வான API-ஐ வழங்குகிறது. செயல்படுத்துதலில் உள்ள `country?` அளவுரு அதை விருப்பத்தேர்வாக ஆக்குகிறது.

எடுத்துக்காட்டு 4: இன்டர்ஃபேஸ்கள் மற்றும் யூனியன் வகைகளுடன் பணிபுரிதல்

இன்டர்ஃபேஸ்கள் மற்றும் யூனியன் வகைகளுடன் ஃபங்ஷன் ஓவர்லோடிங்கை நிரூபிப்போம், இது வெவ்வேறு பண்புகளைக் கொண்டிருக்கக்கூடிய ஒரு உள்ளமைவு பொருளை உருவகப்படுத்துகிறது.


interface Square {
  kind: "square";
  size: number;
}

interface Rectangle {
  kind: "rectangle";
  width: number;
  height: number;
}

type Shape = Square | Rectangle;

// ஓவர்லோட் கையொப்பங்கள்
function getArea(shape: Square): number;
function getArea(shape: Rectangle): number;

// செயல்படுத்துதல்
function getArea(shape: Shape): number {
  switch (shape.kind) {
    case "square":
      return shape.size * shape.size;
    case "rectangle":
      return shape.width * shape.height;
  }
}

// பயன்பாடு
const square: Square = { kind: "square", size: 5 };
const rectangle: Rectangle = { kind: "rectangle", width: 4, height: 6 };

const squareArea = getArea(square);       // squareArea: number
const rectangleArea = getArea(rectangle); // rectangleArea: number

console.log(squareArea);    // வெளியீடு: 25
console.log(rectangleArea); // வெளியீடு: 24

இந்த எடுத்துக்காட்டு வெவ்வேறு வடிவ வகைகளைக் குறிக்க இன்டர்ஃபேஸ்கள் மற்றும் ஒரு யூனியன் வகையைப் பயன்படுத்துகிறது. `getArea` ஃபங்ஷன் `Square` மற்றும் `Rectangle` வடிவங்களைக் கையாள ஓவர்லோட் செய்யப்பட்டுள்ளது, `shape.kind` பண்பின் அடிப்படையில் வகை பாதுகாப்பை உறுதி செய்கிறது.

ஃபங்ஷன் ஓவர்லோட்களைப் பயன்படுத்துவதற்கான சிறந்த நடைமுறைகள்

ஃபங்ஷன் ஓவர்லோட்களை திறம்பட பயன்படுத்த, பின்வரும் சிறந்த நடைமுறைகளைக் கவனியுங்கள்:

தவிர்க்க வேண்டிய பொதுவான தவறுகள்

மேம்பட்ட சூழ்நிலைகள்

ஃபங்ஷன் ஓவர்லோட்களுடன் ஜெனரிக்குகளைப் பயன்படுத்துதல்

இன்னும் நெகிழ்வான மற்றும் வகை-பாதுகாப்பான ஃபங்ஷன்களை உருவாக்க ஜெனரிக்குகளை ஃபங்ஷன் ஓவர்லோட்களுடன் இணைக்கலாம். வெவ்வேறு ஓவர்லோட் கையொப்பங்களில் வகை தகவல்களைப் பராமரிக்க வேண்டியிருக்கும் போது இது பயனுள்ளதாக இருக்கும்.


// ஜெனரிக்குகளுடன் ஓவர்லோட் கையொப்பங்கள்
function processArray(arr: T[]): T[];
function processArray(arr: T[], transform: (item: T) => U): U[];

// செயல்படுத்துதல்
function processArray(arr: T[], transform?: (item: T) => U): (T | U)[] {
  if (transform) {
    return arr.map(transform);
  } else {
    return arr;
  }
}

// பயன்பாடு
const numbers = [1, 2, 3];
const doubledNumbers = processArray(numbers, (x) => x * 2); // doubledNumbers: number[]
const strings = processArray(numbers, (x) => x.toString());   // strings: string[]
const originalNumbers = processArray(numbers);                  // originalNumbers: number[]

console.log(doubledNumbers);  // வெளியீடு: [2, 4, 6]
console.log(strings);         // வெளியீடு: ['1', '2', '3']
console.log(originalNumbers); // வெளியீடு: [1, 2, 3]

இந்த எடுத்துக்காட்டில், `processArray` ஃபங்ஷன் அசல் வரிசையைத் திருப்பியளிக்க அல்லது ஒவ்வொரு உறுப்பிற்கும் ஒரு உருமாற்ற ஃபங்ஷனைப் பயன்படுத்த ஓவர்லோட் செய்யப்பட்டுள்ளது. வெவ்வேறு ஓவர்லோட் கையொப்பங்களில் வகை தகவல்களைப் பராமரிக்க ஜெனரிக்குகள் பயன்படுத்தப்படுகின்றன.

ஃபங்ஷன் ஓவர்லோட்களுக்கு மாற்றுகள்

ஃபங்ஷன் ஓவர்லோட்கள் சக்திவாய்ந்தவை என்றாலும், சில சூழ்நிலைகளில் மிகவும் பொருத்தமானதாக இருக்கும் மாற்று அணுகுமுறைகள் உள்ளன:

முடிவுரை

டைப்ஸ்கிரிப்ட் ஃபங்ஷன் ஓவர்லோட்கள் நெகிழ்வான, வகை-பாதுகாப்பான, மற்றும் நன்கு ஆவணப்படுத்தப்பட்ட ஃபங்ஷன்களை உருவாக்குவதற்கான ஒரு மதிப்புமிக்க கருவியாகும். தொடரியல், சிறந்த நடைமுறைகள் மற்றும் பொதுவான தவறுகளில் தேர்ச்சி பெறுவதன் மூலம், உங்கள் டைப்ஸ்கிரிப்ட் குறியீட்டின் தரம் மற்றும் பராமரிப்பை மேம்படுத்த இந்த அம்சத்தைப் பயன்படுத்தலாம். மாற்றுகளைக் கருத்தில் கொண்டு, உங்கள் திட்டத்தின் குறிப்பிட்ட தேவைகளுக்கு மிகவும் பொருத்தமான அணுகுமுறையைத் தேர்வுசெய்ய நினைவில் கொள்ளுங்கள். கவனமான திட்டமிடல் மற்றும் செயல்படுத்துதலுடன், ஃபங்ஷன் ஓவர்லோட்கள் உங்கள் டைப்ஸ்கிரிப்ட் டெவலப்மென்ட் கருவித்தொகுப்பில் ஒரு சக்திவாய்ந்த சொத்தாக மாறும்.

இந்தக் கட்டுரை ஃபங்ஷன் ஓவர்லோட்களின் விரிவான கண்ணோட்டத்தை வழங்கியுள்ளது. விவாதிக்கப்பட்ட கொள்கைகள் மற்றும் நுட்பங்களைப் புரிந்துகொள்வதன் மூலம், உங்கள் திட்டங்களில் அவற்றை நம்பிக்கையுடன் பயன்படுத்தலாம். வழங்கப்பட்ட எடுத்துக்காட்டுகளுடன் பயிற்சி செய்து, இந்த சக்திவாய்ந்த அம்சத்தைப் பற்றிய ஆழமான புரிதலைப் பெற வெவ்வேறு சூழ்நிலைகளை ஆராயுங்கள்.