Elementor Header #8

7. Условные конструкции (альтернативные варианты)

1. Введение

В Ruby существует несколько способов выполнения кода в зависимости от условий. В этом уроке мы рассмотрим альтернативные варианты условных конструкций, включая тернарный оператор, модификаторы условных операторов, и конструкцию case с диапазонами. Эти альтернативные конструкции помогут сделать код более компактным и читаемым.

2. Тернарный оператор

Тернарный оператор ? : — это краткий способ записи условных выражений. Он позволяет уместить условную логику в одной строке, что делает код более лаконичным.

Синтаксис:

				
					condition ? true_value : false_value

				
			

Пример использования тернарного оператора:

				
					age = 18

message = age >= 18 ? "Вы совершеннолетний." : "Вы несовершеннолетний."
puts message

				
			

Здесь переменная message получает значение в зависимости от условия age >= 18.

3. Модификаторы условных операторов

В Ruby можно использовать условные операторы как модификаторы. Это позволяет записать условные выражения в более компактной форме, если у вас один оператор или выражение в блоке.

Пример использования if как модификатора:

				
					age = 18

puts "Вы совершеннолетний." if age >= 18

				
			

Пример использования unless как модификатора:

				
					age = 16

puts "Вы несовершеннолетний." unless age >= 18

				
			

Здесь код выполняется, если условие истинно (if) или ложно (unless).

4. Конструкция case с диапазонами

Конструкция case в Ruby поддерживает использование диапазонов для проверки значений. Это удобно для работы с интервалами и позволяет избежать множества when условий.

Пример использования case с диапазонами:

				
					temperature = 22

case temperature
when 30..Float::INFINITY
  puts "Очень жарко."
when 20..29
  puts "Тепло."
when 0..19
  puts "Холодно."
else
  puts "Температура вне допустимого диапазона."
end

				
			

Здесь используются диапазоны для определения диапазона температур и вывода соответствующих сообщений.

5. case с объектами и типами данных

Вы можете использовать конструкцию case для проверки типа объекта или значения переменной. Это полезно для выполнения различных действий в зависимости от типа данных.

Пример использования case с типами данных:

				
					value = 42

case value
when Integer
  puts "Это целое число."
when String
  puts "Это строка."
when Array
  puts "Это массив."
else
  puts "Неизвестный тип."
end

				
			

Здесь case проверяет тип объекта value и выполняет соответствующий блок кода.

6. Распространённые ошибки

6.1. Ошибка: Неправильное использование тернарного оператора

Тернарный оператор может быть неправильно использован, если условия становятся слишком сложными или если он используется для выполнения сложных действий.

Пример ошибки:

				
					age = 18

# Неправильное использование тернарного оператора
message = age >= 18 ? puts("Вы совершеннолетний.") : puts("Вы несовершеннолетний.")  # Ошибка

				
			

Здесь puts не возвращает значение, которое можно использовать для присвоения переменной message.

6.2. Ошибка: Неправильное использование диапазонов в case

Ошибки могут возникнуть, если диапазоны не охватывают все возможные значения или если они неправильно определены.

Пример ошибки:

				
					temperature = 22

case temperature
when 30..40
  puts "Очень жарко."
when 20..30
  puts "Тепло."
else
  puts "Температура слишком низкая."
end

				
			

Здесь диапазон 20..30 перекрывается с диапазоном 30..40, и значение 30 попадает в оба диапазона.

Заключение

Альтернативные варианты условных конструкций в Ruby предоставляют гибкие способы для управления выполнением кода. Использование тернарного оператора, модификаторов условных операторов, и конструкций case с диапазонами позволяет писать более компактный и читаемый код. Важно правильно использовать эти конструкции для избежания ошибок и повышения эффективности кода.

7. Тестовое задание

  1. Напишите метод temperature_advice, который принимает температуру и возвращает рекомендацию о том, как одеваться. Используйте конструкцию case с диапазонами:

    • «Очень жарко» для температур выше 30°C
    • «Тепло» для температур от 20°C до 30°C
    • «Холодно» для температур ниже 20°C
  2. Напишите метод discount_message, который принимает количество покупок и возвращает сообщение с применением скидки. Используйте тернарный оператор:

    • Если количество покупок больше 10, возвращает «Вы получаете 20% скидку!»
    • Иначе, возвращает «Без скидки.»

Пример решения:

				
					def temperature_advice(temperature)
  case temperature
  when 30..Float::INFINITY
    "Очень жарко."
  when 20..29
    "Тепло."
  else
    "Холодно."
  end
end

def discount_message(purchases)
  purchases > 10 ? "Вы получаете 20% скидку!" : "Без скидки."
end

# Примеры вызова методов
puts temperature_advice(25)  # => "Тепло."
puts discount_message(12)    # => "Вы получаете 20% скидку!"

				
			

Проверьте свою программу, чтобы убедиться, что она правильно выполняет все операции и обрабатывает возможные ошибки.

logo