if¶
if
は、条件が *真* の場合に指定された分岐を実行します。そうでない場合は、存在する場合は else
分岐を実行します。
a = 1
if a > 0
a = 10
end
a # => 10
b = 1
if b > 2
b = 10
else
b = 20
end
b # => 20
if-else-if の連鎖を書くには、elsif
を使用します。
if some_condition
do_something
elsif some_other_condition
do_something_else
else
do_that
end
if
の後、変数の型は両方の分岐で使用される式の型によって異なります。
a = 1
if some_condition
a = "hello"
else
a = true
end
# a : String | Bool
b = 1
if some_condition
b = "hello"
end
# b : Int32 | String
if some_condition
c = 1
else
c = "hello"
end
# c : Int32 | String
if some_condition
d = 1
end
# d : Int32 | Nil
いずれかの分岐内で宣言された変数が、もう一方の分岐では宣言されていない場合、if
の終了時には Nil
型も含まれることに注意してください。
if
の分岐内では、変数の型は、その分岐内で代入された型、または再代入されなかった場合は分岐前の型になります。
a = 1
if some_condition
a = "hello"
# a : String
a.size
end
# a : String | Int32
つまり、変数の型は、それに最後に代入された式(複数可)の型になります。
return
、next
、break
、または raise
の場合のように、いずれかの分岐が if
の終わりまで到達しない場合、その型は if
の終わりでは考慮されません。
if some_condition
e = 1
else
e = "hello"
# e : String
return
end
# e : Int32