dimanche 14 novembre 2010

Utilisation du mot-clé yield pour palier aux variables de retour temporaire

Il vous est surement arrivé de devoir retourner un IEnumerable dans une de vos méthodes. La façon classique, est de se déclarer une variable temporaire afin de pouvoir ajouter le contenu désiré et ensuite retourner la collection.

Voici un exemple qui affiche les nombres pairs entre dans un intervalle donné:


public IEnumerable<int> GetPairNumber(int From, int To)
{
List<int> retVal = new List<int>();


for (int indexNumber = From; indexNumber < To; indexNumber++)
{
if (indexNumber % 2 == 0)
{
retVal.Add(indexNumber);
}
}
return retVal;
}


Il est toute fois possible d'éviter la déclaration et l'utilisation de la variable retVal. Pour ce faire, on peut utiliser les mots-clés yield return dans un bloc itérateur.
Le mot-clé yield indique au compilateur que la méthode dans laquelle il apparait est un bloc itérateur. Le compilateur génère une classe pour implémenter le comportement exprimé dans le bloc itérateur. Dans le bloc itérateur, le mot clé yield est utilisé avec le mot clé return pour fournir une valeur à l'objet énumérateur. C'est donc cette valeur qui est retournée.


L'exemple ci-dessous reprend effectue exactement la même opération, mais en évitant la variable retVal.



public IEnumerable<int> GetPairNumber(int From, int To)
{
for (int indexNumber = From; indexNumber < To; indexNumber++)
{
if (indexNumber % 2 == 0)
{
yield return indexNumber;
}
}
}


Ok ça ne changera pas le monde, mais c’est un petit truc intéressant à savoir :)

Aucun commentaire:

Enregistrer un commentaire