Estilos Java conflitantes em uma equipe

12

Faço parte de uma equipe de desenvolvimento Java com prazo de 6 semanas. Isso requer a criação de uma grande quantidade de código muito rapidamente. No entanto, nossa equipe de desenvolvimento possui diferentes estilos de codificação. Tudo, desde convenções de nomes até métodos de abstração, diferem entre nossa equipe. Alguém sabe de algum documento que dite "padrões" para java?

Para esclarecer, fiquei pensando se havia uma organização que ditaria a convenção de nomenclatura adequada para variáveis ​​e funções, por exemplo. Isso é fundamental, pois com um prazo tão curto que não podemos gastar tempo tentando compreender o código um do outro.

Daniel Gratzer
fonte

Respostas:

18

Existe uma organização como essa: Sun / Oracle em si. O documento é chamado de Convenções de Código para a Linguagem de Programação Java e descreve a maioria das convenções necessárias. Basta que todos concordem em ler e seguir suas recomendações.

Andres F.
fonte
3
Essa é uma norma bem conhecida, mas não tenha medo de se desviar dela quando a equipe concordar. Ser restrito a 80 caracteres de largura pode ser doloroso, por exemplo.
Martijn Verburg
1
@MartijnVerburg o limite pode solicitar a refatoração em métodos e classes para evitar recuo profundo.
Esta é uma convenção e pode ser um substituto razoável, se você não encontrar um contrato próprio, mas, como o nome indica, não é obrigatório - é uma convenção.
usuário desconhecido
@userunknown Você está certo. Eu nem concordo com todas as convenções. Mas é um bom compromisso, dado o prazo do OP.
Andrés F.
8

Estou realmente identificando a resposta de Andres e focando no aspecto de formatar uniformemente o código java.

Se você estiver usando o Eclipse, poderá configurar seu formatador Java para formatar automaticamente para o padrão Java. O formatador do Eclipse também possui outras configurações úteis, como os caracteres por linha (ou seja, quantos caracteres por linha antes de quebrar em uma nova linha) e muitos outros. A padronização de caracteres por linha facilita a difusão do código escrito por diferentes desenvolvedores sem muitas diferenças apenas no espaçamento e nas quebras de linha.

Finalmente, com o Eclipse, depois de definir todas as configurações desejadas, exporte seu formatador como um arquivo que pode ser importado por todos os membros da equipe. Portanto, se você estiver usando o Eclipse, eu recomendo explorar totalmente todas as opções que serão formatadas automaticamente e editadas para você, além de compartilhar as configurações com toda a equipe.

Eu diria que os outros IDEs Java principais (IntelliJ e Netbeans) têm um recurso semelhante para exportar as configurações de formato.

Sam Goldberg
fonte
2
+1 boa resposta também! Você também pode instalar um plug-in como o Checkstyle e avisá-lo quando quebrar as convenções.
Andres F.
Também fazemos isso. Preferências -> Java -> Editor -> Salvar opções e ative o formato ao salvar. O principal motivo é garantir que as linhas de origem afetadas por um formato ocorram o mais rápido possível para obter o histórico de controle de versão o mais limpo possível (diferenciais novamente).
Sim, também comecei a fazer isso recentemente. A única coisa que não tenho certeza é que selecionei a opção "remover variáveis ​​privadas não utilizadas" na opção salvar. Então, enquanto eu estou fazendo TDD, acho que com frequência, minhas variáveis ​​desaparecem porque o código foi salvo antes de usá-las ... mas, além disso, essa opção tem sido ótima.
Sam Goldberg
6

Esse [estilos diferentes de codificação] é fundamental, pois com um prazo tão curto que não podemos gastar tempo tentando entender o código um do outro.

Na realidade. Não é primordial.

Depois de 30 anos como consultor, li muitos códigos de muitos clientes. É importante observar que todos os clientes (e geralmente dentro da organização de um cliente) existem estilos variados.

Depois de ler tantos estilos, aprendi isso.

O estilo não importa

Concentre-se na escrita de código que sempre funciona e na escrita de testes de unidade que provam que sempre funciona.

Depois de enviar o código de trabalho, você poderá usá-lo se ficar sem bugs para corrigir e aprimoramentos para instalar.

S.Lott
fonte
talvez não importe, mas também é muito bom de ter e muito fácil de fazer.
Kevin Kevin
1
Estilo não importa, mas a consistência importa. O estilo inconsistente dificulta muito a manutenção do software.
Jesper
5
@ Jesper: "O estilo inconsistente dificulta a manutenção do software" um pouquinho ". Não é muito mais difícil de forma alguma. Código opaco, ruim e com erros é muito mais difícil de manter. Estilos inconsistentes no código de trabalho são apenas estilos inconsistentes. Algumas pessoas têm sotaque e você precisa ouvir com mais atenção. Estilos inconsistentes são pouco mais que um sotaque regional (ou nacional) diferente.
S.Lott
1
Estilo não importa em um sentido global, mas o estilo consistente dentro de uma única equipe faz importa. Não fará nem interromperá um projeto, mas se é tão fácil ser consistente quanto não, por que não seguir em frente e ser consistente? Seu código será pelo menos marginalmente melhor.
Bryan Oakley
1
"Seu código será" melhor "marginalmente melhor". E sim, é quase zero custo e certamente zero risco. Mas. 100% de cobertura de teste é muito, muito mais valiosa que a consistência.
31512 S.Lott
2

