Convenções de código em Java

23 respostas
B

Olá a todos.

Meu nome é Guilherme e apesar de gostar muito de Java, sou programador profissional em C/C++ não em Java :frowning:

É bem provável que alguém já tenha colocado essa pergunta aqui no fórum, mas como eu não encontrei, não custa nada perguntar e responder novamente.

Eu já li este documento da Sun sobre convenção de código:

http://java.sun.com/docs/codeconv/

mas eu achei ele meio fraco.

Em C/C++ eu uso uma convenção chamada “notação húngara”, que define coisas do tipo:

  • no nome da variável membro um “m_”;
  • o tipo da variável ou do objeto no nome de qualquer variável;
  • um “C” antes do nome das classes e um “I” antes do nome das interfaces;
    e assim por diante.

Por exemplo, uma classe Java normal seria:

public interface MinhaInterface {
    public void meuMetodoAbstrato();
}

public class MinhaClasse {

    protected Tipo1 atributo1;
    protected Tipo2 atributo2;

    public void meuMetodo(Tipo1 argumento1, Tipo2 argumento2) {
        Tipo2 variavelLocal1;
        Tipo3 variavelLocal2;

        atributo1 = argumento1;
        atributo2 = argumento2;
    }

}

Já com a notação húngara, ficaria assim:

public interface IMinhaInterface {
    public void meuMetodoAbstrato();
}

public class CMinhaClasse {

    protected Tipo1 m_atributo1;
    protected Tipo2 m_atributo2;

    public void meuMetodo(Tipo1 _argumento1, Tipo2 _argumento2) {
        Tipo2 variavelLocal1;
        Tipo3 variavelLocal2;

        m_atributo1 = _argumento1;
        m_atributo2 = _argumento2;
    }

}

Facilita por exemplo no seguinte:

  • tirar as referências “this”;

  • evita confusão entre o nome de parâmetros, atributos (variáveis membro) e variáveis locais.

  • evita confundir interfaces com classes;

  • em muitos casos pode-se saber de antemão o tipo da variável, por exemplo:

// Ao invés de usar:
String numero1 = JOptionPane.showInputDialog("Digite um numero");
int numero2 = Integer.parseInt(numero1);

// pode-se usar:
String sNumero = JOptionPane.showInputDialog("Digite um numero");
int iNumero = Integer.parseInt(sNumero);

Etc…

Então eu queria saber se existe alguma convenção desse tipo em Java, ou somente aquelas minúsculas e maiúsculas?

Abraços.

23 Respostas

TaQ

Convenções para código é um negócio complicado.

Eu acho que a única que funciona, pelo menos em termos de estética, é a do Python, que força você a indentar o código, e acaba ajudando todo mundo a fazer uma coisa mais “na forminha”. :slight_smile:

Mas até lá a convenção de nomeação é complicada. É coisa bem pessoal, e dificilmente mesmo tendo uma convenção a ser seguida você vai encontrar uma porcentagem boa de similaridade.

Até o Linus Torvalds falou que os padrões para programas GNU da FSF servem pra imprimir, dobrar e por no bolso ehehe!!! Então, fica complicado. :slight_smile:

E

Bom, sem querer ser chato mas já sendo, eu acho que a notação húngara é esteticamente feia…

Mas você pode usá-la em Java normalmente…o único problema que você vai ter é que muitas das APIs que você vai usar vão seguir a convenção Java que vc achou no site da Sun…

Particularmente eu gosto de nomes de métodos e variáveis o mais descritivos possíveis, então normalmente dá pra saber o que eles representam…o problema é que alguns nomes ficam bem grandes.

Enfim, como disse o TaQ, é muito pessoal :stuck_out_tongue:

TaQ

“New__Radical”:

Eclipse -> CTRL + F :wink:

Que que isso faz? :slight_smile:
Eu uso Vim! :smiley:

andre_a_s

Eclipse -> CTRL + I 8)

_fs

biowarrior, o problema surgirá quando for trabalhar com uma equipe. Considero imprescindível que haja uniformidade nas convenções utilizadas por todos os programadores.

E sobre o ctrl+f no Eclipse, ele formata o código baseado em configurações default ou num padrão configurado por você em:
window >> preferences >> Java >> Code Style >> Code Formatter

TaQ

“LIPE”:
biowarrior, o problema surgirá quando for trabalhar com uma equipe. Considero imprescindível que haja uniformidade nas convenções utilizadas por todos os programadores.

