O que contribui para o "bom estilo" em Java? [fechadas]

9

Eu fiz essa pergunta no Stackoverflow e, antes de ser vaiado, recebi a sugestão útil de Péter Török de que esse poderia ser o melhor lugar para publicá-la.

Venho programando em Java há alguns anos. Eu sempre discuti decisões de design com colegas com base no que constitui 'bom estilo'. De fato, há várias perguntas / respostas do StackOverflow que discutem um design com base no fato de algo ser 'bom estilo'.

Mas o que faz 'bom estilo'? Como muitas coisas, eu sei quando a vejo ... mas eu queria ter uma idéia melhor do que apenas minha consciência dizendo que esse design não parece certo.

Quais são as coisas em que você pensa para produzir um código bom e bem projetado?

(Eu reconheço que isso é um pouco subjetivo, pois o que é 'bom estilo' dependerá da tarefa em questão). (Além disso, devo acrescentar que não estou interessado em estilos de equipe - por exemplo, "usamos recuos de 2 espaços em vez de 4" ... e não estou interessado nas convenções de código Java.)

Edit: obrigado por todas as boas respostas / comentários até agora. Estou especialmente interessado em respostas que ajudem a codificar aquelas coisas que fazem a consciência de um programador (e possivelmente o estômago) se mexer?

amaidment
fonte
Entre muitas outras coisas listadas aqui, eu definitivamente me certificaria de simplesmente declarar que os computadores podem compilar código de qualquer maneira que você o escrever, mas, em última análise, o código precisa ser legível por humanos . Comente como um louco! Um bom teste que gosto de usar: uma pessoa poderia ler apenas meus comentários para saber o que o código faz, quais devem ser as entradas e saídas e o (s) algoritmo (s) usado (s) para fazer isso?
Brian
11
@brian, faça seu código explicar como . Deixe comentários reais para explicar o porquê . Em outras palavras, não comente como um louco (em geral)
4
Brian: Essa técnica definitivamente não é considerada uma boa prática. A boa prática comum é tentar tornar seu código o mais documentado possível (com nomes claros de variáveis ​​e coesão de funções), com comentários para explicar o "porquê" e não o "como". Os comentários que explicam todos os pequenos detalhes são geralmente considerados perturbadores e muitas vezes perigosos, pois as pessoas têm menos probabilidade de manter os comentários do que o código.
Casey Patton
11
@ Brian: Sua última declaração diz tudo. O código deve ser legível. Os comentários ficam obsoletos. Código nunca. Se você sentir necessidade de comentários, refatorar até que o código seja tão claro que os comentários apenas repetam o que o código diz. O único bom comentário é o que diz por que o código funciona de uma maneira específica - como evitar um bug em uma biblioteca de terceiros - para que alguém não volte e mude para algo que não funcionará por uma razão isso não é imediatamente aparente.
Ryan Stewart
2
Eu fui oficialmente humilhado. Desculpe @amaidment. Eu acho que preciso pesquisar bons padrões de codificação quando se trata de comentários.
Brian

Respostas:

17

Alguns breves pontos:

Ryan Stewart
fonte
3
+1. Talvez o mais crítico: minimize o código duplicado. Se você for tentado a recortar e colar mais de alguns tokens, precisará extrair uma função. Mesmo se a função for uma única linha de código.
Kevin cline
4
No código duplicado, tomo a seguinte postura. Cortar e colar = ok. Isso é apenas mover o código (supondo que você use colar uma vez). Copie e cole = horrível. Se você acabou de remover o botão de cópia do seu vocabulário, é mais provável que faça a coisa certa.
Jsternberg
@jsternberg: +1 para distinguir recortar / copiar, mas noto que muitas pessoas dizem "recortar / colar" quando querem dizer "copiar / colar". Não sei como a distinção se perdeu.
Ryan Stewart
5
Não se repita. Não se repita. Não se repita.
configurator
11
@configurator, você cheira um pouco engraçado ...
9

Adicionando à lista de Ryan:

  • Siga os princípios do SOLID
  • Garanta que seu código não tenha muita complexidade cíclica
  • Java orientado a testes é sempre uma coisa boa
  • Se você tem uma xFactoryFactoryaula, está fazendo errado :-)
  • Dadas as bibliotecas de código aberto no ecossistema Java, reinventar a roda é um estilo ruim
  • Usar hora Joda para data e hora

Eu vou parar por aí.

Martijn Verburg
fonte
2
Mas e a HammerFactoryFactoryFactoryaula? ;-)
Wayne Molina
@Wayne, Fábricas são uma indicação de que algumas decisões precisam ser adiadas, e FactoryFactoryFactories indicam que há uma decisão que realmente precisava ser tomada em tempo de execução, mas não pôde.
Eu sei, eu estava sendo sarcástico e fazendo referência a esse artigo sobre por que o J2EE era excessivamente complexo, com HammerFactories e HammerFactoryFactories e acho que HammerFactoryFactoryFactories. :)
Wayne Molina
@ Martijn - obrigado pelo link do SOLID; Eu nunca vi isso antes. Você sugere usar o JodaTime; isso é apenas uma aversão (apropriada) às classes Java Calendar / Date? E o JSR310 (o sucessor do JodaTime)?
amaidment 23/08/11
Esperamos que o JSR-310 chegue ao Java 8 (há muitos de nós se preparando para tentar ajudar a fazer isso acontecer, entre em contato comigo se você quiser se envolver). Enquanto isso, o tempo Joda é o padrão para lidar com data e hora em Java. Há tantas coisas erradas no sistema de data e calendário do Java que nem sei por onde começar ;-). O assassino é que Datas são mutáveis ​​e que não há conceito de um instante ou período ou ... não, eu vou parar por aí :-).
Martijn Verburg
1

Embora aprecie as respostas dos outros, achei justo compartilhar algumas das coisas em que penso ao tentar escrever um bom código:

  • o que precisa saber sobre essa classe / método / variável? ou seja, onde esse conhecimento deve morar?

  • como esse código pode afetar a memória / desempenho do meu aplicativo? (Reconheço que 'a otimização prematura é a raiz de todo mal'; portanto, não estou sugerindo que você gaste muito tempo otimizando, mas sim uma consciência enquanto inicialmente escrevia meu código.)

  • está claro (do código e das estruturas de código) o que isso faz? (Tento seguir a máxima: "Esforce-se para não permitir que as pessoas entendam, se esforce para tornar impossível que as pessoas entendam mal".)

amaidment
fonte
1

Leia a classe String e ArrayList para obter excelentes exemplos de programação Java adequada. Mas eles são altamente concisos, quase no estilo C, o que não é necessariamente o melhor para código de manutenção com documentos java mínimos. A prática comum em minha loja é sem comentários, por isso tento comentar por código usando nomes detalhados de camelCase var e uso excessivo de novas linhas para delimitar uma linha de pensamento da outra. Ainda discuto usando guias para separar os vars de seus valores. As guias podem melhorar a legibilidade, IMO, mas apenas quando feitas minimamente e são muito subjetivas. Acho que é realmente sobre o público. Não há melhor resposta aqui.

carlmart
fonte