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