Senão vira aquela lambança. :slight_smile:

“LIPE”:

E sobre o ctrl+f no Eclipse, ele formata o código baseado em configurações default ou num padrão configurado por você em:
window >> preferences >> Java >> Code Style >> Code Formatter

Obrigado pela explicação. Esses estilos englobam tanto aqueles lances de:

if(x==y){
   System.out.println("ok");
}

e

if(x==y)
{
   System.out.println("ok");
}

? Pergunto por que nunca usei o Eclipse. :slight_smile:

E

Bom, sim, como disse o LIPE, vc vai em

e escolhe o padrão de formatação, e pode alterar o existente…por default, vem habilitado o padrão das convenções Java

louds

Notação húngara está para o código assim como o cancer está para o ser humano.

Eu vejo notação húngara como sujeira, lixo que mais atrapalha que ajuda.

Pode ser que ate seja util durante as etapas iniciais de um projeto, mas quando começa a manutenção, o negocio vira 1 inferno, das “iNaoSouUmInteiro” ao odioso “LCZSTRING”.

Sinceramente, use uma IDE de qualidade que é ferramenta muito mais útil que notação húgara.

Sou muito mais ícone verde e ícone roxo que “Trambolho” e “ITrambolho”.

_fs

“TaQ”:

Obrigado pela explicação. Esses estilos englobam tanto aqueles lances de:

if(x==y){
   System.out.println("ok");
}

e

if(x==y)
{
   System.out.println("ok");
}

? Pergunto por que nunca usei o Eclipse. :-)

Sim. E mais 181 outras opções a se configurar hehe

Diogenes

:lol: :lol: :lol:

B

Ok, depois que comencei a programar em Java eu entendo o ponto de vista de vocês.

Esta foi cruel:

Abusivamente sim, eu concordo, mas entenda que C++ é bem diferente que Java.
Adotar algumas convenções são importantes e deveriam ser adotadas, embora não sejam.

Bem, eu faço Computação e não Sistemas de Informação. Não quero ser preconceituoso nem grosseiro contigo, mas a maioria das ferramentas que você provavelmente usa passaram, em algum momento, por C++, e para tal, aposto que alguma notação foi usada. Pois como eu disse, o código C++ tende a ficar confuso e complexo, enquanto um código Java pode manter-se sempre simples e legível.

Realmente, e por isso eu fiz a pergunta.

Apesar de haver mais oportunidades de trabalho em Java/Web, é por essa e outras razões eu estou com receio de migrar do mercado C/C++ para Java/C#, etc.
Sabem, não quero criar uma polêmica nem nenosprezar ninguém (mesmo porque adoro Java), entretanto, só o fato de virar um simples usuário, escravo de ícones coloridas…

Quanto ao Linus, bem, o cara é um caso a parte, pois ele é muito inteligente e realmente pode descartar convenções pois ele têm uma grande capacidade de compreenção de código.

Obrigado pelas suas opiniões.

jcranky

Calma lá… Pelo o que eu entendi, ele falou que a notação húngara é ruim (concordo!! :twisted: ) e não que todas as notações o são…

pcalcado

Sinceramente, esta foi a coisa mais preconceituosa que você poderia ter escrito. Não é porque alguém faz Sistemas de Informação ou Letras que não vai ser programador, ou vai ser ‘escravo de ícones’, e nem alguém que faz Ciência da Compuitação é ‘o cara que escreve tudo na mão’. Conheço excelentes programadores bacharéis em história, isso quando são formados! E conheço muito ‘cientista da computação’ que não sabe fazer absolutamente nada que preste sem precisar de um milhão de assistentes, incluindo gente saindo das melhroes faculdades de que tenho notícia.

E se você acha que código em Java sem convenções fica legível, é porque nunca trabalhou em um projeto grande.

Notação húgara é ruim sim, exatamente pelo motivo que o louds falou: manutenção.

louds

biowarrior, qual a importancia de você fazer ciências da computação? Eu também faço, e dai?

Hoje eu trabalho em um projeto envolvendo c++ e java, e a notação hungara mais atrapalha que ajuda.

Eu tive o desgosto de trabalhar por 7 meses com winapi e c++ em 2000/01, todo meu ódio vem dessa época.

Já trabalhei com bases de código com dezenas de milhares de linhas de código c++ e notação hungara nunca ajudou, normalmente mais atrapalhava que ajudava.

