Синтаксический сахар

В Ruby для одного и того же действия можно найти десяток вариантов решения проблемы, причем не изменяя принцип работы программы. Знание и применение синтаксического сахара позволяет сократить кол-во написанного кода, а также получить от других разработчиков уважение и почет.

Сокращаем блок кода до минимума

мы знаем, что записать блок кода мы можем c помощью { |x| ... } и do |x| ... end, но часто бывает так, что код внутри блока может состоять из вызова 1 метода у параметра. В таких случаях мы можем превратить запись arr.map {|x| x.some_method } в эквивалентную ей arr.map(&:some_method).

words = ["dog", "magic", "service"]
p words.map {|word| word.capitalize}

p words.map(&:capitalize) # работает точно так же как и пример выше, просто короче записывается

Proc => Блок => Proc

Кроме того знак & может служить способом перевода Proc в блок кода добавляя & перед самим proc

func = proc {|x| puts x }

# распечает в консоль все ёлементы массив
[1, 5, 2, 0].each(&func)

Также мы можем превратить наш proc в блок кода, добавив & перед названием аргумента

def map_val(val, &func)
  func.call(val)
end

# вместо передачи proc мы объявляем его как блок кода
puts map_val(100) {|x| x + 1 }

Скобки не нужны

По ходу курса мв привыкли писать наши методы с помощью скобок def method(arg), но на самом деле скобки в ruby не являются обязательным атрибутам,с соответсвенно мы можем записать метод в формате def method arg.

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

Записать, только если ранее не было записано

Возможно вы уже сталкивались с необходимостью проверять каждый раз на nil переменную перед тем как записать в нее значение и выглядело это следующим образом:

на самом деле такую запись можно заметно сократить до:

метод []

При работе с массивами или хэш таблицей мы сталкивались с обращением к значению по индексу или ключу с помощью arr[index], но на самом деле такая запись доступна для собственных классов тоже

Если можно обойтись без цикла, значит лучше без него

Циклы являются самыми старыми конструкцйиями любого языка, но с прошествием времени появились такие методы как .each, .map, .select, которые на данный момент являются более предпочтительным вариантом записи. Конечно в 100% случаев нельзя обойтись только ими, поэтому если в вашей программе проще и чище обойтись циклом, значит не стоит пытаться придумать как обойтись без них.

Задание refactoring

Сделайте этот код более чище с помощью синтаксического сахара

Last updated