В большинстве блогов, руководств или книг есть частные методы внизу любого класса / модуля. Это лучшая практика?
Я нахожу более удобными частные методы по мере необходимости. Например:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
Таким образом, я нахожу код более читабельным, вместо того, чтобы постоянно прокручивать вверх и вниз, что очень раздражает.
Что-то не так в этом подходе? Наличие частных методов внизу - это не просто лучшая практика и что-то еще?
ruby
conventions
ZX12R
источник
источник
private def my_method...end
Ответы:
На мой взгляд, лучшая практика - идти последовательно и объявлять свои методы, не сохраняя при этом конфиденциальность.
В конце вы можете сделать любой метод приватным, просто добавив:
private :xmethod
Пример:
Это оправдывает ваш вопрос?
источник
Также есть возможность добавить
private
к определению метода начиная с Ruby 2.1.Глядя на определение, вы сразу узнаете, является ли метод закрытым, независимо от того, в каком месте файла он определен. Это немного больше набора текста (если вы не используете автозаполнение), и не все ваши
def
s будут хорошо выровнены.источник
private
только один раз передymethod
, также работает. Нет необходимости добавлять его несколько раз.zmethod
безprivate
, этот метод не был бы частным. Итак, вам нужно повторить это (по крайней мере, с Ruby 2.3).Как уже отмечали другие, соглашение заключается в размещении частных методов внизу под одним частным классом. Однако вам, вероятно, также следует знать, что многие программисты используют для этого метод с двойным отступом (4 пробела вместо 2). Причина в том, что часто вы не видите «частные» в текстовом редакторе и предполагаете, что они могут быть общедоступными. См. Иллюстрацию ниже:
Этот метод должен избавить вас от необходимости прокручивать страницу вверх и вниз, а другим программистам будет удобнее работать с вашим кодом.
источник
begin..end
сразу послеprivate
. Тогда отступ может быть установлен автоматически редактором, поскольку код внутриbegin
(в приведенном выше примере) семантически имеет отступ с 4 пробелами.public
а затемprivate
Я считаю, что публичные методы - это своего рода интерфейс объекта, и логично разместить их на самом видном месте, то есть в верхней части файла.
источник
Вам не нужно ставить
public
илиprivate
над каждым методом. Обычно я помещаю все свои частные методы в конец своего класса. Кроме того, не нужно явно указывать,public
что методы по умолчанию являются общедоступными. Например:источник
Я исхожу из фона java, и мне не нравится прокручивать, чтобы увидеть тип метода. Я думаю, это безумие, что нельзя указать видимость метода для каждого метода без уродства. В итоге я оставил комментарий
#private
перед каждым методом отстой и объявилprivate :...
.источник
private def method...
получшеМне не нравится указывать публичный или частный для каждого метода. Размещение всех приватных методов внизу позволяет мне иметь единственный экземпляр «приватных» для каждого файла. Думаю, дело вкуса.
источник
Один стиль для групповых методов вместе , так что вы используете только
private
иprotected
один раз в классе максимум. Другой стиль - указать видимость сразу после определения метода:Начиная с Ruby 2.1.0,
def
имя метода возвращается в виде символа, поэтому возможен более упрощенный стиль:(Обратите внимание, что мы используем
private_class_method
методы класса - в противном случае мы получили бы,NameError: undefined method
посколькуprivate
ожидает метод экземпляра. Даже при использовании его в качестве макроса, как в исходном примере, он влияет только на видимость методов экземпляра.)Мне больше всего нравится этот стиль встроенной видимости, поскольку он позволяет вам организовывать методы по своему усмотрению. Это снижает риск добавления нового метода в неправильное место и непреднамеренного превращения его в частный.
Что касается синтаксиса метода класса, вы можете справиться с этим следующим образом:
источник
private_class_method
вызове раньше, и последняя часть об использованииclass << self
блока, чтобы избежать необходимости его использовать, является хорошим советом. До сих пор я не знал, что методы "нормального" класса (объявленные с помощьюdef self.foo; end
вместоclass << self; def foo; end
не будут затронутыprivate
спецификатором.У Денниса был идеальный ответ, то есть при использовании ruby> = 2.1 просто префикс def с помощью private (или protected, public)
Но я считаю, что теперь также можно использовать private как блок, например:
источник
Обычно я упорядочиваю свои методы следующим образом:
private
, написано только один разЯ использую в своем редакторе функции «перейти к определению», чтобы это не требовало большой прокрутки, и в любом случае, если класс достаточно большой, что прокрутка становится проблематичной, его, вероятно, следует разбить на несколько классов.
источник
to_s
) ближе к концу публичного раздела.