Управляющие конструкции if-else
- фундаментальный инструмент для ветвления логики в Ruby. Они позволяют выполнять разные участки кода в зависимости от условий.
if condition
# выполняется, если condition истинно (true)
end
Пример:
if 10 > 5
puts "10 больше 5"
end
#=> "10 больше 5"
if condition
# выполняется, если condition истинно
else
# выполняется, если condition ложно (false)
end
Пример:
age = 18
if age >= 18
puts "Доступ разрешен"
else
puts "Доступ запрещен"
end
#=> "Доступ разрешен"
if condition1
# блок 1
elsif condition2
# блок 2
else
# блок по умолчанию
end
Пример:
score = 85
if score >= 90
puts "A"
elsif score >= 80
puts "B"
elsif score >= 70
puts "C"
else
puts "D"
end
#=> "B"
expression if condition
Пример:
puts "Hello" if true
#=> "Hello"
condition ? expression_if_true : expression_if_false
Пример:
age = 20
status = age >= 18 ? "adult" : "minor"
#=> "adult"
unless condition
# выполняется, если condition ложно
end
Пример:
unless user.logged_in?
redirect_to login_path
end
false
и nil
считаются ложными, все остальное - истина==
, !=
, >
, <
, >=
, <=
&&
(и)||
(или)!
(не)Пример сложного условия:
if user.admin? && (user.active? || user.super_admin?)
grant_access
end
Избегайте слишком сложных условий:
# Плохо
if user && user.profile && user.profile.address && user.profile.address.street
puts user.profile.address.street
end
# Лучше
if user&.profile&.address&.street
puts user.profile.address.street
end
Используйте guard clauses для раннего возврата:
def calculate_price(user, item)
return 0 if user.nil? || item.nil?
return 0 unless user.valid? && item.available?
# основная логика
end
Предпочитайте позитивные проверки:
# Лучше
if user.active?
# ...
end
# Чем
unless user.inactive?
# ...
end
def categorize_temperature(temp)
if temp <= 0
"freezing"
elsif temp > 0 && temp <= 15
"cold"
elsif temp > 15 && temp <= 25
"warm"
else
"hot"
end
end
puts categorize_temperature(10) #=> "cold"
Резюмируем: Управляющие конструкции if-else
в Ruby предоставляют гибкий инструмент для ветвления логики. Выбирайте подходящую форму (полная, модификатор, тернарный оператор) в зависимости от контекста. Помните о лучших практиках - избегайте сложных вложенных условий, используйте guard clauses и безопасную навигацию (&.
), предпочитайте позитивные проверки.