コンテンツへスキップ

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

つまり、変数の型は、それに最後に代入された式(複数可)の型になります。

returnnextbreak、または raise の場合のように、いずれかの分岐が if の終わりまで到達しない場合、その型は if の終わりでは考慮されません。

if some_condition
  e = 1
else
  e = "hello"
  # e : String
  return
end
# e : Int32