Times, UpTo y Step: De Ruby a C#

Un compañero de trabajo me comentó lo sencillo que es utilizar iteradores y colecciones en Ruby. Puedes hacer cosas como ésta:

10.times { alert("Foo!") }
#outputs: 0 1 2 3 4 5 6 7 8 9

¡Mola! Es más, buscando un poquito encontré algún ejemplo más, como:

1.upto(10) {|i| print "#{i} "}
#outputs: 1 2 3 4 5 6 7 8 9 10
1.step(10, 2) { |i| print "#{i} "}
#outputs: 1 3 5 7 9

Me pareció un buen punto de partida para montar un ejemplo de extension methods y lambda expressions de C#. La implementación de estos tres métodos y un programa de consola de ejemplo sería así:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace LoopExtensions
{
    public static class LoopExtensions
    {
        public static void Times(this int aTimes, Action<int> aAction)
        {
            if (aTimes <= 0)
                throw new ArgumentException("Times must be greater than 0");
            for (var i = 0; i < aTimes; i++)
            {
                aAction(i);
            }
        }
        public static void UpTo(this int aStart, int aEnd, Action<int> aAction)
        {
            if (aStart > aEnd)
                throw new ArgumentException("End must be grater than Start");
            for (var i = aStart; i <= aEnd; i++)
            {
                aAction(i);
            }
        }
        public static void Step(this int aStart, int aEnd, int aStep, Action<int> aAction)
        {
            if (aStart > aEnd)
                throw new ArgumentException("End must be grater than Start");
            if (aStep<=0)
                throw new ArgumentException("Step must be grater than zero");
            for (var i = aStart; i <= aEnd; i += aStep)
            {
                aAction(i);
            }
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            5.Times((i) => Console.Write(i + " "));
            Console.WriteLine();
            1.UpTo(10, (i) => Console.Write(i + " "));
            Console.WriteLine();
            1.Step(10, 2, (i) => Console.Write(i + " "));
        }
    }
}

Como vemos, la implementación de estas tres construcciones de Ruby en C# es muy sencilla y no nos lleva más que unas pocas líneas de código.

Hasta la próxima, happy coding!🙂

Esta entrada fue publicada en Dev y etiquetada , , , . Guarda el enlace permanente.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s