Spec-Zone.ru › Crystal

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

Иными словами, тип переменной определяется типом последнего выражения или последних выражений, присвоенных ей.

Если выполнение одной из ветвей не доходит до конца конструкции if, как в случае с return, next, break или raise, этот тип не учитывается в конце конструкции if:

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

To the extent possible under law, the persons who contributed to this workhave waived
all copyright and related or neighboring rights to this workby associating CC0 with it.
https://crystal-lang.org/reference/1.2/syntax_and_semantics/if.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API