Introducere în cuvântul cheie de rand în C #

Randamentul este un cuvânt cheie contextual în C #. Cuvintele cheie contextuale sunt acele cuvinte cheie din C # care nu sunt rezervate programului complet. Mai degrabă, sunt cuvinte cheie rezervate pentru anumite părți ale programului unde cuvântul cheie poate fi folosit în mod relevant. Aceste cuvinte cheie pot fi utilizate ca identificatori valabili, oriunde relevanța lor nu transmite niciun sens special compilatorului.

Cuvântul cheie de randament indică faptul că metoda sau accesorul care conține cuvântul cheie este o metodă / accesorizare. O metodă / accesoriu iterator este una care nu returnează o singură valoare. Mai degrabă, este numit în iterații și returnează valori diferite în fiecare iterație.

Sintaxă

Sintaxa cuvântului cheie randament este destul de simplă. Pur și simplu trebuie să specificați cuvântul cheie înainte de declarația de retur a metodei sau a accesorului.

yield return ;

SAU

yield break;

Acestea sunt cele două implementări ale cuvântului cheie. Când este utilizată cu o declarație de returnare, cuvântul cheie de randament returnează următoarea valoare calculată din expresie, până la îndeplinirea condiției de ieșire a expresiei. Când este utilizat cu cuvântul cheie de pauză, cuvântul cheie randament sparge iterarea și execuția programului iese din metodă / accesor.

Cum funcționează Yield Keyword în C #?

  1. Deci, cum face cuvântul cheie în C #? Care este implementarea internă a cuvântului cheie în compilatorul C #? Să înțelegem. Metoda care conține cuvântul cheie randament poate fi consumată de o buclă de iterare, cum ar fi interogarea foreach sau LINQ. Fiecare iterație a buclei face un apel la metodă. Codul din metodă este executat până când este întâlnită o declarație de rentabilitate sau o întrerupere a randamentului.
  2. Poziția actuală a execuției în metodă este păstrată și următoarea iterație continuă de unde a plecat în iterația anterioară.
  3. A fost simplu, nu-i așa? Să intrăm în implementarea tehnică a aceluiași. Metoda care conține cuvântul cheie randament trebuie să întoarcă întotdeauna un IEnumerable sau IEnumerator. Ori de câte ori compilatorul întâlnește cuvântul cheie randament, știe că metoda este consumată de un iterator. Când se apelează metoda, compilatorul nu execută corpul metodei așa cum face în mod normal.
  4. Mai degrabă execută corpul metodei și returnează un set compilat de IEnumerabile variabilei iteratoare consumatoare. La fiecare apel al metodei, compilatorul caută o declarație de randament și întrerupe execuția la acea declarație. Următoarea iterație a buclei continuă execuția din ultima locație întreruptă. Aceasta continuă până la starea de ieșire a buclei sau a unei declarații de întrerupere a randamentului. Pentru a stoca informațiile de stare după fiecare iterație, compilatorul creează o mașină de stare.

Exemple de cuvinte cheie cu randament în C #

Să luăm în considerare câteva exemple:

Exemplul # 1 - Metodă

Exemplul de mai jos generează seria Fibonacci folosind cuvântul cheie randament.

using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
foreach (int ele in GetFibonacciSeries(10))
(
Console.Write(ele + "\t");
)
)
public static IEnumerable GetFibonacciSeries(int x)
(
for (int a = 0, b = 0, c = 1; a < x; a++)
(
yield return b;
int temp = b + c;
b = c;
c = temp;
)
)
)

Exemplul # 2 - Accesor

Următorul exemplu utilizează cuvântul cheie de randament cu un accesoriu get.

using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
foreach (Day day in new Days().DaysOfWeek)
(
Console.WriteLine("Day (0) of the week is (1)", day.DayOfWeek, day.DayName);
)
)
public static IEnumerable Show(int x)
(
for (int a = 0, b = 0, c = 1; a < x; a++)
(
yield return b;
int temp = b + c;
b = c;
c = temp;
)
)
public class Days
(
public IEnumerable DaysOfWeek
(
get
(
yield return new Day(DayName = "Sunday", DayOfWeek = 1);
yield return new Day(DayName = "Monday", DayOfWeek = 2);
yield return new Day(DayName = "Tuesday", DayOfWeek = 3);
yield return new Day(DayName = "Wednesday", DayOfWeek = 4);
yield return new Day(DayName = "Thursday", DayOfWeek = 5);
yield return new Day(DayName = "Friday", DayOfWeek = 6);
yield return new Day(DayName = "Saturday", DayOfWeek = 7);
)
)
)
public class Day
(
public string DayName
( get; set; )
public int DayOfWeek
( get; set; )
)
)

Exemplul # 3 - pauză de randament

Exemplul următor demonstrează utilizarea declarației break break. Iterația este încheiată de îndată ce un număr din serie este găsit sau limita maximă de căutare este atinsă.

using System;
using System.Collections.Generic;
public class Program
(
public static void Main()
(
int elementToFind = 21;
int maxElements = 100;
foreach (int ele in FindFibonacciNumber(elementToFind, maxElements))
(
Console.Write("Found the number " + elementToFind + " in Fibonacci series.");
)
)
public static IEnumerable FindFibonacciNumber(int n, int max)
(
for (int a = 0, b = 0, c = 1; true; a++)
(
if (a > max)
(
Console.Write("Searched first " + max + " Fibonacci numbers. Element " + n + " not found");
yield break;
)
if (b == n)
(
yield return b;
yield break;
)
int temp = b + c;
b = c;
c = temp;
)
)
)

Dacă schimbăm elementToFind 1234, rezultatul va fi -

reguli

1) Fiecare element trebuie returnat câte unul folosind declarația de rentabilitate.
2) Tipul de retur trebuie să fie un IEnumerable sau IEnumerator.
3) Nu îl puteți utiliza în, reface sau elimina cuvinte cheie cu randament.
4) Cuvântul cheie cu randament nu poate fi utilizat cu expresii Lambda sau metode anonime.
5) O declarație de rentabilitate nu poate fi inclusă într-un bloc de încercare. Poate fi în interiorul unui bloc de încercare.
6) O declarație de pauză de randament nu poate fi în interiorul unui bloc de încercare. Poate fi în interiorul unui bloc de încercare.

avantaje

Cuvântul cheie randament redă nevoia de a crea colecții temporare. Nu trebuie să creați colecții temporare pentru a stoca datele înainte de a le returna din metodă. De asemenea, starea de execuție a metodei este păstrată și deci nu trebuie să fie stocată explicit în cod.

Concluzie - Cuvinte cheie de randament în C #

Am aflat din acest articol că modul de a produce un cuvânt cheie este un cuvânt cheie foarte util în C #. Ajută la probleme complexe de cod cu cât mai puține linii și, de asemenea, face ușor de înțeles codul. Acesta a fost un articol la nivel avansat în călătoria C #. Se recomandă să încercați să utilizați cuvântul cheie în codul dvs., astfel încât să obțineți practici practice.

Articole recomandate

Acesta este un ghid pentru cuvântul cheie de randament în C #. Aici vom discuta despre cum să obțineți funcții de cuvinte cheie în C # cu exemple, avantaje și reguli. De asemenea, puteți consulta articolul următor pentru a afla mai multe -

  1. Suprafață în C #
  2. Spații de nume în C #
  3. Punctele în C #
  4. Distrugător în C #
  5. Cuvinte cheie PHP
  6. Iterator în Java
  7. Funcționare și Top 3 Metode Enum în C #
  8. Serie Fibonacci În JavaScript cu exemple
  9. Ghid complet pentru distrugător în PHP