コンテンツにスキップ

if

ifは与えられた条件式がである場合にthen節を評価します。偽の場合、else節があればそちらを評価します。

a = 1
if a > 0
  a = 10
end
a # => 10

b = 1
if b > 2
  b = 10
else
  b = 20
end
b # => 20

複数の条件分岐を連続させるには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

つまり、変数の型は最後に代入された式によって決定されるということです。

ある分岐節がifの最後まで絶対に到達しない場合 (returnnextbreakraiseなどがある場合)、 ifの後でその分岐節における型が考慮されることはありません。

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