À la découverte du mot clé « yield » avec C# et .NET 4.0

Je me répète lorsque je dis que c’est dans les outils que l’on utilise le plus souvent que l’on ignore le plus les secrets.

Le langage de programmation C# est l’un de mes outils de prédilection. Pour être clair, c’est le langage que j’utilise à tous les jours dans le cadre de mon travail.

Chaque langage a ses spécificités, ses avantages et limitations. En bout de compte, ils nous donnent les moyens de réaliser ce que nous avons à construire.

yield

Jusqu’à récemment, j’avais associé le mot clé yield à Java. Avec Java, le mot clé yield permet de notifier le système que le thread en cours peut être libéré de son exécution pour laisser l’occasion au CPU d’aller exécuter d’autre processus.

Le contexte d’utilisation du mot clé est uniquement réservé au contexte du Threading. Donc, ses utilisations sont très spécifiques et relativement limitées.

Il s’avère qu’avec .NET, le mot clé yield est associé aux collections et non pas au threading. Ceci étant dit, il n’est pas évident d’en deviner son utilisation à moins de lire la définition de celui-ci dans MSDN.

The yield keyword, indicates that the method, operator, or get accessor in which it appears is an iterator. You use an iterator to perform a custom iteration over a collection. The following example shows the two forms of the yield statement.

yield return <expression>;
yield break;

En autre termes, yield permet indique que vous pourrez itérer sur ce que vous retournerez au moment où vous l’utiliserez.

Pratiquement parlant, son utilisation et surtout reliée au cas où vous désirez extraire d’une collection un certain nombre de sous éléments. Par exemple, filtrer une liste d’utilisateurs par leur âge et procéder à un traitement spécifique pour un certain regroupement.

Utilisation

Utiliser yield implique très peu de choses à la structure de son code. Il faut toutefois changer l’approche avec laquelle on utilise ses collections.

Le meilleur exemple est assez visuel. Il est possible de procéder au calcul de la suite de Fibonacci de façon assez élégante de cette façon.


public IEnumerable<int> Fibonacci(int x)
{
int prev = 1;
int next = 1;
for (int i = 0; i < x; i++)
{
int sum = prev + next;
prev = next;
next = sum;
yield return sum;
}
}

view raw

gistfile1.cs

hosted with ❤ by GitHub

L’élégance vient du fait que cette fonction peut être utilisée dans une boucle ForEach comme ceci :


foreach (var x in YieldTest.Fibonacci(10))
{
System.Console.WriteLine(x);
}

view raw

gistfile1.cs

hosted with ❤ by GitHub

Avec yield, il n’est pas question de réécrire fanatiquement ses fonctions manipulant des collections en tenant compte que le mot clé est à notre disposition. Bien au contraire!

Toutefois, je crois qu’il est important de savoir comment fonctionne le Framework lorsqu’il est temps de manipuler des listes d’éléments. D’ailleurs, est-ce qu’il est nécessaire de mentionner que LINQ utilise déjà cette approche?

Ressources supplémentaires

Publicité

Auteur : Pascal Paradis

Je suis les mains et le cerveau derrière http://frenchcoding.com. Je développe des microservices chez @UbisoftMTL. Amateur de Hockey et j'aime la technologie, en général.

Une réflexion sur “À la découverte du mot clé « yield » avec C# et .NET 4.0”

Laisser un commentaire

Entrer les renseignements ci-dessous ou cliquer sur une icône pour ouvrir une session :

Logo WordPress.com

Vous commentez à l’aide de votre compte WordPress.com. Déconnexion /  Changer )

Image Twitter

Vous commentez à l’aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l’aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur la façon dont les données de vos commentaires sont traitées.

%d blogueueurs aiment cette page :