Бесплатный курс по ruby. Зарегистрируйтесь для отслеживания прогресса →

Ruby: Всё есть выражение

Кроме того, что в Ruby всё есть объект, практически всё — ещё и выражение. Что это значит? Возьмём для примера условные конструкции, например, if. if в большинстве языков — это конструкция языка, которая может появляться только в определенных местах. Её нельзя использовать в составе каких-то выражений. В Ruby это не так:

# Так как if выражение, значит
# мы можем присваивать результат его выполнения
a = if 5 > 3
  'yes'
else
  'no'
end

puts a # => 'yes'

То же самое касается любых других конструкций, вплоть до определения функций/методов, модулей, классов:

# В f попадает не сама функция, а её имя в виде символа
f = def foo
end
puts f # :foo

Зачем это нужно? Чем больше языковых конструкций реализовано в виде выражений, тем более выразительным является язык. В таком языке больше возможностей за счёт комбинирования конструкций, как в примере с if.

Задание

Реализуйте функцию invert_case(), которая меняет в строке регистр каждой буквы на противоположный.

invert_case('Hello, World!'); // hELLO, wORLD!
invert_case('I loVe JS');     // i LOvE js

Полезные методы:

  • upcase() – перевод строки в верхний регистр
  • downcase() – перевод строки в нижний регистр
  • each_char() – обход строки побуквенно

Нашли ошибку? Есть что добавить? Пулреквесты приветствуются https://github.com/hexlet-basics
Если вы столкнулись с трудностями и не знаете, что делать, задайте вопрос в нашем большом и дружном сообществе