while
while
は条件式が真となる間は繰り返して本体を実行します。
while some_condition
do_this
end
まず条件式に対して判定が行なわれて、真であったときに本体が実行されます。これはつまり、本体が1度も実行されない場合もあるということです。
while
の型が常にNil
です。
if
のように、while
の条件式が変数であった場合、本体ではその変数はnil
ではないことが保証されます。条件式がvar.is_a?(Type)
という形なら、本体ではvar
はType
型であることが保証されます。さらに、var.responds_to?(:method)
という形なら、本体ではvar
がそのメソッドを持つことが保証されます。
while
を実行したあとの変数の型は、while
以前の型と、while
を抜ける直前の型によって決まります。
a = 1
while some_condition
# a : Int32 | String
a = "hello"
# a : String
a.size
end
# a : Int32 | String
条件によってループを抜ける
ループを抜けるための条件を設定することで、必ず1回は本体を実行することができます。
while true
do_something
break if some_condition
end
標準ライブラリのloop
を利用しても同じことが可能です。
loop do
do_something
break if some_condition
end