Download presentation
Presentation is loading. Please wait.
2
Codding standards Alfredo Goldman
3
Motivação Quem escreveu não deve ser o único a poder ler o código –Ainda mais em um sistema OO Regras simples (muito simples) ajudam –Algumas são bem óbvias... Criar um padrão (consensual) –Em parte independente da linguagem
4
Mais razões 80% do tempo de desenvolvimento é para manutenção; Quase nenhum software é mantido apenas pelo primeiro desenvolvedor; Convenções de código melhoram a legibilidade do código; Se o código fonte é fornecido com o sistema, ele deve estar bem apresentado.
5
Porém.... Para que codding standards funcionem todos os desenvolvedores devem estar de acordo com a convenção, TODOS.
6
Resumo (baseado no padrão da sun) Nome dos arquivos; Estrutura dos arquivos; Indentação; Comentários; Declarações; Comandos; Espaços em branco; Convenção para nomes; Práticas (simples e saudáveis) de programação.
7
Nome dos Arquivos Mesmo que a linguagem não exija, use sufixos claros –ex..java,.c,.cpp,.txt Use makefiles com nomes padrão: –ex: xpmakefile Sempre tenha no diretório um README –este arquivo deve conter um resumo do conteúdo do diretório
8
Estrutura dos Arquivos Arquivos contém seções que devem ser separadas por linhas em branco e por comentários antes de cada seção; Deve se evitar arquivos com mais de 2000 linhas.
9
Classes/Interfaces Começam com um comentário do tipo /**...*/ O comando class, ou interface Comentários sobre a implementação /*...*/ Variáveis estáticas (em ordem de acesso) Variáveis da classe (public, protected, friendly,private ) Construtores Métodos (agrupados por funcionalidade e não por escopo)
10
Indentação (é bem importante) Use apenas espaços (tabs = 4 espaços) Evite linhas com mais de 80 caracteres Regras para quebra de linha: –quebra após vírgula; –quebra antes de operador; –quebra no maior nível possível; –alinhar a quebra com o começo da expressão do mesmo nível; –Se ficar feio, indentar com 8 espaços.
11
Exemplos someMethod(longExpression1, longExpression2, longExpression3, longExpression4, longExpression5); var = someMethod1(longExpression1, someMethod2(longExpression2, longExpression3)); longName1 = longName2 * (longName3 + longName4 - longName5) + 4 *longName6; // melhor longName1 = longName2 * (longName3 + longName4 -longName5) + 4 *longName6; // pior
12
Exemplos // indentação tradicional someMethod(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) {... } //Indentação com 8 espaços em certos casos private static synchronized horkingLongMethodName(int anArg, Object anotherArg, String yetAnotherArg, Object andStillAnother) {... }
13
Exemplos // indentação tradicional if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { //BAD WRAPS doSomethingAboutIt(); //difícil de achar } // indentação proposta if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } Em ifs use geralmente a regra de indentar com 8 espaços
14
Exemplos (cont.) //Ou esta if ((condition1 && condition2) || (condition3 && condition4) ||!(condition5 && condition6)) { doSomethingAboutIt(); } // expressões ternárias alpha = (aLongBooleanExpression) ? beta : gamma; //ou alpha = (aLongBooleanExpression) ? beta : gamma; //ou alpha = (aLongBooleanExpression) ? beta : gamma;
15
Comentários linhas gerais Dois tipos de comentários (da implementação e da documentação) Linguagens modernas tem formas específicas –use-as ! Não adicione comentários redundantes –O excesso de comentários reflete código mal escrito –pense em rescrever o trecho...
16
Comentários Iniciar sempre o bloco comentário com uma linha em branco: /* * Here is a block comment. */ Comentários de uma única linha devem ser precedidos por uma linha em branco: if (condicao) { /* Comentário da condição */... }
17
Comentários Comentários muito curtos podem estar na mesma linha. Se existem vários os mesmo devem estar alinhados. if (a==2) { return TRUE; /* um caso especial */ } else { return isPrime(a); /* funciona para a ímpar */ } Comentários com // também podem ser usados: if (foo>2) { // comentário de linha... } else { return false; // comentário de fim de linha } //if (outracond==1) { // return true; // trecho de codigo comentado //}
18
Comentários (em java usar javadoc) Um exemplo: /** * Class description goes here. * * @version 1.82 18 Mar 1999 * @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;
19
Comentários (em java usar javadoc) cont. /** instanceVar1 documentation comment */ public Object instanceVar1; /** instanceVar2 documentation comment */ protected int instanceVar2; /** instanceVar3 documentation comment */ private Object[] instanceVar3; /** *...constructor Blah documentation comment... */ public Blah() { //...implementation goes here... }
20
Comentários (em java usar javadoc) cont. /** *...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... }
21
Declarações Quantas por linha? –De preferência um por linha (help comments) int level; // nivel de ruído int size; // tamanho do buraco –é melhor que: int level, size; –Nunca deve se declarar dois tipos na mesma linha int elemento, vetor[]; // errado! –Pode-se alinhar declarações intlevel; // indentation level intsize; // size of table ObjectcurrentEntry; // currently selected table entry
22
Declarações Inicialização –Inicialize sempre as variáveis na hora da declaração; Exceção: variáveis que dependem de algum cálculo
23
Declarações Localização –Sempre no início de blocos; mas podem ser declaradas no início do método. void myMethod() { int int1 = 0; // beginning of method block if (condition) { int int2 = 0; // beginning of "if" block... } // o for é um caso especial for (int i=0; i< max; i++) {... } Não use o mesmo nome de variável em blocos internos
24
Declarações (classes e interfaces) Não dê espaço entre antes do “)”; O “{” deve ficar no final da linha O “}” deve estar alinhado com o comando; Métodos devem estar separados por uma linha em branco; Comandos vazios podem ser dados por {}.
25
Declarações (classes e interfaces) class Sample extends Object { int ivar1; int ivar2; Sample(int i, int j) { ivar1 = i; ivar2 = j; } int emptyMethod() {}... } Exemplo:
26
Comandos Colocar um comando por linha; Em um bloco indentar sempre; Colocar { no final da linha onde começa o bloco e } alinhado com o início desta.; Use {} mesmo quando os blocos tiverem apenas um comando.
27
Exemplos (if) if (condition) { statements; } if (condition) { statements; } else { statements; } if (condition) { statements; } else if (condition) { statements; } else { statements; }
28
Exemplos (for) for (initialization; condition; update) { statements; } for (initialization; condition; update); // ao invés de for (init1, init2; condition; up1, up2){ statements; } // fazer init1; for(init2; condition; up1){ statements; up2; }
29
Exemplos (while, do while) while (condition) { statements; } while (condition); do { statement; } while (condition);
30
Exemplos (switch) switch (condition) { case ABC: statements; /* se não houver break, coloque comentário */ case DEF: statements; break; case XYZ: statements; break; default: statements; break; // é redundante mas pode evitar erros futuros }
31
Espaços em Branco Use linhas em branco para a separação lógica –duas para separar seções do mesmo arquivo; entre definições de classes e interfaces. –uma para entre métodos; dentro de um método entre as variáveis e o 1º comando; antes de comentários (de bloco, ou linha); entre as seções lógicas de um método.
32
Espaços em branco Entre keywords e parênteses; while (true) {... } // assim fica fácil visualizar métodos (sem espaço) Após vírgulas em listas de argumentos; Antes e depois de operadores binários a += c + d; a = (a + b) / (c * d); while (d++ = s++) { n++; // mas não para operadores unários } printSize("size is " + foo + "\n");
33
Espaços em branco Entre os comandos de um for; for (expr1; expr2; expr3){... } Após operações de cast myMethod((byte) aNum, (Object) x); myMethod((int) (cp+5), ((int) (i + 3)) + 1);
34
Nomenclatura Packages –pode-se usar domínio + subdiretórios; Classes e Interfaces –Primeira letra de cada palavra maiúscula; Métodos –verbos, com 1ª letra minúscula e letras de cada palavra maiúsculas; Variáveis –1ª letra minúscula, pequenos, se temp. ok i, j, k. Constantes –Tudo maiúsculo separado por “_”
35
Dicas de programação Evite usar um objeto para acessar algo estático classMethod(); //ok Aclass.classMethod(); //ok anObject.classMethod(); //evitar Atribuições: uma em cada linha x = y = 0; // evitar x = 0; y = 0; // ok d = (a = b + c) + r; //evitar a = b + c; d = a + r; //ok
36
Dicas de programação Use parênteses if (a == b && c == d) //evitar if ((a == b) && (c == d)) //ok Use operadores ternários (em certas situações) if (cond) { return x; } return y; return (cond ? X : y); Coloque o comentário XXX se há algo com problema e FIXME onde existem bugs
37
Dicas de Programação Se você tem métodos com mais de 80 linhas, provavelmente o código não está bem organizado; Se seus arquivos tem mais de 500 linhas veja o item anterior; Não use variáveis globais.
38
Padronizar o cabeçalho /* * Nome do Arquivo: Teste.java * * Descrição: Este é um arquivo que serve para testar a * classe Cliente.Java * * Projeto: PDAs de venda; * Autor: Eu, tu e eles */
39
Dicas gerais Sempre terminar o arquivo com uma linha em branco; Antes de colocar um comentário para alguém no código, envie-lhe um e-mail; Sempre faça uma mensagem de “uso”; Sempre termine os #endif com um comentário correspondente ao #if ; Coloque /* */ entre o #include e o nome do arquivo (visual C++); Defina constantes com um prefixo ligado ao projeto: ex: XP_MAX_CLIENTE; Proteja headers de inclusões múltiplas: Nunca faça o cast de um ponteiro para um inteiro (use long); Sempre que usar arquivos, verifique se não ocorreram erros de abertura, escrita, etc.
40
Caso particular Quais padrões de código seriam úteis a XP ? Os programas atuais respeitam estes padrões ? Na prática, verificar que respeitar os padrões não é tão difícil.
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.