JavaScript Generators

JavaScript ஜெனரேட்டர்களைக் கற்றுக்கொள்ளுங்கள்

JavaScript Generators

ஒரு JavaScript செயல்பாடு ஒரு மதிப்பை மட்டுமே திரும்பப் பெற முடியும்.

ஒரு JavaScript ஜெனரேட்டர் பல மதிப்புகளை ஒவ்வொன்றாகத் திரும்பப் பெற முடியும்.

ஒரு JavaScript ஜெனரேட்டர் தரவின் ஓட்டத்தை வழங்க முடியும்.

ஒரு JavaScript ஜெனரேட்டர் இடைநிறுத்தப்பட்டு மீண்டும் தொடரப்படலாம்.

Generator Functions

ஒரு ஜெனரேட்டர் செயல்பாடு function* தொடரியலைப் பயன்படுத்தி வரையறுக்கப்படுகிறது:

function* myGenerator() {}

அழைக்கப்படும் போது, ஒரு ஜெனரேட்டர் செயல்பாடு நேரடி மதிப்பை அல்ல, ஒரு ஜெனரேட்டர் பொருளைத் தரும்:

{value:1, done:false}

Generator Objects

ஒரு ஜெனரேட்டர் பொருள் ஜெனரேட்டர் செயல்பாட்டால் திரும்பப் பெறப்படுகிறது.

இது மீளக்கூடிய மற்றும் மீள்வி நெறிமுறைகள் இரண்டிற்கும் இணங்குகிறது, அதாவது இது for...of லூப்களைப் பயன்படுத்தி மீள்வு செய்யப்படலாம்.

Example

function* myStream() {
  // return {value:1, done:false}
  yield 1;

  // return {value:2, done:false}
  yield 2;

  // return {value:3, done:true}
  return 3;
}

// ஒரு ஜெனரேட்டரை உருவாக்கவும்
let myGenerator = myStream();

// ஜெனரேட்டர் மீது மீள்வு செய்யவும்
for (let value of myGenerator) {
  // code
}

The yield Keyword

yield முக்கிய சொல் செயல்பாட்டை இடைநிறுத்தி ஒரு மதிப்பை அழைப்பாளருக்குத் தரும்.

ஜெனரேட்டரின் நிலை பாதுகாக்கப்படுகிறது, மற்றும் next() அழைக்கப்படும் போது yield புள்ளியிலிருந்து மீண்டும் தொடரப்படலாம்.

ஜெனரேட்டர்கள் yield அழைப்புகளுக்கு இடையே அவற்றின் உள் நிலையை பராமரிக்கின்றன, அவை விட்ட இடத்திலிருந்து செயல்பாட்டைத் தொடர அனுமதிக்கின்றன.

⚠️ குறிப்பு:

மேலே உள்ள குறியீடு எடுத்துக்காட்டு 1 மற்றும் 2 ஐத் தரும். 3 அல்ல!

for..of லூப் done:true ஆகும்போது வெளியேறும்.

அனைத்து மதிப்புகளையும் பெற, அவற்றை yield உடன் திருப்பி விடவும்.

Example

function* myStream() {
  // return {value:1, done:false}
  yield 1;

  // return {value:2, done:false}
  yield 2;

  // return {value:3, done:false}
  yield 3;
}

// ஒரு ஜெனரேட்டரை உருவாக்கவும்
let myGenerator = myStream();

// ஜெனரேட்டர் மீது மீள்வு செய்யவும்
for (let value of myGenerator) {
  // code
}

Generator Object Methods

ஒரு ஜெனரேட்டர் பொருள் மீளக்கூடிய மற்றும் மீள்வி நெறிமுறைகளுக்கு இணங்குகிறது.

இது for...of லூப்களுடன் மீள்வு செய்யப்படலாம்.

இதற்கு முறைகளும் உள்ளன:

