Um while
executa seu corpo enquanto sua condição for verdadeira.
while alguma_condicao
faz_isso
end
Primeiro a condição é testada, e se for verdadeira, o corpo é executado. Ou seja, pode ser que o corpo nunca seja executado.
O tipo de um while
é sempre Nil
.
De maneira semelhante a um if
, se a condição de um while
for uma variável, é garantido que a variável não é nil
dentro do corpo. Se a condição for um teste var.is_a?(Type)
, é garantido que var
é do tipo Type dentro do corpo. E se a condição for var.responds_to?(:method)
, é garantido que var
é de um tipo que responde a aquele método.
O tipo de uma variável depois de um while
depende do tipo que ela tinha antes do while
e do tipo que ela tinha antes de deixar o corpo do while
:
a = 1
while alguma_condicao
# a : Int32 | String
a = "olá"
# a : String
a.size
end
# a : Int32 | String
Se você precisa executar o corpo pelo menos uma vez e então checar por uma condição de interrupção, você pode fazer o seguinte:
while true
faz_alguma_coisa
break if alguma_condicao
end
Ou usar o loop
, encontrado na biblioteca padrão:
loop do
faz_alguma_coisa
break if alguma_condicao
end