соглашения по именованию логических методов ruby ​​/ rails - PullRequest
2 голосов
/ 10 февраля 2011

У меня короткий вопрос об соглашениях по именованию методов ruby ​​/ rails или о хорошей практике. Рассмотрим следующие методы:

# some methods performing some sort of 'action'
def action; end
def action!; end

# some methods checking if performing 'action' is permitted
def action?; end
def can_action?; end
def action_allowed?; end

Так что мне интересно, какой из трех методов амперсанда будет «лучшим» способом запрашивать разрешения. Я бы как-то пошел с первым, но в некоторых случаях я думаю, что это может быть перепутано со значением has_performed_action?. Таким образом, второй подход может сделать это более понятным, но он также немного более многословен. Третий на самом деле просто для полноты. Мне это не очень нравится.

Так есть ли общепринятые хорошие практики для этого?

Ответы [ 4 ]

4 голосов
/ 10 февраля 2011

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

self.run
self.can_run? # can this object run?
self.running_allowed? # is running allowed here or by this user?

self.redeem!
self.redeemable? # is this object currently redeemable?

self.copy_to_clipboard
self.copy_to_dashboard
self.copyable? or self.can_be_copied? #can this object be copied
self.copy_allowed?(:clipboard) # is copying to the clipboard allowed by me?
2 голосов
/ 10 февраля 2011

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

perform_action!("update") if action_allowed?("update")

Мне кажется, что он идеально читается.

1 голос
/ 17 мая 2012

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

# some methods performing some sort of 'action'
def act
def act!

Это имеет удобный побочный эффект более естественного ответа на ваш вопрос:*

# method checking if 'action' is permitted
def can_act?

... а также некоторые другие очевидные варианты:

# methods checking if 'action' was performed
def acted?
def did_act?

# method checking if 'action' is called for by other circumstances
def should_act?

# method putting 'action' into a work queue
def act_later(delay_seconds=0)

Et cetera.

0 голосов
/ 10 февраля 2011
def can_action?; end
...