Quando eu falei sobre preferir roxo e verde a ILeroLero e LeroLero me referia ao fato que esse tipo de informação não pertence ao nome do artefato, que somente deve carregar seu nome.

Diferente do c++, onde o fundamental é adotar um conjunto de regras, idiomas e recursos a serem usados; java não precisa de tanto, uma convensão minimalista que não exige que se decore trocentos prefixos.

rodrigousp

Nossa galera … calma!

Acha mesmo ? Conhece o código fonte do jboss, eclipse, sun one ?
O que está sendo discutido aqui afinal? Se você acha que códigos mais complexos exigem uma notação melhor que a notação padrão da SUN, e que java não tem esta necessidade porque o público alvo são sistemas mais simples, então acredito que você possa estar enganado em vários pontos (Sugestão de leitura: código fonte do eclipse simplezinho)

A notação do java é mais moderna, e permite o uso de variáveis com nomes mais significativos. A linguagem C é muito antiga para sugerir nomes como: RemoteInterfaceRedBlackTree. Enfim, a notação húngara já teve sua utilidade histórica:

mas, felizmente, hoje é totalmente desnecessária.

Com o tempo você pode se acostumar a escrever com os nomes inteiros, e mais compreensíveis. Algumas IDEs são de incalculável importância para preguiçosos (como eu) : descubra as maravilhas que “Ctrl + espaço” do Eclipse pode fazer.

[]´s
Rodrigo

rodrigousp

Só mais uma coisa… A convenção da SUN também fala sobre os tipos e nomes de variáveis :
Ex:

ArrayList list ou
ArrayList arrayList ou
ArrayList algumNomeList

de acordo com o padrão, deve-se evitar ainda:

variáveis locais com mesmo nome de membros;

tirar as referências this;

entre outras coisas do gênero
plentz

rodrigousp:
Só mais uma coisa… A convenção da SUN também fala sobre os tipos e nomes de variáveis :
Ex:

ArrayList list ou
ArrayList arrayList ou
ArrayList algumNomeList

de acordo com o padrão, deve-se evitar ainda:

variáveis locais com mesmo nome de membros;

tirar as referências this;

entre outras coisas do gênero</blockquote>

Ta legal o JForum :slight_smile:

B

Desculpem-me se ofendi alguém aqui, não era a minha intenção. Mas costumo não reagir muito bem a comentários jocosos como o do Louds.

Realmente, fiz um comentário infeliz.

Acha mesmo ? Conhece o código fonte do jboss, eclipse, sun one ?

Em nenhum momento quis dizer que Java é voltado a sistemas simples, entretanto, é possível sim, manter um código Java bem simples. Por exemplo, ao invés de criar um super método com trocentas linhas, criar objetos e outros métodos para transferir parte da funcionalidade. E sendo que a disponibilidade de classes pré-prontas em Java é infinitamente maior que qualquer outra linguagem, isso é possível.


A notação do java é mais moderna, e permite o uso de variáveis com nomes mais significativos. A linguagem C é muito antiga para sugerir nomes como: RemoteInterfaceRedBlackTree. Enfim, a notação húngara já teve sua utilidade histórica:

mas, felizmente, hoje é totalmente desnecessária.

  1. C é antiga, realmente, mas eu estou falando de C++ aqui.
  2. Com todo respeito, Rodrigo, mas dizer que: “C++ e notação húngara é totalmente desnecessária hoje” é uma baita ignorância.
  3. Olha, não quero ser chato, mas muitas partes da JVM e de algumas classes da Java API são feitas em C++ e (Assembly talvez).

Hoje eu trabalho em um projeto envolvendo c++ e java, e a notação hungara mais atrapalha que ajuda.

Eu tive o desgosto de trabalhar por 7 meses com winapi e c++ em 2000/01, todo meu ódio vem dessa época.

Já trabalhei com bases de código com dezenas de milhares de linhas de código c++ e notação hungara nunca ajudou, normalmente mais atrapalhava que ajudava.

Sinto muito por sua experiência negativa, Louds, entretanto, eu também trabalho com isso é acho demais. Só acho que sua opinião poderia ser mais técnica e menos pessoal.

Abraços.

louds

Vejamos, a JVM da Sun é escrita em C++ e não usa notação húngara, se lembro bem, ou se usa, é de forma muito leve (somente prefixo p/ variaveis de instância m_xxx).

