#!/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]} "}
putsRuby 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 .. inpodemos 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
yieldde forma similar a como lo haríamos en Python. Para ello solo has de definir una función y utilizaryieldpara 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 trueObserva 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,untily a través de iteradores - Ruby ofrece las palabras clave
nextybreakpara controlar el flujo de los bucles.
■
