2012-02-01 1 views
0

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

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

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

Что я имею в виду делать сейчас:

add_row(data) 
add_row!(sheet, data) 

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

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

ответ

0

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

add_row(data) 
add_row!(sheet, data) 

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

+0

Я знаю об этом! /? используются вообще в Ruby, но существует ли какой-то аналогичный де-факто стандарт для такого типа именования, или я должен просто придерживаться значения по умолчанию для параметра? – gaqzi

+0

@gaqzi, если вы не хотите другого имени, я думаю, что значение по умолчанию для одного из аргументов - лучший способ пойти. –

0

Я использовал, чтобы увидеть Bang-методы, как более опасной версии обычного имени метода:

  • Array#reverse!, который модифицирует сам массив вместо того, чтобы вернуться новый массив с обратным порядком элементов.

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

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

0

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

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

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

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

+0

Я бы хотел, чтобы они назывались по-разному, чтобы легче различать, когда он пытается быть умным, и когда он просто делает, как сказано. Я думаю, это не имеет большого значения. Я видел конструкцию в блоге, и мне стало любопытно, было ли это вообще. – gaqzi