Existem algumas formas interessantes de fazer loops em Ruby, que são times, upto e downto, que estão disponiveis em algum número, veja documentação completa.

A idéia é simples, .times vai executar o códido o número de vezes informado, upto vai executar o código o número de vezes incrementando do valor inicial até o final, e downto vai executar o código o número de vezes decrementando do valor inicial até o final.

Veja o código:

[sourcecode language="ruby"]
puts "testando times"
2.times {|i| print i, " "}
puts
puts "testando upto"
1.upto(5) {|i| print i, " "}
puts
puts "testando downto"
10.downto(5) {|i| print i, " "}
[/sourcecode]

Resultado:

Simples e interessante, no C# não temos nada disso, mas podemos criar algo parecido utilizando um pouco de Métodos de Extensão, não vou explicar nesse post o que são e como criar as extensões, vejam no post linkado.

Segue os códigos das Extensões e do aplicativo de teste:

[sourcecode language="csharp"]
public static class Extensions
{
public static void Times(this int value, Action<int> action)
{
for (int i = 0; i < value; i++)
{
action(i);
}
}

public static IEnumerable<int> UpTo(this int start, int end)
{
for (int i = start; i <= end; i++)
{
yield return i;
}
}

public static IEnumerable<int> DownTo(this int start, int end)
{
for (int i = start; i >= end; i–)
{
yield return i;
}
}

public static void Each<T>(this IEnumerable<T> enumerable, Action<T> action)
{
foreach (var value in enumerable)
{
action(value);
}
}
}

class Program
{
static void Main(string[] args)
{
Console.WriteLine("testando times");
3.Times(x => Console.Write("{0} ", x));
Console.WriteLine();
Console.WriteLine("testando upto");
5.UpTo(10).Each(x => Console.Write("{0} ", x));
Console.WriteLine();
Console.WriteLine("testando downto");
10.DownTo(5).Each(x => Console.Write("{0} ", x));

Console.ReadLine();
}
}
[/sourcecode]

E o resultado:

Bom é isso, o código é simples mas foi divertido e gostei do resultado final, apesar de achar que em Ruby fica muito melhor gostei do resultado final em C#, e para quem não conhece Ruby recomendo estudar, não precisa trabalhar com Ruby, mas é muito interessante conhecer novas tecnologias, mais sobre o que penso sobre isso nesse post..

Por enquanto é só, código no GitHub.

Abraços.

  • Oops Twitter isnt working at the moment