Bucles en Ruby
SOLUCIONARIO
Bucles en Ruby
2025-04-18
Por
Occam's Razor

#!/usr/bin/ruby

a = Array.new

for i in 0..10
  a[i] = i + 10
end

10.times do |i|
  puts "#{i} -> #{a[i]}"
end


puts "--------------------------------------"

while i > 0 do
  i -= 1
  print "#{i} -> #{a[i]}"
  if i > 4
    puts
    next
  end
  puts " **"
  break if i == 1

end

puts "--------------------------------------"

a.each do |x|
  print "#{x} "
end

puts

# one liners
a.each {|x| print "#{x} "}
puts

0.upto(10) {|x| print "#{a[x]} "}
puts

Ruby nos ofrece una gran variedad de opciones para construir bucles. Además de los clásicos bucles for y while, Ruby nos permite generar bucles utilizando distintos iteradores:

  • times Repite un número de veces.
  • upto y downto nos permite contar hacia arriba o hacia abajo. Ambos son métodos que podemos encontrar en objetos numéricos y también cadenas de caracteres
  • step se puede ver como una generalización de los dos anteriores ya que nos permite definir el incremento a utilizar (positivo o negativo)
  • each y each_char nos permite iterar elementos de arrays.

Estos iteradores tienen dos formas. La primera define el bloque a repetir entre las palabras clave do y end. La segunda es una forma reducida en la que el bloque a repetir se encierra entre llaves y nos ofrece una sintaxis más compacta para expresiones sencillas.

SOY NOVATO

En los bucles for .. in podemos especificar un rango de valores como podéis ver en el ejemplo. Cuando utilizamos dos puntos .. el valor final no se incluye en el bucle. Si queremos que se incluya, podemos utilizar tres puntos ....

Al igual que en el resto de lenguajes, Ruby ofrece next para pasar al siguiente ciclo del bucle de forma prematura o break para terminarlo. Ruby permite la ejecución condicional de next y break añadiendo una expresión condicional con la palabra clave if.

SABIAS QUE

Puedes definir tus propios iteradores utilizando la palabra clave yield de forma similar a como lo haríamos en Python. Para ello solo has de definir una función y utilizar yield para indicar que valores quieres devolver. Aquí un ejemplo, para generar iteradores que siguen una serie geométrica.

def gs(x0,r,it)
  x = x_ = x0
  0.upto(it) do |i|
    yield x
    x_ = (x = x_*r)
  end
end
gs(2,2,10) {|x| puts x}

Échale un ojo al capítulo sobre funciones si tienes problemas entendiendo el ejemplo

En Ruby podemos escribir bucles infinitos utilizando cualquiera de los constructores disponibles… Y algunas opciones más.

loop do
    # Bucle infinito
end

while true
    # Bucle infinito
end

until false
    # Bucle infinito
end

for i in (1..Float::INFINITY)
    # Bucle infinito
end

(1..Float::INFINITY).each { # Bucle infinito}

-> { #Bucle infinito }.call until false

begin
    #Bucle infinito
end while true

Observa que en las dos últimas formas (usando la función lambda y los bloques condicionales) podemos usar tanto while true como until false.

Resumen

  • Ruby ofrece bucles for, while, until y a través de iteradores
  • Ruby ofrece las palabras clave next y break para controlar el flujo de los bucles.

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)