Курси програмного забезпечення | Цифровий кампус

Уроки програмного забезпечення та приклади проектів => Ruby => Тема розпочата: Ayseg від Квт. 26, 2025, 11:36 AM

Назва: Ruby: Case/When/End Конструкція - Повний Посібник
Відправено: Ayseg від Квт. 26, 2025, 11:36 AM

У мові програмування Ruby конструкція case/when/end є потужним і зручним інструментом для умовного керування потоком програми. Вона дозволяє порівнювати значення змінної з кількома умовами та виконувати відповідний блок коду. У цій статті ми детально розглянемо, як працює case/when/end, надамо приклади використання та відповімо на поширені запитання в розділі FAQS.

Що таке case/when/end у Ruby?
Конструкція case/when/end у Ruby є альтернативою множинним умовним операторам if/elsif/else. Вона використовується для перевірки значення змінної (або виразу) проти набору умов і виконання відповідного коду. Це робить код більш читабельним і компактним, особливо коли потрібно порівняти одне значення з кількома можливими варіантами.

Синтаксис виглядає так:
case вираз
when значення1
  # Код для виконання, якщо вираз == значення1
when значення2
  # Код для виконання, якщо вираз == значення2
else
  # Код для виконання, якщо жодна умова не виконана
end

Як працює case/when/end?

Приклади використання
Приклад 1: Просте порівняння значень
Припустимо, ми хочемо визначити, що означає певна оцінка студента.
grade = "A"

case grade
when "A"
  puts "Відмінно!"
when "B"
  puts "Добре"
when "C"
  puts "Задовільно"
else
  puts "Невідома оцінка"
end

Виведе: Відмінно!

Приклад 2: Робота з діапазонами
Конструкція case дозволяє використовувати діапазони для порівняння чисел.
score = 85

case score
when 90..100
  puts "Високий результат"
when 70..89
  puts "Середній результат"
when 0..69
  puts "Низький результат"
else
  puts "Неправильне значення"
end

Виведе: Середній результат

Приклад 3: Використання класів
Оператор === дозволяє перевіряти тип об'єкта.
value = 42

case value
when String
  puts "Це рядок"
when Integer
  puts "Це ціле число"
when Float
  puts "Це число з плаваючою комою"
else
  puts "Невідомий тип"
end

Виведе: Це ціле число

Приклад 4: Використання без виразу
Можна використовувати case без початкового виразу, перевіряючи умови напряму.
age = 25

case
when age >= 18
  puts "Ви дорослий"
when age >= 13
  puts "Ви підліток"
else
  puts "Ви дитина"
end

Виведе: Ви дорослий

Практичний приклад
Ось приклад, як можна використати case/when/end для обробки введення користувача в консольній програмі:
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?
Так, можна вказати кілька значень через кому:
case number
when 1, 3, 5
  puts "Непарне число"
when 2, 4, 6
  puts "Парне число"
end

4. Чи можна використовувати регулярні вирази в case?
Так, оператор === підтримує регулярні вирази:
text = "hello"

case text
when /hello/
  puts "Знайдено привітання!"
else
  puts "Немає збігу"
end

5. Чи можна вкладати case в інший case?
Так, вкладені конструкції case можливі, але це може ускладнити читабельність коду. Краще розглядати альтернативні підходи, якщо логіка стає складною.

Висновок
Конструкція case/when/end у Ruby є елегантним способом обробки умовного керування потоком програми. Завдяки підтримці оператора === вона дозволяє гнучко працювати з різними типами даних, включаючи числа, рядки, діапазони та класи. Використання case/when/end робить код більш структурованим і легким для розуміння, особливо в сценаріях із множинними умовами.