Я разработчик Ruby on Rails уже 4,5 года. Естественно, вначале я был склонен заново изобретать колесо и писать методы, которые, как я позже выяснил, были частью богатого Ruby (on Rails) API. Я считаю важным хорошо знать существующие методы. Таким образом мы кодируем быстрее, а наш код короче, элегантнее и выразительнее.

Один из способов, которым я обнаружил эти методы, - это решение ката кода на HackerRank, Codewars или Exercism. Я увидел ответы других людей и понял, что с Ruby всегда есть более элегантный способ.

Итак, я решил написать серию статей, посвященных менее известным и практичным методам Ruby (on Rails). Я не буду копировать полную документацию, но упомяну основное использование и цель метода с некоторыми примерами. Поскольку я гурман, примеры из области еды, поэтому будьте осторожны: эта статья может заставить вас проголодаться!

В этой первой статье я расскажу о классе Array.

delete_if

Удаляет каждый элемент self, для которого блок имеет значение true. Существует также для Hash. Существует также «обратный» метод keep_if.

%w(chia flax pumpkin).delete_if { |s| s.length > 4 } 
# will delete 'pumpkin' and return ['chia', 'flax']

выборка (индекс, по умолчанию)

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

%w(croissant Kouign-amann).fetch(1) # returns my favourite French pastry, 'Kouign-amann'
%w(croissant Kouign-amann).fetch(5, 'pain au chocolat') # returns 'pain au chocolat'
%w(croissant Kouign-amann).fetch(5) { |i| "There's no pastry at index #{i}." } # returns the fallback message

to_h

Превращает массив из двухэлементных массивов в хеш; интерпретирует его как массив пар [ключ, значение].

[[:dish_type, 'salad'], [:main_ingredient, 'quinoa'], [:calories, 350]].to_h
# returns { dish_type: 'salad', main_ingredient: 'quinoa', calories: 350 }

Чисто

Удаляет все элементы. Также существует для Hash.

sweets_shelf = ['granola bars', 'energy balls', 'dark chocolate']
sweets_shelf.clear # sweets_shelf is now empty

цикл (раз)

Циклически перебирает элементы массива и уступает каждому предоставленному блоку. Он делает это указанное количество раз или навсегда.

%w(croissant coffee).cycle(3) { |c| print c, ' ' }
# prints out 'croissant coffee croissant coffee croissant coffee'

повернуть (индекс)

Поворачивает массив так, чтобы элемент в позиции index стал первым элементом.

%w(oats milk honey apricots).rotate(-3)
# returns ['milk', 'honey', 'apricots', 'oats'], the ingredients for a breakfast porridge

образец (количество = 1)

Возвращает n случайных элементов из массива.

%w(chocolate figs hazelnuts).sample
# returns any of the 3 elements

сворачивать

[Rails] Метод класса. Оборачивает свои аргументы в массив, если он уже не является массивом (или подобным массиву).

Array.wrap 'crêpe' 
# returns ['crêpe']

приговорить

[Rails] Создает предложение, разделенное запятыми, из элементов массива. Последние два элемента соединяются соединительным словом (которое можно настраивать и локализовать).

['mozzarella', 'tomato', 'basil', 'olive oil', 'salt'].to_sentence
# returns 'mozzarella, tomato, basil, olive oil and salt', a simple recipe for caprese salad

без (элементов)

[Rails] Возвращает массив без указанных элементов.

%w(burger salad smoothie coke).without('burger', 'coke')
# returns healthy food options: ['salad', 'smoothie']

Итак, это были мои любимые, менее известные методы Array.

Что вы думаете? Вы используете какой-нибудь? Или, может быть, вам есть что порекомендовать? Я бы хотел услышать!