Code Conventions Java Oracle Portugues
-
Upload
thiagorodriguesalves -
Category
Documents
-
view
234 -
download
0
Transcript of Code Conventions Java Oracle Portugues
-
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...
}}