Não se preocupe em escolher um padrão universal perfeito. Tudo o que você precisa é que sua equipe aceite um padrão e cumpra-o. Faça o seu próprio, se desejar, mas seja consistente.

A consistência melhora a colaboração, a colaboração aprimora o código.

Mesmo que a consistência real não ajude, o fato de sua equipe trabalhar em conjunto para chegar a um acordo é uma coisa boa. Sua incapacidade de concordar com algo tão simples quanto as convenções de codificação diz que pode haver problemas maiores de trabalho em equipe à espreita.

Bryan Oakley
fonte
0

O Sun Java CC mencionado acima não só tem 13 anos e algumas de suas regras estão desatualizadas (como 80 caracteres por linha), mas também não define convenções de nomenclatura, exceto as mais gerais (revestimento de camelo para classes, maiúsculas e minúsculas) para variáveis ​​finais estáticas e similares).

Você precisa definir seus próprios padrões para diferentes tipos de classes, como DAOs, EJBs, entidades, o que você usar. O Sun Java CC é como uma classe base abstrata destinada a estender :)

MaDa
fonte
Concordo que o Java CC da Sun é um pouco antigo, mas serve apenas como ponto de partida. Presumo que o OP não tenha muito tempo a perder definindo seu próprio CC, ou ele teria dito isso! (BTW, onde atualmente trabalho, eles usam um plug-in do Sonar configurado para impor o limite de 80 caracteres - portanto, essa regra ainda está ativa e está ativa em algumas lojas).
Andrés F.
Além de outras razões, a legibilidade é um fator. Ter que digitalizar uma longa distância através de uma linha é muito menos eficiente do que digitalizar para baixo. Com um código bem formatado, você pode verificar rapidamente códigos irrelevantes.
BillThor
Se você estiver enfrentando problemas com 80 caracteres por linha, terá identificadores incrivelmente longos ou estará colocando muita coisa em linhas únicas. O primeiro é bobo (você não pode destilar a essência para menos do que isso?) E o último é uma indicação de uma necessidade urgente de refatoração. A formatação automática no salvamento é excelente desde então, você não precisa mais se preocupar com a formatação; o software lida com você.
Donal Fellows
@DonalFellows Sim, atualmente, o limite de 80 caracteres existe para lembrá-lo de refatorar, não por causa de telas de terminal pequenas.
Andrés F.
0

Conforme mencionado por outros aqui, você pode pesquisar on-line um dos poucos 'guias de estilo' populares para Java e convencer todos da equipe a cumpri-los. Algumas ferramentas de verificação de código no seu IDE favorito podem ajudar a lembrá-lo quando você não estiver fazendo isso.

No entanto, às vezes a política está envolvida. Já estive em uma situação em que o desenvolvedor mais sênior da equipe continua fazendo o que quer, mesmo depois que alguém mencionou a necessidade de padronizar. Em tal situação, talvez seja melhor observar seu estilo de código e segui-lo, pois ele provavelmente tem mais conhecimento sobre a base e os requisitos de código e você pode não querer perder tempo pisando nos dedos dos pés, mesmo que esteja sendo difícil. Foi o que o resto de nós fez nessa situação em particular e eu relutantemente o segui.

Portanto, é importante considerar sua situação também.

snowpolar
fonte
Que país é esse? Parece uma coisa cultural.
@ ThorbjørnRavnAndersen Ele quis dizer que as pessoas podem ser resistentes à mudança quando "o que elas estão fazendo há tanto tempo funciona". Política neste sentido é apenas "política de escritório"
Robotnik
0

Tio Bob mostra um estilo de codificação mais moderno e atual em seu livro "Clean Code". Infelizmente, não contém uma lista de itens. Você tem que ler isso. Ele diz a si mesmo que, para ver suas convenções, você precisa ler o código dele. O tio Bob é sem dúvida um tipo de instituição. De qualquer maneira, o livro é uma excelente leitura, portanto, mesmo que seja tarde demais para lê-lo agora, leia-o o mais rápido possível.

Peter Kofler
fonte
0

O que realmente importa no código é baixa complexidade ciclomática, escopo pequeno, alta coesão e escolha de identificadores expressivos. Diante disso, o código se torna fácil de entender e é bom.

Eu sugiro que você analise a programação espartana .

A maioria dos padrões de codificação informa como fazer com que o código mal escrito pareça bonito e a maioria das discussões sobre o "estilo de codificação" são realmente sobre formatação. A formatação de código é sobre representar visualmente a estrutura do seu código. É trivial e automatizável e quase não tem nada a ver com o estilo de codificação, porque o estilo de codificação não é sobre como você representa a estrutura do código, mas sobre como você o estrutura.
Também existem muitas guerras religiosas sobre convenções de nomenclatura, embora na verdade elas sejam apenas um truque para contornar o design deficiente. Um nome é bom, se diz o que significa. Quanto menor e mais claro o seu escopo, mais fácil é escolher esse nome.

back2dos
fonte