Tracks
/
Crystal
Crystal
/
Temario
/
Bucles while
Bu

Bucles while en Crystal

1 ejercicio

Acerca de Bucles while

Un bucle es una estructura de control que permite ejecutar código repetidamente en función de una condición dada.

Bucles while

Un bucle while es una estructura de control que permite ejecutar código repetidamente en función de una condición dada. El código que hay dentro de un bucle while se seguirá ejecutando mientras la condición se evalúe como verdadera. Los bucles while se usan a menudo cuando el número de iteraciones se desconoce de antemano, pero pueden usarse en cualquier situación en la que se necesite un bucle.

La condición se evalúa antes de ejecutar el código que hay dentro del bucle, lo que significa que, si la condición es falsa, el código del bucle no se ejecutará nunca.

i = 0
while i < 3
  puts i
  i += 1
end

# Output:
# 0
# 1
# 2

Cuando quieras iterar sobre un string, puedes recorrer la longitud del string con un bucle.

str = "Hello"
i = 0
while i < str.size
  puts str[i]
  i += 1
end

# Output:
# H
# e
# l
# l
# o

Bucles until

Los bucles until funcionan igual que los bucles while, salvo que el código que hay dentro del bucle se seguirá ejecutando hasta que la condición se evalúe como verdadera. Es la misma diferencia que hay entre if y unless.

i = 0
until i == 3
  puts i
  i += 1
end

Bucles infinitos

Un error habitual con los bucles while es entrar en un «bucle infinito», del que nunca se sale. Un bucle infinito puede deberse a que una condición nunca se evalúe como verdadera o falsa. A menudo se debe a un error de programación; por ejemplo, olvidarse de incrementar la variable del bucle. Pero a veces un bucle infinito es la forma más clara de implementar la lógica del programa. O puede ser imprescindible repetir el bucle para siempre; por ejemplo, un servidor HTTP espera una conexión entrante, la atiende y después espera la siguiente conexión.

Break

La palabra clave break puede usarse para salir de un bucle antes de tiempo. Puede resultar cómodo cuando quieres salir de un bucle antes de tiempo bajo ciertas condiciones.

i = 0
while i <= 3
  puts i
  i += 1
  if i == 2
    break
  end
end

# Output:
# 0
# 1

Next

La palabra clave next puede usarse para saltar a la siguiente iteración de un bucle. Puede resultar cómodo cuando quieres saltarte iteraciones concretas de un bucle.

i = 0
while i <= 3
  i += 1
  if i == 2
    next
  end
  puts i
end

# Output:
# 1
# 3

Tipos durante el bucle

El tipo de la variable puede ser distinto durante el bucle. En el siguiente ejemplo, el tipo de a es Int32 | String porque puede ser Int32 o String en la primera parte del bucle. La variable a solo tendrá el tipo Int32 | String en la primera parte del bucle, ya que cuando el bucle empieza contiene Int32 y, en la segunda iteración, contiene un String. Este sistema de tipos múltiples se explicará en detalle más adelante. Pero como tenemos la certeza de que la segunda parte del bucle solo contendrá String, el tipo de a es String en la segunda parte del bucle. En tiempo de ejecución, nunca contendrá Int32 y String al mismo tiempo.

i = 0
a = 4
while i < 3
  p typeof(a)
  # => Int32 | String
  a = "4"
  p typeof(a)
  # => String
  i += 1
end

Usar while como expresión

While puede usarse como expresión, lo que significa que puede usarse como el valor de una variable. El valor que se devuelve es el valor que se indica con la palabra clave break. No devolverá el valor de la última expresión del bucle.

a = while true
  break 1
end

p a
# => 1

i = 0
a = while i == 0
  i += 1
  1
end

p a
# => nil
Editar en GitHub El enlace se abre en una nueva ventana o pestaña

Aprende Bucles while

La práctica está bloqueada

Desbloquea 10 ejercicios más para practicar Bucles while