Trilhas
/
Crystal
Crystal
/
Programa
/
Laços `while`
La

Laços `while` em Crystal

1 exercício

Sobre Laços `while`

Um laço é uma estrutura de controle que permite executar código repetidamente com base em uma determinada condição.

Laços while

Um laço while é uma estrutura de controle que permite executar código repetidamente com base em uma determinada condição. O código dentro de um laço while continua sendo executado enquanto a condição for avaliada como verdadeira. Os laços while são usados com frequência quando o número de iterações é desconhecido de antemão, mas podem ser usados em qualquer situação que precise de um laço.

A condição é avaliada antes de o código dentro do laço ser executado. Isso significa que, se a condição for falsa, o código dentro do laço nunca será executado.

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

# Output:
# 0
# 1
# 2

Quando você quiser iterar sobre uma string, pode percorrer o comprimento dela com um laço.

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

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

Laços until

Os laços until funcionam igual aos laços while, exceto que o código dentro do laço continua sendo executado até que a condição seja avaliada como verdadeira. É a mesma diferença que existe entre if e unless.

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

Laços infinitos

Um erro comum com laços while é entrar em um "laço infinito", que nunca termina. Um laço infinito pode ser causado por uma condição que nunca é avaliada como verdadeira ou falsa. Isso geralmente acontece por erro de quem programa; por exemplo, esquecer de incrementar a variável do laço. Mas, às vezes, um laço infinito é a forma mais clara de implementar a lógica do programa. Ou pode ser essencial repetir para sempre; por exemplo, um servidor HTTP espera por uma conexão de entrada, trata essa conexão e depois espera pela próxima.

Break

A palavra-chave break pode ser usada para sair de um laço antes do fim. Isso pode ser útil quando você quer sair de um laço antes do fim sob certas condições.

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

# Output:
# 0
# 1

Next

A palavra-chave next pode ser usada para pular para a próxima iteração de um laço. Isso pode ser útil quando você quer pular iterações específicas de um laço.

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

# Output:
# 1
# 3

Tipos dentro de um laço

O tipo da variável pode ser diferente dentro de um laço. No exemplo a seguir, o tipo de a é Int32 | String, porque ele pode ser Int32 ou String na primeira parte do laço. A variável a só carrega o tipo Int32 | String na primeira parte do laço, já que, quando o laço começa, ela contém Int32 e, na segunda iteração, contém uma String. Esse sistema de múltiplos tipos será explicado em detalhes mais adiante. Mas, como temos certeza de que a segunda parte do laço só conterá String, o tipo de a é String na segunda parte do laço. Em tempo de execução, ela nunca conterá Int32 e String ao mesmo tempo.

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

Usar o while como expressão

O while pode ser usado como uma expressão, o que significa que ele pode ser usado como o valor de uma variável. O valor retornado é o valor passado com a palavra-chave break. Ele não retorna o valor da última expressão do laço.

a = while true
  break 1
end

p a
# => 1

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

p a
# => nil
Editar via GitHub O link abre em uma nova janela ou aba

Aprenda Laços `while`

A prática está bloqueada

Desbloqueie mais 10 exercícios para praticar Laços `while`