Percursos
/
Crystal
Crystal
/
Programa
/
Ciclos while
Ci

Ciclos while em Crystal

1 exercício

Sobre Ciclos while

Um ciclo é uma estrutura de controlo que permite executar código repetidamente com base numa determinada condição.

Ciclos while

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

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

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

# Output:
# 0
# 1
# 2

Quando queres iterar sobre uma string, podes fazer um ciclo sobre o comprimento da string.

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

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

Ciclos until

Os ciclos until funcionam da mesma forma que os ciclos while, com a diferença de que o código dentro do ciclo continua a ser executado até a condição ser avaliada como verdadeira. É a mesma diferença que existe entre if e unless.

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

Ciclos infinitos

Um erro comum com os ciclos while é entrar num "ciclo infinito", que nunca termina. Um ciclo infinito pode ser causado por uma condição que nunca é avaliada como verdadeira nem como falsa. Isto deve-se muitas vezes a um erro do programador, por exemplo, esquecer-se de incrementar a variável do ciclo. Mas, por vezes, um ciclo infinito é a forma mais clara de implementar a lógica do programa. Ou é vital repetir indefinidamente: por exemplo, um servidor HTTP espera por uma ligação recebida, trata-a e depois espera pela ligação seguinte.

Break

A palavra-chave break pode ser usada para sair de um ciclo mais cedo. Isto pode ser útil quando queres sair de um ciclo mais cedo em determinadas 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 saltar para a iteração seguinte de um ciclo. Isto pode ser útil quando queres saltar iterações específicas de um ciclo.

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

# Output:
# 1
# 3

Tipos nos ciclos

O tipo da variável pode ser diferente ao longo do ciclo. No exemplo seguinte, o tipo de a é Int32 | String porque pode ser Int32 ou String na primeira parte do ciclo. A variável a só tem o tipo Int32 | String na primeira parte do ciclo, uma vez que, quando o ciclo começa, contém um Int32 e, na segunda iteração, contém uma String. Este sistema de múltiplos tipos será explicado em detalhe mais adiante. Mas, como temos a certeza de que a segunda parte do ciclo só conterá String, o tipo de a é String na segunda parte do ciclo. Em tempo de execução, nunca conterá simultaneamente Int32 e String.

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

Usar while como expressão

O while pode ser usado como expressão, o que significa que pode ser usado como o valor de uma variável. O valor devolvido é o valor indicado na palavra-chave break. Não devolve o valor da última expressão do ciclo.

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 A ligação abre numa nova janela ou separador

Aprende Ciclos while

A prática está bloqueada

Desbloqueia mais 10 exercícios para praticares Ciclos while