Язык программирования Crystal

if

if выполняет ветку then если условие truthy (сводится к true), в противном случае выполняет ветку 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, например, в случае использования return, next, break или raise, определяемый ей тип не будет назначен переменной после выхода из тела if:

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