Bucle (programación)
Generalmente, un bucle es utilizado para hacer una acción repetida sin tener que escribir varias veces el mismo código, lo que ahorra tiempo, deja el código más claro y facilita su modificación en el futuro.
El bucle y los condicionales representan la base de la programación estructurada. Es una evolución del código ensamblador, donde la única posibilidad de iterar un código era establecer una sentencia jump (que en los lenguajes de programación fue sustituida por el "ir a" o GOTO).
Los tres bucles más utilizados en programación son el bucle while, el bucle for y el bucle repetir.
Bucle for
El bucle for o ciclo for es una estructura de control en la que se puede indicar el número minimo deiteraciones. Está disponible en casi todos los lenguajes de programación imperativos.
Bucle while
El Bucle while o bucle mientras es una estructura de la mayoría de los lenguajes de programación estructurados cuyo propósito es repetir un bloque de código mientras una condición se mantenga verdadera.
Bucle repetir
El bucle repetir comprueba la condición de finalización al final del cuerpo del bucle, y si ésta es cierta continua con el resto del programa, a veces esto resulta más adecuado.
|
Estructuras de control
En lenguajes de programación, las estructuras de control permiten modificar el flujo de ejecución de las instrucciones de un programa.
Con las estructuras de control se puede:
- De acuerdo a una condición, ejecutar un grupo u otro de sentencias (If-Then-Else y Select-Case)
- Ejecutar un grupo de sentencias mientras exista una condición (Do-While)
- Ejecutar un grupo de sentencias hasta que exista una condición (Do-Until)
- Ejecutar un grupo de sentencias un número determinado de veces (For-Next)
- Etc
Los lenguajes de programación modernos tienen estructuras de control similares. Básicamente lo que varía entre las estructuras de control de los diferentes lenguajes es su sintaxis, cada lenguaje tiene una sintaxis propia para expresar la estructura.
Ciclos en ruby
ciclo each
Hay una función llamada “each” (“cada uno”), que se puede aplicar a un Array o a un Hash, o a un string de varias líneas, para iterar sobre sus elementos. La sintaxis es:
variable.each {bloque}
El resultado es el siguiente: Las instrucciones que se encuentran dentro del bloque, se van a aplicar a cada uno de los elementos de la variable. Es decir, se produce un ciclo repetitivo donde en cada
pasada, o iteración del ciclo, se evalúa uno de los elementos del array (o hash), en forma sucesiva, empezando con el primero, luego el segundo, etc, hasta llegar al último.
Veamos un ejemplo con un Array numérico:
a = [2,4,13,8] # empecemos con este Array
a.each {|i| puts i} # por cada elemento |i| de 'a', imprimirlo:
→2 # dentro del bloque, i←2 y luego puts 2
→4 # sigue con i←4 y luego puts 4
→13 # etc
→8
ciclo while
Esta evalúa una expresión que resulta en un valor de verdad, y repite el ciclo
tantas veces como la expresión evaluada sea cierta. Veamos un ejemplo:
cuenta = 0
while (cuenta < 5) do
puts cuenta # imprime desde 0 hasta 4
cuenta += 1
end
La última vez que repite el ciclo, cuenta←5, y la comparación (5 < 5) es
falsa, así que ya no repite el bloque más. El uso de la palabra do también es
opcional.
until
La instrucción until, es similar al while, excepto que la expresión evaluada
tiene una lógica negativa: el bloque se repite mientras que la condición sea
falsa.
cuenta = 0
until cuenta >= 5 do
puts cuenta # imprime desde 0 hasta 4
cuenta += 1
end
for
for e in a # por cada elemento e de a, haga
puts e # imprima el valor de e
end # fin del ciclo
Cuando queremos repetir un ciclo cierto número de veces, usamos un rango,
donde escribimos los límites de la iteración separados por dos puntos, así:
for i in 5..10 # repetidamente va a asignar valores
puts i # desde i←5 hasta i←10 y los va a imprimir
end
Cuando usamos tres puntos, excluye el último valor del rango. Esto es útil
para iterar sobre los valores de un array (cuyo último índice es n-1):
a = ["a","b","c"]
for i in 0...a.size # size=3; asigna valores i entre 0..2
puts "#{i}:#{a[i]}" # evalua desde a[0] hasta a[2] y los imprime
end # imprime 0:a, 1:b, 2:c (un par por linea)
cuando se saben las veces a repetir
Cuando sabemos exactamente el número de repeticiones,podemos usar
times, que es más fácil:
5.times do
puts "hola"
end
Otra manera, usando la función upto() sobre los enteros:
1.upto(5) do
puts "Hola"
end
También existe la función correspondiente downto() sobre los enteros:
5.downto(1) do |i|
puts “#{i}:Hola” # resulta en 5:Hola, 4:Hola, etc por cada linea
end
step
Una cuenta que incremente por números diferentes de 1 se puede hacer con la
función step():
2.step(10, 2) do |i| # desde 2 hasta 10, incrementando de a 2
puts i # imprime i: 2, 4, 6, 8, 10
end
Aunque parezca increíble, la función step() también funciona sobre los reales,
con incrementos fraccionarios:
2.step(10, 0.5) do |r| # desde 2 hasta 10, incrementando de a 0.5
puts r # imprime r: 2.0, 2.5, 3.0, 3.5, etc
end
loop do
crea un ciclo potencialmente infinito. Para salirse del
ciclo se usa la instrucción break, junto con una condición. El ciclo anterior se
expresaría de la siguiente manera:
cuenta = 0
loop
break if cuenta >= 5
puts cuenta # imprime desde 0 hasta 4
cuenta += 1
end
Otra instrucción, loop, crea un ciclo potencialmente infinito. Para salirse del ciclo se usa la
instrucción break, junto con una condición. El ciclo anterior se expresaría de la siguiente manera:
cuenta = 0
loop
break if cuenta >= 5
puts cuenta
cuenta += 1
end