Соглашение об именах для синтаксических методов сахара - PullRequest
0 голосов
/ 01 февраля 2012

Я создаю библиотеку для общих отчетов, Excel (используя Spreadsheet ), и большую часть времени я буду писать вещи на последнем созданном листе (или активном, как я чаще всего упоминаю) это).

Так что мне интересно, существует ли соглашение об именах для методов, которые в основном являются сахаром для обычного / неоснащенного метода.

Например, я видел сообщение в блоге , прокрутите вниз до Composite, некоторое время назад, где автор использовал #method для подслащенного и #method! когда без присмотра / ручной.
Можно ли сказать, что это нормальный способ работы или просто странная реализация?

То, о чем я сейчас думаю, это:

add_row(data)  
add_row!(sheet, data)

Мне кажется, это хорошо подходит, но есть ли согласие относительно того, как следует называть методы такого типа?

Редактировать Я знаю, что! используется для «опасных» методов и? для запросов / логических ответов. Вот почему мне стало любопытно, можно ли считать использование в Prawn (пост в блоге) нормальным.

Ответы [ 3 ]

0 голосов
/ 01 февраля 2012

Я думаю, будет справедливо сказать, что ваши определения:

add_row(data)  
add_row!(sheet, data)

собираются сбить с толку пользователей Ruby. Существует множество соглашений по именованию, которое сообщество Ruby считает де-факто стандартом именования. Например, методы bang предназначены для изменения получателя, см. map и map! . Другое соглашение заключается в добавлении ? в качестве суффикса к методам, которые возвращают логическое значение. См. all? или any? для справки.

0 голосов
/ 01 февраля 2012

Почему есть два отдельных метода? Например, вы можете сделать лист необязательным параметром, например

def add_row(sheet = active_sheet, data)
  ...
end

значения по умолчанию не должны быть просто статическими значениями - в этом случае вызывается метод active_sheet. Если моя память верна до ruby ​​1.9, вам придется поменять местами параметры, поскольку за дополнительными параметрами не могут следовать необязательные.

Я бы согласился с другими ответами, что ! имеет для меня довольно разные значения.

0 голосов
/ 01 февраля 2012

Я привык видеть bang-методы как более опасную версию обычного именованного метода:

  • Array#reverse!, который изменяет массивСам вместо возврата нового массива с обратным порядком элементов.

  • ActiveRecord::Base#save! (из Rails) проверяет модель и сохраняет ее, если она действительна.Но в отличие от обычной версии, которая возвращает true или false в зависимости от того, была ли модель сохранена или нет, вызывает исключение, если модель недействительна.

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

...