code conventions java oracle portugues

Upload: thiagorodriguesalves

Post on 08-Feb-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

  • 7/22/2019 Code Conventions Java Oracle Portugues

    1/26

    Convenes para Codificao Java

    Traduo:Jefferson AraujoBibliografia:OracleSun Microsystems

  • 7/22/2019 Code Conventions Java Oracle Portugues

    2/26

    ndice

    1. INTRODUO ............................................................................................................ 41.1POR QUE UTILIZAR CONVENO DE CDIGO?................................................................. 41.2POR QUE UTILIZAR CONVENO DE CDIGO?................................................................. 4

    2. NOMES DE ARQUIVOS ............................................................................................ 52.1ARQUIVOS DE SUFIXOS.................................................................................................. 52.2NOMES DE ARQUIVOS COMUNS..................................................................................... 5

    3. ORGANIZAO DE ARQUIVOS ............................................................................ 54. ARQUIVOS-FONTE JAVA ........................................................................................ 6

    4.1COMENTRIOS INICIAIS................................................................................................. 64.2DECLARAES DE PACOTES E IMPORTAES................................................................ 64.3DECLARAES DE CLASSE E DE INTERFACE.................................................................. 7

    5. INDENTAO ............................................................................................................. 85.1COMPRIMENTO DA LINHA.............................................................................................. 85.2EMPACOTANDO LINHAS................................................................................................. 8

    6. COMENTRIOS ....................................................................................................... 106.1FORMATOS DE COMENTRIOS DE IMPLEMENTAO.................................................... 106.1.1COMENTRIOS DE BLOCO......................................................................................... 116.1.2COMENTRIOS DE LINHA-NICA.............................................................................. 116.1.3COMENTRIOS DE TRILHA........................................................................................ 126.1.4COMENTRIOS DE FINAL DE LINHA.......................................................................... 126.2

    C

    OMENTRIOS DED

    OCUMENTAO............................................................................ 12

    7. DECLARAES ....................................................................................................... 14

    7.1NMERO POR LINHA.................................................................................................... 147.2LOCALIZAO............................................................................................................. 147.3INICIALIZAO............................................................................................................ 157.4DECLARAES DE CLASSE E INTERFACE..................................................................... 15

    8. DECLARAES / COMANDOS ............................................................................. 168.1COMANDOS SIMPLES................................................................................................... 168.2COMANDOS COMPOSTOS............................................................................................. 168.3COMANDO DE RETORNO (RETURN) .............................................................................. 178.4COMANDOS IF,IF-ELSE,IF-ELSE-IF-ELSE........................................................... 178.5COMANDOS FOR....................................................................................................... 178.6COMANDOS WHILE................................................................................................... 188.7COMANDO DO-WHILE............................................................................................... 188.8COMANDO SWITCH................................................................................................... 188.9COMANDO TRY-CATCH............................................................................................. 19

    9. ESPAO EM BRANCO ............................................................................................ 19

  • 7/22/2019 Code Conventions Java Oracle Portugues

    3/26

    9.1LINHAS EM BRANCO.................................................................................................... 199.2ESPAOS EM BRANCO.................................................................................................. 20

    10. CONVENES DE NOMENCLATURA ........................................................... 2111. PRTICAS DE PROGRAMAO ..................................................................... 23

    11.1FORNECENDO ACESSO INSTNCIA E VARIVEIS DE CLASSE................................... 2311.2REFERINDO-SE A VARIVEIS DE CLASSE E MTODOS................................................ 2311.3CONSTANTES............................................................................................................. 2311.4ATRIBUIES DE VARIVEIS..................................................................................... 2311.5PRTICAS DIVERSAS.................................................................................................. 2411.5.1PARNTESES........................................................................................................... 2411.5.2VALORES DE RETORNO........................................................................................... 2411.5.3EXPRESSES ANTES DE ?NO OPERADOR CONDICIONAL...................................... 2511.5.4COMENTRIOS ESPECIAIS....................................................................................... 25

    12. EXEMPLO DE CDIGO ...................................................................................... 2512.1EXEMPLO DE CDIGO FONTE JAVA............................................................................ 25

  • 7/22/2019 Code Conventions Java Oracle Portugues

    4/26

    1. Introduo

    As convenes de cdigo so uma boa prtica de programao. Ajudam por exemplo namanuteno de um sistema. A violao dessas regras prejudica e muito o

    entendimento de uma API, por exemplo. Alm do mais, com as convenes, podemos

    produzir um cdigo legvel e limpo, que demonstra qualidade de maneiraprofissional.

    1.1 Por que u til izar con veno de cdigo ?

    As convenes de cdigo so importantes para os programadores por umasrie de razes:

    80 % do tempo gasto com o software vai para a manuteno; Dificilmente um software mantido por toda sua existncia pelo autor

    original; As convenes de cdigo melhoram a legibilidade do software, fazendo

    com que engenheiros entendam o novo cdigo mais rapidamente e porcompleto;

    Se um cdigo fonte de programa deve ser enviado como um produto, preciso ter certeza que ele est bem embalado, assim como qualqueroutro produto.

    Obs: Um ponto muito importante. Para que as convenes funcionem, todasas pessoas que escrevem software devem estar de acordo com asconvenes, este um processo que precisa ser divulgado desde a raiz para

    que TODOS tenham em mente estas boas prticas.

    1.2 Por q ue u til izar c on veno de cdi go ?Esse documento reflete o padro do cdigo da linguagem JAVA apresentadono JAVA Language Specification, da Sun Microsytems (atual Oracle). Asmaiores contribuies so de Peter King, Patrick Naughton, Mike DeMoney,Jonni Kannerva, Kathy Walrath e Scott Hommel.

    Comentrios devem ser enviados atravs de formulrio para:http://java.sun.com/docs/forms/sendusmail.html

    http://java.sun.com/docs/forms/sendusmail.htmlhttp://java.sun.com/docs/forms/sendusmail.htmlhttp://java.sun.com/docs/forms/sendusmail.html
  • 7/22/2019 Code Conventions Java Oracle Portugues

    5/26

    2. Nomes de Arquivos

    Essa seo lista os sufixos e nomes usados com maior freqncia.

    2.1 Arquivo s de Suf ixos

    O Software Java utiliza os seguintes sufixos:

    Tipo de Arquivo SufixoFonte Java .java

    Cdigo de Byte Java .class

    2.2 Nomes de Arquivos Comuns

    Nome do Arquivo Uso

    GNUmakefile

    O nome preferido para criao dearquivos.Usa-se GNUmake para construo dosoftware.

    READMENome preferido do arquivo que resumeo contedo de um diretrio particular

    3. Organizao de Arquivos

    Um arquivo consiste de sees que devem ser separadas por linhas em branco e umcomentrio opcional identificando cada seo.

    Arquivos com mais de 2000 linhas so pesados e devem ser evitados.

    Para ver um exemplo de programa Java corretamente formatado, veja o item 12.1.

  • 7/22/2019 Code Conventions Java Oracle Portugues

    6/26

    4. Arquivos-Fonte Java

    Cada arquivo-fonte Java contm uma nica classe pblica ou de interface. Quando

    classes privadas e interfaces so associadas a uma classe pblica, elas podem sercolocadas no mesmo arquivo-fonte da classe pblica. A classe pblica deve ser aprimeira classe ou interface no arquivo.

    Arquivos-fonte Java seguem a seguinte ordem:

    Comentrios Iniciais (ver item 4.1); Declaraes de pacotes e importes; por exemplo:

    import java.applet.Applet;import java.awt.*;import java.net.*;

    Declaraes de classe e de interface (ver item 4.3).

    4.1 Comentrios Inic iais

    Todos os arquivos-fonte devem comear com um comentrio c-style quelista: nome da classe, verso, data, breve descrio do propsito do programae direitos autorais. Por exemplo:

    /*

    * Nome da Classe:** Informao da Verso:** Data:** Propsito do Programa:** Direitos Autorais:*/

    4.2 Dec laraes de Pacot es e Impor taes

    A primeira linha sem comentrios da maioria dos arquivos-fonte Java umadeclarao de pacote. Aps isso, podem ser realizadas as declaraes deimportao. Por exemplo:

    package java.awt;import java.awt.peer.CanvasPeer;

  • 7/22/2019 Code Conventions Java Oracle Portugues

    7/26

    4.3 Declaraes de C lasse e de In terf ace

    A quadro a seguir descreve as partes de uma declarao de classe ou de

    interface, na ordem em que elas devem aparecer. Ver o exemplo do item 12.1que incluicomentrios.

    Declarao de parte daClasse / Interface

    Notas

    1Comentrios dedocumentao de classe/ interface (/**...*/)

    Ver item 6.2 Comentrios deDocumentaopara informaodo que deve conter este comentrio.

    2Declarao de classe ou

    de interface

    3

    Comentrio deimplementao de classe/ interface (/**...*/), senecessrio

    Esse comentrio deve conterqualquer informao a respeito daclasse ou da interface no definidano comentrio de documentao declasse ou interface.

    4Variveis de classe(esttica)

    Primeiro as variveis de classespblicas, depois as protegidas, apsisso, o nvel de empacotamento(sem modificao de acesso) e, asim, a classe privada.

    5 Variveis instanciveis Primeiro as pblicas, depois asprotegidas e ento as privadas.

    6 Construtores

    7 Mtodos

    Esses mtodos devem seragrupados por funcionalidade antesdo que por escopo ouacessibilidade. Por exemplo, ummtodo da classe privada podeestar entre dois mtodos pblicos.O objetivo fazer com que a leiturae entendimento do cdigo sejarealizado mais facilmente.

  • 7/22/2019 Code Conventions Java Oracle Portugues

    8/26

    5. Indentao

    Quatro espaos devem ser usados como unidade de indentao. A construo exata deindentao (espaos versus tabulaes) no especificada. Tabulaes devem serestabelecidas com 8 espaos (e no com 4).

    5.1 Comp rimento da Lin ha

    Evitar linhas com mais de 80 caracteres, desde que estes no sejammanipulados por diversos terminais e ferramentas.

    Obs.:Exemplos para uso em documentao deve ter menor comprimento delinhageralmente no mais que 70 caracteres.

    5.2 Empacotando L inhas

    Quando uma expresso no contiver uma nica linha, a sua quebra deveocorrer de acordo com alguns princpios:

    A quebra deve ocorrer aps uma vrgula; A quebra deve ocorrer antes de um operador; Dar preferncia as quebras em nveis mais altos do que as de nveis mais

    baixos; Alinhar a nova linha com o comeo da expresso no mesmo nvel da

    linha anterior; Caso as regras acima venham a confundir o cdigo ou esprem-lo contra

    a margem direita, apenas utilize a indentao de 8 espaos.

    Aqui esto alguns exemplos de chamadas a mtodos com linhas quebradas:

    funcao(longExpression1, longExpression2, longExpression3,longExpression4, longExpression5);

    variavel = funcao1(longExpression1,funcao2(longExpression2,

    longExpression3));

    A seguir esto dois exemplos de quebra de uma expresso aritmtica. Aprimeira a preferida, desde que a quebra ocorra fora da expresso contidaentre parnteses, que de um nvel elevado:

    longName1 = longName2 + (longName3 + longName4 - longName5)+ 4 * longName6; // Preferida

    longName1 = longName2 + (longName3 + longName4- longName5) + 4 * longName6; // Evitar

  • 7/22/2019 Code Conventions Java Oracle Portugues

    9/26

    A seguir dois exemplos de mtodos de indentao de declaraes. Oprimeiro o caso convencional. O segundo mudaria a 2 e a 3 linhas para adireita se for usada a indentao convencional. Ao invs disto identar apenas8 espaos:

    //INDENTAO CONVENCIONALsomeMethod(int anArg, Object anotherArg, String yetAnotherArg,

    Object andStillAnother) {...

    }

    //INDENTAR 8 ESPAOS PARA EVITAR IDENTAES MUITO DISTANTESprivate static synchronized horkingLongMethodName (int anArg,

    Object anotherArg, String yetAnotherArg,Object andStillAnother) {

    ...}

    Empacotamento de linhas para declaraes "IF" devem geralmente usar aregra de 8 espaos, uma vez que a regra convencional (4 espaos) dificulta avisualizao. Por exemplo:

    //NO USAR ESTA INDENTAOif ((condition1 && condition2)

    || (condition3 && condition4)||!(condition5 && condition6)) { //PESSIMO EMPACOTAMENTOdoSomethingAboutIt(); //FACILITA PERDER A LINHA

    }

    //USAR ESTA INDENTAOif ((condition1 && condition2)

    || (condition3 && condition4)

    ||!(condition5 && condition6)) {doSomethingAboutIt();

    }

    //OU USAR ESTA INDENTAOif ((condition1 && condition2) || (condition3 && condition4)

    ||!(condition5 && condition6)) {doSomethingAboutIt();

    }

    Aqui esto trs formas aceitveis de formatar expresses ternrias:

    alpha = (aLongBooleanExpression) ? beta : gama;

    alpha = (aLongBooleanExpression) ? beta

    : gama;alpha = (aLongBooleanExpression)

    ? beta: gama;

  • 7/22/2019 Code Conventions Java Oracle Portugues

    10/26

    6. Comentrios

    Os programas Java podem ter dois tipos de comentrios: comentrios de implementaoe comentrios de documentao. Comentrios de implementao so aquelesencontrados em C++, delimitados por /*...*/, ou //. Comentrios de documentao(tambm conhecidos como "doc comments") servem apenas para o Java e sodelimitados por /**...*/. Comentrios de documentao podem ser extrados paraHTML utilizando a ferramenta javadoc.

    Comentrios de implementao so recursos para comentrios a respeito do cdigo oude uma implementao particular. Comentrios de documentao so usados paradescrever a especificao do cdigo, de uma perspectiva de livre implementao, a ser

    lida por desenvolvedores que no tm necessariamente que ter o cdigo-fonte mo.

    Comentrios devem ser usados para dar uma viso geral do cdigo e fornecerinformao adicional, que no facilmente disponvel no prprio cdigo. Comentriosdevem conter apenas informaes relevantes para ler e entender o programa. Porexemplo, no devem ser includos como comentrios informaes sobre como oempacotamento correspondente feito ou em qual diretrio ele se encontra.

    Discusso sobre decises de design no triviais ou no bvias apropriada, mas evite aduplicao de informao que est presente no cdigo. muito fcil comentriosredundantes se desatualizarem. Em geral, evite alguns comentrios que provavelmente

    se desatualizaro medida que o cdigo for se expandindo.

    Obs:A freqncia de comentrios s vezes reflete a qualidade pobre do cdigo.Quando o programador se sentir compelido a adicionar comentrios, dever serconsiderada a possibilidade de reescrever o cdigo para deix-lo mais claro.

    Comentrios no devem ser fechados em grandes quadros desenhados com asteriscosou outros caracteres.Comentrios nunca devem incluir caracteres especiais como caractere de alimentaode formulrio ou retorno de espao.

    6.1 Formato s de Com entri os de Imp lem en tao

    Programas podem ter quatro estilos de comentrios de implementao: DeBloco, Linha-nica, Em Trilha e Fim da Linha.

  • 7/22/2019 Code Conventions Java Oracle Portugues

    11/26

    6.1.1 Comentrio s de Blo co

    Comentrios de bloco so usados para prover descries de arquivos,

    mtodos, estruturas de dados e algoritmos. Comentrios de bloco devem serusados no incio de cada arquivo e antes de cada mtodo. Eles tambmpodem ser usados em outros lugares, como dentro de mtodos. Blocos decomentrios dentro de uma funo ou mtodo devem ser identados nomesmo nvel da descrio do cdigo. Um bloco de comentrio deve serprecedido por uma linha em branco para determinar a separao do resto docdigo. Blocos de comentrios possuem um asterisco * no incio de cadalinha exceto na primeira. Por exemplo:

    /** Aqui esta um Bloco de Comentrio.*/

    Blocos de comentrios podem iniciar com /*-, que reconhecido peloidentador(1) como um incio de um bloco de comentrio que no deve serreformatado. Por exemplo:

    /*-* Este um bloco de comentrio com algumas formataes* muito especiais que eu quero identador(1) ignore.** um* dois* trs*/

    Obs:Se o identador(1) no for utilizado, no deve ser usada a combinao/*- no cdigo nem devem ser feitas outras concesses, pois sempre h apossibilidade de outro programador utiliz-lo em seu cdigo.

    Ver tambm o item 6.2 Comentrios de Documentao.

    6.1.2 Com entrio s d e Lin ha-nica

    Pequenos comentrios podem aparecer em uma linha nica identados no

    nvel do cdigo que segue. Se um comentrio no pode ser escrito em umalinha nica, deve ser seguido o formato do comentrio em bloco (Ver item6.1.1 Comentrios de Bloco). Um comentrio de linha nica devem serprecedidos por uma linha em branco. Segue abaixo um exemplo de umcomentrio de linha nica utilizando codificao Java:

    if (condition) {/* Manipular a condio. */...

  • 7/22/2019 Code Conventions Java Oracle Portugues

    12/26

    }

    6.1.3 Comentrio s de Tril ha

    Pequenos comentrios podem aparecer na mesma linha em que o cdigo estasendo descrito, mas devem ser deslocados longe o suficiente para separ-losdas declaraes. Se mais de um pequeno comentrio aparecer em um pedaode cdigo, todos eles devem ser identados com o mesmo parmetro detabulao.

    Segue abaixo um exemplo de um comentrio de linha nica utilizandocodificao Java:

    if (a == 2) {return TRUE; /* caso especial */

    } else {return isprime(a); /* usa a condio a */

    }

    6.1.4 Comentrio s de Final d e Li nha

    O delimitador de comentrio // pode se referir a uma linha inteira ou podeser utilizado para continuao de uma linha anterior em uma nova linha (ouseja, comentar parte de uma linha). No deve ser usado em mltiplas linhas

    consecutivas para textos de comentrios; entretanto, pode ser usado emmltiplas linhas consecutivas para comentar sees de cdigo. Segue abaixoexemplos utilizando estes trs estilos utilizando a linguagem Java:

    if (foo > 1) {// Faa um duplo-flip....

    } else {return false; // Explicar o porque aqui.

    }

    //if (bar > 1) {//// // Faa um triplo-flip.

    // ...//}//else// return false;

    6.2 Comen trio s de Do cumen tao

  • 7/22/2019 Code Conventions Java Oracle Portugues

    13/26

    Obs:Ver o item 12.1Exemplo de arquivo-fonte Java para exemplosde formatos de comentrios descritos aqui.

    Para maiores detalhes, ver How to Write Doc Comments for Javadoc queinclui informao em tags de comentrios de documentao (@return,

    @param, @see) no endereo abaixo:http://java.sun.com/products/jdk/javadoc/writingdoccomments.html

    Para maiores detalhes sobre comentrios de documentao e javadoc, veja apgina do javadoc em:

    http://java.sun.com/products/jdk/javadoc/

    Comentrios de documentao descrevem classes Java, interfaces,construtores, mtodos e campos. Cada comentrio de documentao mantido dentro dos delimitadores de comentrio /**...*/, com um comentriopor API (Classe, interface, construtor, mtodo ou campo). Esse comentriodeve aparecer imediatamente antes da declarao. Por exemplo:

    /*** O exemplo de classe que prov ...*/

    class Exemplo { ...

    Perceba que classes e interfaces no esto identadas, enquanto seus membrosesto. A primeira linha do comentrio de documentao (/**) para classes einterfaces no identada; cada linha de comentrio de documentaosubseqente possui um espao de indentao (para verticalmente se alinhar

    aos asteriscos). Membros, incluindo construtores, possuem quatro espaospara a primeira linha de comentrio de documentao e cinco espaos paraas demais.

    Se for preciso dar informao sobre uma classe, interface, varivel oumtodo que no apropriado para documentao, deve ser utilizado umcomentrio de bloco (ver item 6.1.1) ou comentrio de linha-nica (ver item6.1.2) imediatamente aps a declarao. Por exemplo, detalhes sobre aimplementao de uma classe devem ir em um tipo de comentrio de blocoseguindo a declarao de classe e no no comentrio de documentao daclasse.

    Comentrios de documentao no devem ser posicionados dentro de umbloco de definio de mtodo ou de um construtor, porque Java associacomentrios de documentao com a primeira declarao aps o comentrio.

    http://java.sun.com/products/jdk/javadoc/writingdoccomments.htmlhttp://java.sun.com/products/jdk/javadoc/writingdoccomments.htmlhttp://java.sun.com/products/jdk/javadoc/http://java.sun.com/products/jdk/javadoc/http://java.sun.com/products/jdk/javadoc/http://java.sun.com/products/jdk/javadoc/writingdoccomments.html
  • 7/22/2019 Code Conventions Java Oracle Portugues

    14/26

    7. Declaraes

    7.1 Nmero p or Lin ha

    Uma declarao por linha recomendada desde que a mesma incentiva acomentar. Em outras palavras,

    prefervel:

    De forma alguma variveis e funes devem ser declaradas na mesma linha.Por exemplo:

    long dbaddr, getDbaddr(); // ERRADO!

    Tambm no podemos colocar diferentes tipos de dados na mesma linha. Porexemplo:

    int foo, fooarray[]; // ERRADO!

    Obs:Os exemplos acima usam um espao entre o tipo do dado e oidentificador. Uma outra alternativa aceitvel a utilizao de tabulao. Porexemplo:

    7.2 Local izao

    Coloque as declaraes apenas no incio dos blocos. (Um bloco qualquercdigo cercado por chaves { e }.) No espere para declarar variveis at

    a sua primeira utilizao; isso pode confundir o programador descuidado eprejudicar a portabilidade do cdigo dentro do escopo.

    int nivel; // nvel deindentaoint tamanho; // tamanho da tabela

    int nivel, tamanho;

    int nivel; // nvel de indentaoint tamanho; // tamanho da tabelaObject entradaAtual; // entrada atual da tabela selecionada

  • 7/22/2019 Code Conventions Java Oracle Portugues

    15/26

    Uma exceo para esta regra refere-se aos ndices de loops do tipo for, nosquais o Java pode ser declarado na declarao for:

    Evite declaraes locais que ocultem declaraes no nos nveis superiores.Por exemplo, no declare uma varivel com o mesmo nome em um blocointerno:

    7.3 In ic ial izao

    Tente inicializar variveis locais onde elas so declaradas. A nica razopara no inicializar uma varivel onde elas so declaradas se o valor inicialda mesma depender de algum processamento que necessite ocorrer primeiro.

    7.4 Declaraes de Classe e Inter face

    Quando codificando classes e interfaces Java, o seguinte formato de regrasdeve ser seguido:

    No colocar espaos entre o nome do mtodo e os parnteses (comeando sua lista de parmetros;

    Chave de abertura { deve aparecer no fim da mesma linha de comandoda declarao;

    Chave de fechamento } deve comear a linha identada para coincidircom a sua declarao de abertura correspondente, exceto quando umadeclarao nula a chave } deve aparecer imediatamente aps a chave

    de abertura {;

    void meuMetodo() {int int1; // incio do bloco de mtodo

    if (condicao) {int int2; // incio do bloco de if...

    }}

    for (int i = 0; i < maxLoops; i++) { ...

    int count;...func() {

    if (condicao) {int count; //EVITAR!...

    }...

    }

  • 7/22/2019 Code Conventions Java Oracle Portugues

    16/26

    class Exemplo extends Object {

    int ivar1;int ivar2;

    Exemplo(int i, int j) {ivar1 = i;

    ivar2 = j;}

    int metodoVazio() {}

    ...}

    Mtodos devem ser separados por uma linha em branco.8. Declaraes / Comandos

    8.1 Comando s Simples

    Cada linha deve conter no mximo um comando. Por exemplo:

    argv++; argc--; // EVITAR!argv++; // CORRETO!argc--; // CORRETO!

    No use vrgula para agrupar mltiplos comandos a menos que seja por umarazo obvia. Por exemplo:

    8.2 Comandos Compos tos

    Comandos compostos so comandos que contm listas de comandosencapsulados dentro de chaves { comandos }. Ver os exemplos a seguir:

    Os comandos encapsulados entre chaves devem ser identados um nvelacima do comando composto; A chave de abertura deve estar no fim da linha que comea o comando

    composto; a chave de fechamento } deve comear a linha e estaridentado no comeo do comando composto;

    Chaves so utilizadas em volta de todos os comandos, mesmo comandossimples, quando so parte de uma estrutura de controle, tanto quanto emcomandos if-else ou for. Isso torna mais fcil a adio de comandos

    if (err) {Format.print(System.out, error), exit(1); // ERRADO!

    }

  • 7/22/2019 Code Conventions Java Oracle Portugues

    17/26

    sem introduzir erros acidentalmente devido ao esquecimento da inclusode chaves.

    8.3 Comand o de Retorno (return)

    O comando return com um valor no deve usar parnteses a menos que torneo valor de retorno mais bvio de alguma forma. Por exemplo:

    return;

    return meuDisco.size();

    return (size ? size : defaultSize);

    8.4 Comandos if, if-else, if-else-if-else

    A classe de comandos if-else devem ter a seguinte forma:

    if (condicao) {comandos;

    }

    if (condicao) {comandos;

    } else {comandos;

    }

    if (condicao) {

    comandos;} else if (condicao) {comandos;

    } else if (condicao) {comandos;

    }

    Obs:Comandos if sempre usam chaves {}. Evite utilizar a forma erradaa seguir:

    8.5 Comandos for

    Um comando for deve ter a seguinte forma:

    for (inicializacao; condicao; atualizacao) {comandos;

    }

    if (condicao) // EVITAR! ESTE TIPO OMITE AS CHAVES {}!comando;

  • 7/22/2019 Code Conventions Java Oracle Portugues

    18/26

    Um comando forvazio (um em que todo o trabalho feito nas clusulas deinicializao, de condio ou de atualizao) deve ter a seguinte forma:

    for (inicializacao; condicao; atualizacao);

    Quando usado a vrgula nas clusulas de inicializao ou atualizao de um

    comando for, evite a complexidade de utilizar mais de trs variveis. Sepreciso, utilize comandos separados antes do loop for (para clusula de

    inicializao) ou no final do loop (para clusula de atualizao).

    8.6 Comandos while

    Um comando while deve ter a seguinte forma:

    while (condicao) {comandos;

    }

    Um comando while em vazio deve ter a seguinte forma:

    8.7 Comando do-while

    Um comando do-while deve ter a seguinte forma:

    do {

    comandos;} while (condicao);

    8.8 Comando switch

    Um comando switch deve ter a seguinte forma:

    while (condicao);

  • 7/22/2019 Code Conventions Java Oracle Portugues

    19/26

    switch(condicao) {case ABC:

    comandos;/* fallsthrough */

    case DEF:comandos;break;

    case XYZ:comandos;break;

    default:comandos;break;

    }

    Toda ocorrncia de um caso falls through (no incluir um comandobreak), deve ter adicionado um comentrio onde o comando breaknormalmente deveria estar. Isto mostrado no exemplo acima com ocomentrio /*falls through */.

    Todo comando switch deve incluir um caso padro (default). O break no

    caso padro redundante, mas previne a entrada em uma situao de erro seposteriormente um novo caso for includo.

    8.9 Comando try-catch

    Um comando try-catch deve ter o seguinte formato:

    try {comandos;

    } catch (ExceptionClass e) {comandos;

    }

    9. Espao em Branco

    9.1 Linhas em B ranco

    Linhas em branco melhoram a leitura pela separao de sees de cdigoque esto logicamente relacionadas.

    Duas linhas em branco devem sempre ser usadas nas seguintescircunstncias:

    Entre sees dos arquivos-fonte; Entre definies de classes e interfaces.

  • 7/22/2019 Code Conventions Java Oracle Portugues

    20/26

    Uma linha em branco deve sempre ser usada nas seguintes circunstncias: Entre mtodos; Entre variveis locais em um mtodo e seu primeiro comando; Antes de um comentrio de bloco (ver item 6.1.1) ou de linha-nica (ver

    item 6.1.2); Entre sees lgicas dentro de um mtodo para melhorar a leitura eentendimento.

    9.2 Espaos em Branc o

    Espaos em branco devem ser usados nas seguintes circunstncias:

    Uma palavra-chave (keyword) seguida por parnteses deve ser separadapor um espao. Por exemplo:

    while (true) {...

    }

    Note que um espao em branco no deve ser usado entre o nome domtodo e seu parnteses de abertura. Isso ajuda a distinguir palavras-chave (keywords) de chamadas de mtodo.

    Um espao em branco deve aparecer aps as vrgulas na lista deargumentos;

    Todos os operadores binrios (exceto .) devem ser separados de seusoperandos por espaos. Espaos em branco nunca devem separaroperadores nicos, como smbolo de subtrao simples (-), deincremento (++) ou de decrscimo () de seus operandos. Por

    exemplo:a += c + d;a = (a + b) / (c * d);a += c + d;a = (a + b) / (c * d);while (d++ = s++) {

    n++;}prints(size is + foo + n);

    As expresses em um comando for devem ser separadas por espaosem branco. Por exemplo:

    for (expr1; expr2; expr3) Casts devem ser seguidos por um espao em branco. Por exemplo:

    meuMetodo((byte) aNum, (Object) x);minhaFuncao((int) (cp + 5), ((int) (i + 3))

    + 1);

  • 7/22/2019 Code Conventions Java Oracle Portugues

    21/26

    10. Convenes de Nomenclatura

    Convenes de Nomenclatura faz com que os programas fiquem mais fceis de seremlidos. Eles podem tambm dar informao sobre a funo ou o identificador porexemplo, se uma constante, pacote ou classeque pode ser til no entendimento do

    cdigo.

    Tipo deIdentificador

    Regras para Nomenclatura Exemplos

    Classes Os nomes de classe devem sersubstantivos, uma combinaode tamanhos de fonte (fontesmaisculos e minsculos) coma primeira letra em maisculoe as compostas tambm emmaisculo, as demais seguemem minsculo. Os nomes declasses devem, sempre quepossvel, ser simples edescritivos. Usar palavrascompletasevitandoacrnimos e abreviaes (amenos que a abreviao seja aforma mais usada e conhecidado que a palavra longa, comoURL ou HTML)

    class Imposto;

    class PesquisaImposto;

    Pacotes O prefixo de um pacote sempre escrito em letrasminsculas em padro ASCIIe deve ser um dos nomes dedomnio de alto nvelatualmente com, edu, gov,mil, net, org ou um doscdigos de duas letras emingls que identifica os pasesde acordo com a especificaoISO Standard 3166, 1981.

    Componentes subseqentes donome do pacote variam deacordo com a convenointerna da prpriaorganizao. Assim,convenes devem especificarque um certo nome de

    com.sun.engcom.apple.quicktime.v2

    edu.cmu.cs.bovik.cheese

  • 7/22/2019 Code Conventions Java Oracle Portugues

    22/26

    diretrio de componente diviso, departamento,projeto, mquina ou login.

    Interfaces Os nomes de interface devemseguir o mesmo padro denomenclatura dos nomes dasclasses.

    interface ImpostoInterface;

    interface VeiculoInterface;

    Mtodos Os mtodos devem ser verbos,com a primeira letra emminscula e a primeira letradas demais compostas emletra maiscula.

    run();

    runFast();

    getBackground():

    Variveis Exceto para variveis, todas asinstncias, classes e classes

    constantes se formam com aprimeira letra minscula. Aspalavras compostas internasdevem iniciar com letramaiscula.

    Nomes de variveis devem serpequenos mas com umsignificado. A escolha de umnome de varivel deve sermnemnicoou seja,desenhado para indicar a

    inteno de seu uso. Os nomesde variveis com apenas umcaractere devem ser evitados,exceto nos casos de variveistemporrias descartveis.Os nomes mais usuais paravariveis temporrias so:i,j,k,m e n para inteiros; c,d, ee para caracteres.

    int i;

    char c;

    float meuTamanho;

    Constantes Os nomes de variveis

    constantes de classesdeclaradas e de constantesANSI devem ser totalmenteem letras maisculas com aspalavras separadas porsublinhado (_). (As constantesANSI devem ser evitadas parafacilitar o debugging.).

    static final int MIN_WIDTH = 4;

    static final int MAX_WIDTH =999;

    static final int GET_THE_CPU =1;

  • 7/22/2019 Code Conventions Java Oracle Portugues

    23/26

    11. Prticas de Programao

    11.1 Forn ecendo Aces so Ins tnc ia e Variveis de Class e

    No faa qualquer instncia ou varivel de classe publica sem ter uma boarazo. Muitas vezes, variveis de instncia no precisam ser explicitamenteobtidas ou definidasmuitas vezes o que acontece como um efeito colateralde chamadas de mtodo.

    Um exemplo de um apropriado uso de variveis de instncia pblicas ocaso quando a classe essencialmente uma estrutura de dados, semcomportamento prprio. Em outras palavras, se tivesse usado struct ao invsde uma class (se o Java suportasse struct), ento seria apropriado fazer

    instncias de variveis pblicas de classe.

    11.2 Refer in do-se a Var iveis de Clas se e Mtodos

    Evite usar um objeto para acessar uma varivel de classe (static) ou mtodo.Use um nome de classe ao invs disso. Por exemplo:

    classMethod(); //OKAClass.classMethod(); //OK

    AnObject.classMethod(); //EVITAR!

    11.3 Constantes

    Constantes numricas (literais) no devem ser codificadas diretamente,exceto para1, 0 e 1, os quais podem aparecer como valores em contadoresde loop do tipo for.

    11.4 A tr ib u ies de Var iveis

    Evite atribuir um valor para diversas variveis em uma nica instruo.Dificulta sua leitura. Por exemplo:

    fooBar.fChar = barFoo.lchar = c; // EVITAR!

    No use operadores de atribuio em um lugar onde pode ser facilmenteconfundido com um operador de igualdade. Por exemplo:

  • 7/22/2019 Code Conventions Java Oracle Portugues

    24/26

    if (c++ = d++) { // EVITAR! Java no permite!

    ...}

    Deve ser escrito desta forma:

    No use atribuies embutidas em uma tentativa de melhorar a performancede execuo do cdigo. Isso tarefa do job de compilao, e alm disso, issona verdade raramente ajuda. Por exemplo:

    d = (a = b + c) + r; // EVITAR!

    Deve ser escrito da seguinte forma:

    11.5 Prtic as Divers as

    11.5.1 Parnteses

    Geralmente uma boa idia o uso de parnteses livremente em expresses queenvolvam operadores misturados para que sejam evitados problemas de

    precedncia de operadores. Mesmo se a precedncia do operador parecerclara, considerar que pode no ser para todosno se pode assumir quetodos os programadores tenham o mesmo nvel de conhecimento eentendimento.

    11.5.2 Valor es de Retor no

    Tente fazer com que a estrutura do programa se encaixe na inteno. Porexemplo:

    if ((c++ = d++) != 0) {...

    }

    a = b + c;d = a + r;

    if (a == b && c == d) // EVITAR!if ((a == b) && (c == d)) // CORRETO!

    if (expressaoBoleana) {return TRUE;

    } else {return FALSE;

    }

  • 7/22/2019 Code Conventions Java Oracle Portugues

    25/26

    Deve ser escrito como:

    Da mesma forma que:

    if (condicao) {return x;

    }return y;

    Deve ser escrito como:

    11.5.3 Expresses antes de ? no Operador Condicional

    Se uma expresso contendo um operador binrio aparecer antes do sinal deinterrogao (?) no ternrio (?: operador), ele deveria ser usado entreparnteses. Por exemplo:

    (x >= 0) ? x : -x

    11.5.4 Comentrio s Espec iais

    Use XXX em um comentrio para marcar algo que, mesmo contendo erros,funcione. Use FIXME para marcar algo que contenha erro e no funcione.

    12. Exemplo de Cdigo

    12.1 Exemplo d e Cdigo Fon te Java

    O seguinte exemplo mostra como formatar um cdigo fonte Java contendouma nica classe pblica. Interfaces so formatadas de forma similar. Paramaiores informaes, veja o item 4.1.3 Declaraes de Classe e de

    Interface e 6.2 Comentrios de Documentao./** %W% %E% Firstname Lastname** Copyright (c) 1993-1996 Sun Microsystems, Inc. All Rights Reserved.** This software is the confidential and proprietary information of Sun* Microsystems, Inc. ("Confidential Information"). You shall not* disclose such Confidential Information and shall use it only in* accordance with the terms of the license agreement you entered into

    return expressaoBoleana;

    return (condio ? x : y);

  • 7/22/2019 Code Conventions Java Oracle Portugues

    26/26

    * with Sun.** SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF* THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED* TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A* PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR* ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR* DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.*/package java.blah;import java.blah.blahdy.BlahBlah;

    /*** Class description goes here.** @version 1.10 04 Oct 1996* @author Firstname Lastname*/

    public class Blah extends SomeClass {/* A class implementation comment can go here. */

    /** classVar1 documentation comment */public static int classVar1;/*** classVar2 documentation comment that happens to be* more than one line long*/private static Object classVar2;/** instanceVar1 documentation comment */public Object instanceVar1;/** instanceVar2 documentation comment */protected int instanceVar2;/** instanceVar3 documentation comment */private Object[] instanceVar3;

    /*** ...method Blah documentation comment...*/

    public Blah() {// ...implementation goes here...

    }

    /*** ...method doSomething documentation comment...*/

    public void doSomething() {// ...implementation goes here...

    }

    /*** ...method doSomethingElse documentation comment...* @param someParam description*/

    public void doSomethingElse(Object someParam) {// ...implementation goes here...

    }}