முறை விளக்கம்
next() ஒரு ஜெனரேட்டர் செயல்பாட்டின் அடுத்த செயல்பாட்டை மீண்டும் தொடங்குகிறது
return() இந்த செயல்பாட்டை முடித்து கொடுக்கப்பட்ட மதிப்பைத் தரும்
throw() இந்த செயல்பாட்டில் ஒரு விதிவிலக்கை வீசுகிறது

The next() Method

ஜெனரேட்டர் பொருளில் அழைக்கப்படும் போது அது ஜெனரேட்டர் செயல்பாட்டின் செயல்பாட்டை மீண்டும் தொடங்குகிறது.

இது ஒரு மதிப்பு மற்றும் ஒரு பூலியன் கொண்ட ஒரு பொருளைத் தரும், ஜெனரேட்டர் முடிந்துள்ளதா என்பதைக் குறிக்கிறது:

{ value: value, done: true|false}

Custom Iterators

ஜெனரேட்டர்கள் சிக்கலான தரவு கட்டமைப்புகள் அல்லது வரிசைகளுக்கான தனிப்பயன் மீள்விகளை உருவாக்குவதை எளிதாக்குகின்றன.

அவை தேவைக்கேற்ப மதிப்புகளை திறமையாக உருவாக்க முடியும், இது சாத்தியமான முடிவில்லா தரவு ஓட்டங்களுக்கு ஏற்றதாக்குகிறது
அவை செயல்பாட்டை இடைநிறுத்தி மீண்டும் தொடர முடியும், இது நிரல் ஓட்டத்தின் மேல் நுணுக்கமான கட்டுப்பாட்டிற்கு பயனுள்ளதாக இருக்கும்
async/await க்கு முன், ஜெனரேட்டர்கள் Promises உடன் பயன்படுத்தப்பட்டன, ஒத்திசைவான செயல்பாடுகளை மிகவும் வரிசைமுறையாகக் காணும் முறையில் நிர்வகிக்க

🎯 முக்கிய குறிப்பு:

ஜெனரேட்டர்கள் மீள்வு கருத்தை நேரடியாக மைய JavaScript மொழியில் கொண்டு வந்து for...of இன் நடத்தையைத் தனிப்பயனாக்குவதற்கான ஒரு பொறிமுறையை வழங்குகின்றன.

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

ஜெனரேட்டர்கள் எவ்வாறு பல மதிப்புகளை வழங்க முடியும் என்பதற்கான எடுத்துக்காட்டு:

Example

function* numberGenerator() {
  let number = 1;
  while (true) {
    yield number;
    number++;
  }
}

// ஜெனரேட்டரை உருவாக்கவும்
const gen = numberGenerator();

// முதல் 5 எண்களைப் பெறவும்
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
console.log(gen.next().value); // 3
console.log(gen.next().value); // 4
console.log(gen.next().value); // 5

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

JavaScript Generators பயிற்சி

பின்வரும் ஜெனரேட்டர் செயல்பாட்டைக் கவனியுங்கள்:

function* simpleGenerator() {
  yield 'A';
  yield 'B';
  yield 'C';
  return 'D';
}

const gen = simpleGenerator();

பின்வரும் குறியீட்டை இயக்கிய பின் result மாறியின் மதிப்பு என்ன?

let result = '';
for (let value of gen) {
  result += value;
}

சரியான பதிலைத் தேர்ந்தெடுக்கவும்:

'ABCD'
✗ தவறு! for...of லூப் done: true ஆகும்போது வெளியேறும். return 'D' done: true ஐ உருவாக்குகிறது
'ABC'
✗ தவறு! yield 'C' வரை லூப் செயல்படுத்துகிறது, ஆனால் இன்னும் ஒரு மதிப்பு உள்ளது
'ABC'
✓ சரி! for...of லூப் done: true ஆகும்போது வெளியேறும். return 'D' done: true ஆகும், எனவே 'D' சேர்க்கப்படாது
'AB'
✗ தவறு! ஜெனரேட்டர் 'C' வரை yield செய்கிறது, இது for...of லூப்பில் சேர்க்கப்படும்