У мові програмування Ruby конструкція case/when/end є потужним і зручним інструментом для умовного керування потоком програми. Вона дозволяє порівнювати значення змінної з кількома умовами та виконувати відповідний блок коду. У цій статті ми детально розглянемо, як працює case/when/end, надамо приклади використання та відповімо на поширені запитання в розділі FAQS.
Що таке case/when/end у Ruby?
Конструкція case/when/end у Ruby є альтернативою множинним умовним операторам if/elsif/else. Вона використовується для перевірки значення змінної (або виразу) проти набору умов і виконання відповідного коду. Це робить код більш читабельним і компактним, особливо коли потрібно порівняти одне значення з кількома можливими варіантами.
Синтаксис виглядає так:
Ко Select
case вираз
when значення1
# Код для виконання, якщо вираз == значення1
when значення2
# Код для виконання, якщо вираз == значення2
else
# Код для виконання, якщо жодна умова не виконана
end
Як працює case/when/end?
- Вираз: case оцінює вираз або змінну.
- Умови (when): Кожна гілка when порівнює значення виразу з певним значенням чи діапазоном. Якщо умова виконується, виконується відповідний блок коду.
- Порівняння: У Ruby порівняння в case зазвичай використовує оператор === (оператор відповідності), що дозволяє гнучко працювати з різними типами даних, такими як діапазони, класи чи регулярні вирази.
- else: Якщо жодна умова не виконана, виконується блок else (необов'язковий).
- end: Завершує конструкцію.
Приклади використання
Приклад 1: Просте порівняння значень
Припустимо, ми хочемо визначити, що означає певна оцінка студента.
Ко Select
grade = "A"
case grade
when "A"
puts "Відмінно!"
when "B"
puts "Добре"
when "C"
puts "Задовільно"
else
puts "Невідома оцінка"
end
Виведе: Відмінно!
Приклад 2: Робота з діапазонами
Конструкція case дозволяє використовувати діапазони для порівняння чисел.
Ко Select
score = 85
case score
when 90..100
puts "Високий результат"
when 70..89
puts "Середній результат"
when 0..69
puts "Низький результат"
else
puts "Неправильне значення"
end
Виведе: Середній результат
Приклад 3: Використання класів
Оператор === дозволяє перевіряти тип об'єкта.
Ко Select
value = 42
case value
when String
puts "Це рядок"
when Integer
puts "Це ціле число"
when Float
puts "Це число з плаваючою комою"
else
puts "Невідомий тип"
end
Виведе: Це ціле число
Приклад 4: Використання без виразу
Можна використовувати case без початкового виразу, перевіряючи умови напряму.
Ко Select
age = 25
case
when age >= 18
puts "Ви дорослий"
when age >= 13
puts "Ви підліток"
else
puts "Ви дитина"
end
Виведе: Ви дорослий
Практичний приклад
Ось приклад, як можна використати case/when/end для обробки введення користувача в консольній програмі:
Ко Select
print "Введіть день тижня (1-7): "
day = gets.chomp.to_i
case day
when 1
puts "Понеділок - початок тижня!"
when 2
puts "Вівторок - тримайся!"
when 3
puts "Середа - середина тижня!"
when 4
puts "Четвер - майже п'ятниця!"
when 5
puts "П'ятниця - ура, вихідні близько!"
when 6, 7
puts "Вихідні - відпочивай!"
else
puts "Неправильний день!"
end
FAQS: Поширені запитання
1. Чим case/when/end відрізняється від if/elsif/else?
Конструкція case/when/end є більш читабельною, коли потрібно порівняти одне значення з кількома умовами. Вона використовує оператор ===, що дозволяє працювати з діапазонами, класами чи регулярними виразами. if/elsif/else краще підходить для складних логічних умов.
2. Чи обов'язково використовувати else?
Ні, блок else є необов'язковим. Якщо жодна умова не виконується і else відсутній, програма просто пропустить конструкцію case.
3. Чи можна використовувати кілька значень у одному when?
Так, можна вказати кілька значень через кому:
Ко Select
case number
when 1, 3, 5
puts "Непарне число"
when 2, 4, 6
puts "Парне число"
end
4. Чи можна використовувати регулярні вирази в case?
Так, оператор === підтримує регулярні вирази:
Ко Select
text = "hello"
case text
when /hello/
puts "Знайдено привітання!"
else
puts "Немає збігу"
end
5. Чи можна вкладати case в інший case?
Так, вкладені конструкції case можливі, але це може ускладнити читабельність коду. Краще розглядати альтернативні підходи, якщо логіка стає складною.
Висновок
Конструкція case/when/end у Ruby є елегантним способом обробки умовного керування потоком програми. Завдяки підтримці оператора === вона дозволяє гнучко працювати з різними типами даних, включаючи числа, рядки, діапазони та класи. Використання case/when/end робить код більш структурованим і легким для розуміння, особливо в сценаріях із множинними умовами.