A maioria dos blogs, tutoriais ou livros tem métodos privados na parte inferior de qualquer classe / módulo. Esta é a melhor prática?
Acho mais conveniente ter métodos privados quando necessário. Por exemplo:
public
def my_method
# do something
minion_method
end
private
def minion_method
# do something
end
public
def next_method
end
Dessa forma, acho o código mais legível em vez de rolar para cima e para baixo continuamente, o que é muito irritante.
Há algo terrivelmente errado nessa abordagem? Ter métodos privados na base não é apenas uma prática recomendada e algo mais?
ruby
conventions
ZX12R
fonte
fonte
private def my_method...end
Respostas:
A melhor prática, no meu ponto de vista, é ir sequencialmente e declarar seus métodos sem manter o ponto de vista privado.
No final, você pode tornar qualquer método privado apenas adicionando:
private :xmethod
Exemplo:
Isso justifica sua pergunta?
fonte
Também existe a opção de anexar
private
à definição do método desde Ruby 2.1.Olhando para a definição, você sabe instantaneamente se um método é privado, não importa onde esteja definido no arquivo. É um pouco mais de digitação (se você não preencher automaticamente) e nem todos os seus programas
def
ficarão bem alinhados.fonte
private
apenas uma vez, antes deymethod
, também funciona. Não há necessidade de adicioná-lo várias vezes.zmethod
semprivate
, esse método não seria privado. Então, você precisa repeti-lo (pelo menos com Ruby 2.3).Como outros já indicaram, a convenção é colocar os métodos privados no final, sob uma classe privada. No entanto, você provavelmente também deve saber que muitos programadores usam um método de recuo duplo (4 espaços em vez de 2) para isso. O motivo é que muitas vezes você não verá "privado" em seu editor de texto e presumirá que eles podem ser públicos. Veja abaixo uma ilustração:
Este método deve evitar que você tenha que rolar para cima e para baixo e deixará outros programadores mais confortáveis em seu código.
fonte
begin..end
logo apósprivate
. Em seguida, o recuo pode ser definido automaticamente pelo editor, pois o código dentro dobegin
é (no exemplo acima) recuado semanticamente com 4 espaços.public
e depoisprivate
Acho que os métodos públicos são algum tipo de interface do objeto, e é lógico colocá-los no lugar mais proeminente, ou seja, no topo do arquivo.
fonte
Você não precisa colocar
public
ouprivate
acima de cada método. Normalmente coloco todos os meus métodos privados no final da minha classe. Além disso, não precisa dizer explicitamentepublic
que os métodos são públicos por padrão. Por exemplo:fonte
Estou vindo de um plano de fundo de java e odeio ter que rolar para ver o tipo de método. Eu acho que é uma loucura que não se possa especificar a visibilidade de um método por método sem feiura. Então acabei colocando um comentário
#private
antes de cada método de suck e depois declarandoprivate :...
.fonte
private def method...
-lo de forma mais agradávelNão gosto de ter que especificar público ou privado para cada método. Colocar todos os métodos privados na parte inferior me permite ter uma única instância de "privado" por arquivo. Acho que é uma questão de gosto.
fonte
Um estilo é a métodos de grupo juntos para que você só pode usar
private
eprotected
uma vez por classe, no máximo. Outro estilo é especificar a visibilidade logo após a definição do método:A partir do Ruby 2.1.0
def
retorna o nome do método como um símbolo, portanto, um estilo mais simplificado é possível:(Observe que usamos
private_class_method
para métodos de classe - caso contrário, obteríamos,NameError: undefined method
poisprivate
espera um método de instância. Mesmo ao usá-lo como uma macro, como no exemplo original, só afeta a visibilidade dos métodos de instância.)Eu gosto mais desse estilo de visibilidade embutido, pois permite que você organize os métodos como desejar. Isso diminui o risco de adicionar um novo método no local errado e, inadvertidamente, torná-lo privado.
Quanto à sintaxe do método de classe, você pode lidar com isso desta forma:
fonte
private_class_method
chamada antes, e a última parte sobre como usar oclass << self
bloco para evitar a necessidade de usá-lo é uma boa dica. Até agora, eu não sabia que os métodos da classe "nornal" (declarados com emdef self.foo; end
vez declass << self; def foo; end
não seriam afetados peloprivate
especificador.Dennis teve a resposta perfeita, ou seja, ao usar ruby> = 2.1, basta prefixar o def com privado (ou protegido, público)
Mas acredito que agora também é possível usar privado como um bloco como em:
fonte
Geralmente ordeno meus métodos da seguinte maneira:
private
, escrito apenas uma vezEu uso os recursos de “ir para a definição” em meu editor para que isso não envolva muita rolagem e, em qualquer caso, se a classe for grande o suficiente para que a rolagem se torne problemática, provavelmente deve ser dividida em várias classes.
fonte
to_s
) perto do final da seção pública.