Introduction au mot clé de rendement en C #

Le rendement est un mot-clé contextuel en C #. Les mots clés contextuels sont les mots clés en C # qui ne sont pas réservés au programme complet. Ce sont plutôt des mots clés réservés pour certaines parties du programme où le mot clé peut être utilisé de manière pertinente. Ces mots clés peuvent être utilisés comme identificateurs valides partout où leur pertinence ne confère aucune signification particulière au compilateur.

Le mot-clé yield indique que la méthode ou l'accesseur contenant le mot-clé est une méthode / accesseur itérateur. Une méthode / accesseur itérateur est une méthode qui ne renvoie pas une seule valeur. Au contraire, il est appelé dans les itérations et renvoie des valeurs différentes à chaque itération.

Syntaxe

La syntaxe du mot clé yield est assez simple. Il vous suffit de spécifier le mot-clé avant l'instruction return de la méthode ou de l'accesseur.

yield return ;

OU

yield break;

Ce sont les deux implémentations du mot-clé. Lorsqu'il est utilisé avec une instruction return, le mot clé yield renvoie la valeur suivante calculée à partir de l'expression, jusqu'à ce que la condition de sortie de l'expression soit remplie. Lorsqu'il est utilisé avec le mot clé break, le mot clé yield rompt l'itération et l'exécution du programme sort de la méthode / de l'accesseur.

Comment fonctionne le mot clé de rendement en C #?

  1. Alors, comment fonctionne le mot clé en C #? Quelle est l'implémentation interne du mot-clé dans le compilateur C #? Comprenons. La méthode contenant le mot clé yield peut être utilisée par une boucle d'itérateur telle que foreach ou une requête LINQ. Chaque itération de la boucle appelle la méthode. Le code de la méthode est exécuté jusqu'à ce qu'une déclaration de rendement ou de rupture de rendement soit rencontrée.
  2. La position actuelle de l'exécution dans la méthode est conservée et l'itération suivante continue là où elle s'était arrêtée dans l'itération précédente.
  3. C'était simple, non? Entrons dans la mise en œuvre technique de la même chose. La méthode contenant le mot clé yield doit toujours renvoyer un IEnumerable ou un IEnumerator. Chaque fois que le compilateur rencontre le mot clé yield, il sait que la méthode est consommée par un itérateur. Lorsque la méthode est appelée, le compilateur n'exécute pas le corps de la méthode comme il le fait normalement.
  4. Il exécute plutôt le corps de la méthode et renvoie un ensemble compilé d'IEnumerables à la variable itératrice consommatrice. À chaque appel de la méthode, le compilateur recherche une instruction yield et suspend l'exécution de cette instruction. L'itération suivante de la boucle continue l'exécution à partir du dernier emplacement suspendu. Cela continue jusqu'à la condition de sortie de la boucle ou une déclaration de rupture de rendement. Pour stocker les informations d'état après chaque itération, le compilateur crée une machine d'état.

Exemples de mot-clé de rendement en C #

Prenons quelques exemples:

Exemple # 1 - Méthode

L'exemple ci-dessous génère la série Fibonacci à l'aide du mot-clé yield.

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;
)
)
)

Exemple # 2 - Accesseur

L'exemple suivant utilise le mot clé yield avec un accesseur 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; )
)
)

Exemple # 3 - rupture de rendement

L'exemple suivant montre l'utilisation de l'instruction break break. L'itération est terminée dès qu'un nombre dans la série est trouvé ou que la limite de recherche maximale est atteinte.

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;
)
)
)

Si nous changeons elementToFind 1234, la sortie sera -

Règles

1) Chaque élément doit être retourné un par un à l'aide de l'instruction return return.
2) Le type de retour doit être un IEnumerable ou un IEnumerator.
3) Vous ne pouvez pas l'utiliser dans, ref, ou sortir des mots clés avec un rendement.
4) Le mot clé Yield ne peut pas être utilisé avec des expressions Lambda ou des méthodes anonymes.
5) Une déclaration de rendement ne peut pas être à l'intérieur d'un bloc try-catch. Il peut se trouver dans un bloc try-finally.
6) Une déclaration de rupture de rendement ne peut pas se trouver dans un bloc try-finally. Il peut être à l'intérieur d'un bloc try-catch.

Les avantages

Le mot-clé yield évite de créer des collections temporaires. Vous n'avez pas besoin de créer de collections temporaires pour stocker les données avant qu'elles ne soient renvoyées par la méthode. De plus, l'état d'exécution de la méthode est conservé et n'a donc pas besoin d'être explicitement stocké dans le code.

Conclusion - Mot clé de rendement en C #

Nous avons appris de cet article que comment générer un mot clé est un mot clé très utile en C #. Il permet de coder des problèmes complexes avec le moins de lignes possible et rend également le code facile à comprendre. Il s'agissait d'un article de niveau avancé sur le voyage C #. Il est recommandé d'essayer et d'utiliser le mot-clé dans votre code afin d'obtenir une pratique pratique.

Articles recommandés

Ceci est un guide du mot-clé de rendement en C #. Nous discutons ici de la façon de générer des mots clés en C # avec des exemples, des avantages et des règles. Vous pouvez également consulter l'article suivant pour en savoir plus -

  1. Remplacement en C #
  2. Espaces de noms en C #
  3. Pointeurs en C #
  4. Destructeur en C #
  5. Mots-clés PHP
  6. Itérateur en Java
  7. Méthodes de travail et Top 3 Enum en C #
  8. Série Fibonacci en JavaScript avec des exemples
  9. Guide complet de Destructor en PHP