jueves, 26 de julio de 2007

Iterando: La pereza al maximo

Simplificando el codigo para iterar:

Usualmente no recorres collections utilizando foreach? Quieres ahorrarte una par de lineas de codigo?

.NET Framework 2.0 provee una serie de nuevas features para hacer el codigo mas elegante.

Las clases System.Array y System.Collections.Generic.List proveen nuevos metodos apoyados en las nueva posibilidades que ofrece Generics.
El nuevo metodo .ForEach de estas clases nos permite ahorrarnos el codigo que antes teniamos que escribir para recorrer la collection utilizando el iterador.

Tradicionalmente, para iterar una coleccion debias escribir algo similar a esto:

System.Collections.Generic.List numbers = new System.Collections.Generic.List();
...
foreach (System.Int32 number in numbers)
{
...
}

Utilizando System.Collections.Generic.List.ForEach se le puede pasar un delegate de tipo System.Action y adentro de este poner la logica que se quiere para cada iteracion.
El codigo anterior quedaria entonces asi:

System.Collections.Generic.List numbers = new System.Collections.Generic.List();
...
numbers.ForEach(new System.Action(searchNumbersDelegate));

y hay que codificar el delegate searchNumbersDelegate:

private void searchNumbers(System.Int32 item)
{
if (item == 50)
System.Console.WriteLine("Found!");
}


Agregando Anonymous methods :
Pero el .NET framework 2.0 ofrece muchisimas mas posibilidades, como por ejemplo Anonymous methods.
Si utilizamos sobre el codigo anterior Anonymous Methods, podemos reducir el codigo a una sola linea:

numbers.ForEach(delegate(System.Int32 i){ if (i == 50) System.Console.WriteLine("Found!"); });


Links:
http://msdn.microsoft.com/msdnmag/issues/06/09/AdvancedBasics/
http://blog.csdn.net/coofucoo/archive/2006/07/19/940463.aspx

No hay comentarios: