Ruby: с нуля – часть 6: условные операторы if…else, case, unless

 

ruby_logoПредыдущая часть – часть 5: комментарии.

Оператор if...else

Синтаксис:

if условие [then]
	  code...
[elsif условие [then]
	  код...]...
[else
	  код...]
end

Выражение if используется для проверки истинности условия. Значения условия false и nil являются ложными (false), тогда как все прочие – будут True.

Условие в if может закрываться зарезирвированным словом then, точкой с запятой или новой строкой.

Пример:

#!/usr/bin/ruby

x=1

if x > 2
   puts "x is greater than 2"
elsif x <= 2 and x!=0
   puts "x is 1"
else
   puts "I can't guess the number"
end

if x > 2 then
   puts "x is greater than 2"
elsif x <= 2 and x!=0
   puts "x is 1"
else
   puts "I can't guess the number"
end

if x > 2;
   puts "x is greater than 2"
elsif x <= 2 and x!=0
   puts "x is 1"
else
   puts "I can't guess the number"
end

Результат:

$ ./ifelse_1.rb 
x is 1
x is 1
x is 1

Ruby модификатор if

Синтаксис:

код if условие

Выполнит код если условие истинно.

Пример:

irb(main):007:0> d = 1
=> 1
irb(main):008:0> puts "D exist" if d
D exist

Оператор unless

Синтаксис:

unless условие [then]
   код
[else
   код ]
end

Выполняет код, если условие false. Если условие true – будет выполнен код из else.

Пример:

#!/usr/bin/ruby

x=1

unless x>2
   puts "x is less than 2"
 else
  puts "x is greater than 2"
end

Результат:

x is less than 2

Ruby модификатор unless

Синтаксис:

код unless условие

Выполняет код, если условие false.

Пример:

#!/usr/bin/ruby

$var =  1

print "1 -- Value is set\n" if $var
print "2 -- Value is set\n" unless $var

$var = false

print "3 -- Value is set\n" unless $var

Результат:

$ ./unless.rb 
1 -- Value is set
3 -- Value is set

Оператор case

Синтаксис:

case выражение
[when выражение [, выражение ...] [then]
   код ]...
[else
   код ]
end

Сравнивает выражение, заданное в case с выражением в when с помощью оператора ===, и выполняет код, если выражение в when совпадает с выражением в case.

Если ни одно выражение в when не совпадает с выражением в case – будет выполнен код из else.

Фактически, код:

case expression0
when expression1, expression2
   code1
when expression3, expression4
   code2
else
   code3
end

будет идентичен коду:

variable = expression0
if expression1 === variable || expression2 === variable
   code1
elsif expression3 === variable || expression4 === variable
   code2
else
   code3
end

Пример:

#!/usr/bin/env ruby

# первый аргумент будет выражением для сравнения
$age =  ARGV[0]

# сравнение inetger значения выражения в $age с условиями в when
case $age.to_i
    # если $age больше 0 но меньше 2
    when 0 .. 2
        puts "Возраст: больше 0 но меньше 2"
    when 3 .. 6
        puts "Возраст: больше 3 но меньше 6"
    when 7 .. 12
        puts "Возраст: больше 7 но меньше 12"
    when 13 .. 18
        puts "Возраст: больше 13 но меньше 18"
    else
        puts "Уже взрослый"
    end

Результаты выполнения:

$ ./case.rb 1
Возраст: больше 0 но меньше 2
$ ./case.rb 5
Возраст: больше 3 но меньше 6
$ ./case.rb 10
Возраст: больше 7 но меньше 12
$ ./case.rb 15
Возраст: больше 13 но меньше 18
$ ./case.rb 35
Уже взрослый

Продолжение – часть 7: циклы while, for, until, break, redo и retry.