Ruby

Теория: Хеш как последний параметр функции

Одна из идиоматических конструкций в Ruby – функция, принимающая последним параметром хеш. Обычно этот хеш содержит опции. Такое часто встречается и во встроенных функциях, и в библиотеках:

# link_to(body, url, html_options = {})
link_to 'blog', 'https://ru.hexlet.io/blog', { id: 'news', class: 'article' }
# <a href="https://ru.hexlet.io/blog" class="article" id="news">blog</a>

В Ruby добавлен «синтаксический сахар», позволяющий опускать скобки в подобных ситуациях. Вызов выше в реальном коде выглядит так:

link_to 'blog', 'https://ru.hexlet.io/blog', id: 'news', class: 'article'

К такому способу записи нужно немного привыкнуть, так как может быть не сразу понятно, что к чему относится. Но потом станет видно, насколько он удобен и практичен. Это ещё одна из «фишек» Ruby, которая помогает строить языки предметной области (DSL). Из-за небольшого количества дополнительного синтаксиса код на Ruby может выглядеть просто как текст. Ниже пример роутинга (отвечает за формирование адресов страниц сайта) из Rails:

# В большинстве других языков подобная конструкция либо невозможна,
# либо получится в разы сложнее и загроможденнее символами
resources :companies, only: [:show, :edit, :update, :destroy] do
  resources :orders, only: [:create] do
    member do
      get :payment
    end
  end
end

Рекомендуемые программы