Statement "case"
Оператор case - это удобный способ написания нескольких условных выражений, которые обычно приводят к громоздким операторам if...elsif.
Операторы case обрабатывают каждое условие по очереди, и если условие возвращает false, они переходят к следующему, пока не будет найдено совпадение. В случае отсутствия совпадения можно указать блок else, который будет использоваться по умолчанию.
grade = 'F'
result = case grade
when 'A' then "Excellent!"
when 'B', 'C' then "Good job!"
when 'D' then "Pass."
when 'F' then "Fail."
else "Unknown grade"
end
puts result
#=> Fail.
Если необходимо выполнить более сложные манипуляции с кодом, можно удалить ключевое слово then и вместо этого разместить код для выполнения на следующей строке -
grade = 'C'
case grade
when 'A'
puts "Excellent!"
pay_extra(10)
when 'B', 'C'
puts "Good job!"
pay_extra(5)
when 'D'
puts "Pass."
when 'F'
puts "Fail."
else
puts "Unknown grade"
end
#=> Good job!
Начиная с версии 2.7 в Ruby появился дополнительный синтаксис для оператора case - Pattern Matching. Используется ключевое слово in вместо when, и оно предназначено для более сложного анализа структур данных.
def example(data)
case data
in [Integer, String]
puts "Received an array with an integer and a string"
in {name: name, age: age}
puts "Received a hash: name is #{name}, age is #{age}"
else
puts "No match found"
end
end
example([1, "hello"]) # output: Received an array with an integer and a string
example({name: "Alice", age: 30}) # output: Received a hash: name is Alice, age is 30