Em Java, os auxiliares particulares devem ir acima ou abaixo dos métodos públicos? [fechadas]

24

Percebi que um colega de trabalho e eu temos práticas opostas em relação à ordenação de métodos em nossas classes Java. Um de nós inicia uma aula com seus principais métodos públicos e depois coloca todos os auxiliares particulares em seguida. O outro de nós garante que os métodos públicos estejam no final.

Claramente, isso é apenas uma questão de estilo e não há resposta certa. No entanto, antes de decidirmos que esse assunto é apenas mais uma luta entre os Yooks e os Zooks e escolhermos arbitrariamente um ou outro, fiquei pensando se talvez houvesse uma recomendação padrão de guia de estilo Java ou algum motivo prático pelo qual uma abordagem seja melhor que a outra.

Brandon Yarbrough
fonte
13
Não importa. Jogue uma moeda. Escolha um. Fique com ele.
possível duplicação de colocação de métodos auxiliares
Kilian Foth
@KilianFoth - Esta pergunta foi feita 3 meses antes e tem mais respostas. Isso não tornaria a pergunta em questão uma duplicata desta pergunta?
Brandon Yarbrough

Respostas:

25

Embora se refira à preferência normalmente, você certamente deve tentar aderir a um padrão comum em sua organização. Portanto, o que você decidir, escolha um padrão e adote-o universalmente.

Quanto à sua escolha, se você seguir as sugestões oferecidas no Código Limpo , poderá ler o arquivo de cima para baixo como um artigo de jornal, o que sugere naturalmente que os métodos auxiliares apareçam após os métodos em que estão. ajudando. Isso levaria à legibilidade máxima da estrutura do código. Então, se você tivesse

public void doSomething()
{
     helpMe();
     helpMeAgain();
}

Seu arquivo seria estruturado como

public void doSomething() { }
private void helpMe() { }
private void helpMeAgain() { }

Outro efeito colateral disso é que você descobre que seus ajudantes têm ajudantes próprios e ajuda a descobrir o que você realmente tem é outra classe vivendo em seu arquivo e pode refatorar de maneira limpa para extraí-lo para sua própria classe, pois esses métodos são já agrupados em ordem. Mas isso é um benefício secundário.

Anthony Pegram
fonte
Que bom que você disse isso ou eu teria. Perguntei ao próprio Bob Martin como ele ordena as coisas se dois métodos usam um terceiro método. Nesse caso, ele coloca o terceiro abaixo dos outros dois.
Daniel Kaplan
1
Seu exemplo não mostra isso, mas isso leva a métodos públicos misturados entre os métodos privados. Eu uso essa técnica, mas muitas vezes me sinto arrasada e quero aumentar todos os métodos públicos para o topo, porque também há muito a ser dito para ler a interface pública com facilidade.
9133 Sean
@Sean, bem, eu normalmente tentaria limitar a API pública da minha classe ou deixá-la como uma fachada, se apropriado, mas depois colocaria os auxiliares de implementação em colaboradores. Teste, refatorar, extrair, repetir. Mas é claro que depende de quão longe você deseja ir. Eu prefiro minhas aulas pequenas.
Anthony Pegram
11

Métodos públicos são a interface da classe. Alguém interessado em usar sua classe se preocupará apenas com a interface. Da perspectiva de um usuário de classe, seria útil ter os métodos públicos primeiro para reduzir a rolagem.

mike30
fonte
5

Em C e C ++, os métodos auxiliares geralmente são colocados em primeiro lugar, porque você não precisa de uma declaração. Muitas pessoas carregaram esse hábito para outras línguas onde isso não importa.

Prefiro os métodos públicos no topo, porque geralmente quando abro um arquivo, procuro sua interface pública. Não quero ter que rolar todos os detalhes da implementação. Também é o estilo mais popular que eu já vi, então há isso a ser dito sobre convenções.

Karl Bielefeldt
fonte
2

Eu gosto que a ordem dos métodos em uma classe seja baseada na legibilidade e no contexto, não na visibilidade.

isto é, um método 'aberto' provavelmente pertence antes de um 'fechamento'. Se dois métodos públicos 'a' e 'b' chamam um 'c' privado, e eles são os únicos a chamá-lo - então eu gosto de 'c' estar ao lado deles.

Não acho que uma convenção de ordenação de métodos baseada em visibilidade seja uma coisa boa.

ptyx
fonte
1

Costumo preferir ver minhas aulas em que os membros são listados em ordem de importância / visibilidade (aqui, por importância, quero dizer que têm impacto direto na interface pública).

Assim, funções privadas tendem a ser empurradas para baixo.

Há exceções nisso, onde também tenderei a agrupar funções semelhantes, de modo que ainda é possível encontrar pequenas funções privadas misturadas com o material público.

Isso é, como você disse, uma questão de gosto.

No entanto, ao trabalhar com código que não é meu, tentarei seguir as convenções usadas no projeto.

Uma boa maneira que encontrei para acompanhar isso é (supondo que você trabalhe com o Eclipse) criar uma configuração de formatação de código e exportá-la com a fonte do projeto e comprometê-la com o controle da fonte. Dessa forma, a convenção de código mais recente e melhor para o projeto está a apenas alguns cliques de distância para configurar e criar um habbit de CTRL-SHIFT-F antes que você cometa evitará muitos argumentos.

O bônus adicional de usar formatadores automáticos é que você pode fazer as coisas em qualquer convenção que o faça feliz e apenas formatar o código antes de confirmar. YMMV, dependendo da referida convenção e ferramenta de formatação.

Newtopian
fonte