Mas isso pouco importa, não vejo como um ou um milhão de programas escritos em c, c++, cobol, vsam, delphi, vb, algol, fortran ou qualquer outra linguagem que não seja java tenha algum valor que não seja “na linguagem xxx notação húngara funciona/não funciona”.

Quanto a méritos técnicos para não se usar notação húngara eu vejo vários:

-Java é uma linguagem que carrega muito mais semântica entre unidades de compilação, isso elimina erros devido a importação de símbolos externos com tipo errado.

-Java possui boas práticas que eliminam muitos dos problemas que a notação húgara tenta resolver, como evitar o uso de variaveis públicas, compilação muito mais rápida (melhor feedback pro desenvolvedor) e por ai vai.

-Notação húngara exige muito mais energia mental para sua devida compreenção. Um símbolo em notação húngrara exige que o desenvolvedor extraia os prefixos e sufixos, decodifique eles e contextualize eles para a variavel.
Por exêmplo, “m_sNome” exige que primeiro se separe em “m_”, “s” e “Nome”, se decodifique o significado de “m_” e “s”, e por fim contextualize em “variavel de instancia do tipo string Nome”.
Isso é muito mais complexo que simplesmente “nome”, com java é trivial pro desenvolvedor decifrar a origem e o tipo da variavel, caso precise.

-Em C++ um símbolo pode significar um milhão de coisas e vir de um milhão de lugares diferentes, em java o fechamento de todas opções é ordens de magnitude menor. Por exemplo, na seguinte linha de um método:

Em c++ podemos ter milhares de coisas acontecendo, assim como a origem dos símbolos “a” e “b”.

Em java não, eles são parâmetros, variaveis locais, atributos da classe ou atributos herdados da classe; e temos uma atribuição acontecendo.

-Notação húngara exige que se digite mais, que o código fique mais longo, que seja necessario ler mais para entender o mesmo.

Ou seja, em c/c++ NH pode ate ajudar em dar ordem à casa, mas em java não faz sentido já que a linguagem oferece suporte muito superior.

B

Bom, primeiro de tudo, como é meu primeiro post aqui, eu vou adiantando que uso C# (já usei C/C++). Java é bem parecido com C#, então acho que meu ponto de vista é válido.

C# possui muito mais classes prontas do que Java. E posso dizer que já vi códigos em C# que foram muito simplificados com o uso de notação húngara, e outros que ficaram bem mais confusos.

Eu, particularmente, não uso a notação, mas conheço alguns excelentes progamadores de C#, que utilizam o Visual Studio como IDE (que com certeza é melhor do que o Eclipse, ou seja, não é por causa de falta de qualidade da IDE) que a usam.

Já vi muito projeto de gente grande que usa também, então, acho que isso depende mais de estabelecer regras com quem você vai programar do que dizer “use, e pronto”. Não tem sentido você usar notação húngara se sua equipe pensar parecido com o Louds, assim como não tem sentido você não usar se todos da sua equipe concordam em usar.

Por fim, acho que todo conhecimento é válido. É bom você saber, mesmo que não goste. Talvez um dia te ajude…

PS: Louds, tu jogava UO antigamente? Era scripter da Mystic? Se for tu, que bom te ver por aqui, faz muito tempo que não tinha notícias suas… :smiley:

cv1

Talvez a sua afirmacao sobre a qualidade do VisualStudio.NET possa ser avaliada com toda a subjetividade que merece, mas antes que se comece uma guerra aqui, por favor - e peco isso a todos, nao soh a vc - nao vamos desviar do assunto. Mais uma guerra de “qual a melhor IDE” ia ser um peh no saco. Da proxima, Bruno, tente nao fazer esse tipo de comentario de mau gosto, ok? :wink:

fmeyer

Bruno Saboia:
Eu, particularmente, não uso a notação, mas conheço alguns excelentes progamadores de C#, que utilizam o Visual Studio como IDE

Já vi muito projeto de gente grande que usa também

Cara, essa notação hungara foi inventada para suprimir a falta de tipos em linguagens como BCPL (onde foi largamente usada), onde nada ajudava o programador a ter ideia de que tipo de variavel estava usando.

como o louds falou isso é um desperdicio mental, e eu ainda complemento é uma notação ultrapassada e demode. Com tantos IDEs(boas ou nao) com outlines e outros recursos … notação hungara hoje em dia é desperdicio de bytes em um arquivo

N

Eclipse -> CTRL + F :wink:

Criado 4 de novembro de 2004
Ultima resposta 4 de nov. de 2004
Respostas 23
Participantes 15