Você está na página 1de 27

Documentos

ISSN 1677-9274 Dezembro, 2012

124

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

ISSN 1677-9274 Dezembro, 2012


Empresa Brasileira de Pesquisa Agropecuria Embrapa Informtica Agropecuria Ministrio da Agricultura, Pecuria e Abastecimento

Documentos 124

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus


Adauto Luiz Mancini

Embrapa Informtica Agropecuria Campinas, SP 2012

Embrapa Informtica Agropecuria Av. Andr Tosello, 209 - Baro Geraldo Caixa Postal 6041 - 13083-886 - Campinas, SP Fone: (19) 3211-5700 - Fax: (19) 3211-5754 www.cnptia.embrapa.br sac@cnptia.embrapa.br Comit de Publicaes Presidente: Silvia Maria Fonseca Silveira Massruh Membros: Adhemar Zerlotini Neto, Stanley Robson de Medeiros Oliveira, Thiago Teixeira Santos, Maria Goretti Gurgel Praxedes, Adriana Farah Gonzalez, Neide Makiko Furukawa, Carla Cristiane Osawa Membros suplentes: Felipe Rodrigues da Silva, Jos Ruy Porto de Carvalho, Eduardo Delgado Assad, Fbio Csar da Silva Supervisor editorial: Stanley Robson de Medeiros Oliveira, Neide Makiko Furukawa Revisor de texto: Adriana Farah Gonzalez Normalizao bibliogrfica: Maria Goretti Gurgel Praxedes Editorao eletrnica/capa: Neide Makiko Furukawa Imagem capa: www.jangadeiroonline.com.br Secretria: Carla Cristiane Osawa 1a edio on-line 2012
Todos os direitos reservados. A reproduo no autorizada desta publicao, no todo ou em parte, constitui violao dos direitos autorais (Lei no 9.610). Dados Internacionais de Catalogao na Publicao (CIP) Embrapa Informtica Agropecuria Mancini, Adauto Luiz. Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus / Adauto Luiz Mancini. - Campinas : Embrapa Informtica Agropecuria, 2012. 24 p. : il. - (Documentos / Embrapa Informtica Agropecuria , ISSN 1677-9274 ; 124). 1. Linguagem de programao C++. 2. Padronizao de cdigo-fonte. 3. Projeto Pecus. I. Embrapa Informtica Agropecuria. II. Ttulo. III. Srie. CDD (21. ed.) 005.13 Embrapa 2012

Autor
Adauto Luiz Mancini Mestre em Cincia da Computao e Matemtica Computacional Pesquisador da Embrapa Informtica Agropecuria Av. Andr Tosello, 209, Baro Geraldo Caixa Postal 6041 - 13083-886 - Campinas, SP Telefone: (19) 3211-5771 e-mail: adauto.mancini@embrapa.br

Apresentao
A adoo de linguagem comum entre os membros de uma equipe essencial para o sucesso de um projeto de engenharia de software. Esta linguagem comum facilitada com o uso de uma padronizao sinttica, pois esta estabelece um protocolo de comunicao, facilitando o reso dos objetos criados e nomeados de acordo com o padro. A padronizao de cdigo-fonte foi o primeiro processo escolhido pelos membros do Laboratrio de Matemtica Computacional(LabMaC) envolvidos no projeto componente do projeto MP1 Pecus. Neste trabalho, os autores propem um padro de codificao para a linguagem C++ tomando como base as diretrizes da comunidade possibility. Kleber Xavier Sampaio de Souza
Chefe-Geral Embrapa Informtica Agropecuria

Sumrio
Conveno, siglas...................................................................................9
Notao.....................................................................................................9 Siglas e acrnimos..................................................................................10

Objetivo.................................................................................................... 11 Contexto.................................................................................................. 11 Introduo...............................................................................................12 Idioma.......................................................................................................13 Nomenclatura.........................................................................................13


Tipos de dados........................................................................................14 Constantes e enumeraes....................................................................15 Variveis..................................................................................................15 Funes...................................................................................................20 Arquivos fontes........................................................................................22

Identao.................................................................................................22

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus


Adauto Luiz Mancini

Conveno, siglas
Esta seo tem por objetivo apresentar uma notao para auxiliar na padronizao deste texto e explanao de siglas e conceitos frequentes.

Notao
negrito: enfatizar fortemente o texto grifado do texto corrente. negrito itlico: enfatizar moderadamente o texto grifado do texto corrente. itlico: enfatizar fracamente o texto grifado do texto corrente. [<referncia>]: referncia bibliogrfica, podendo ser um acrnimo para as referncias mais usadas, ou uma referncia a um trabalho ou link. Com menor frequncia pode ter outros significados, como uma referncia a uma tabela, ilustrao ou a algum ponto do texto geral. <texto>: texto copiado ou traduzido na ntegra, com poucas modificaes. Ex: <traduo livre>[<referncia>] simboliza a substituio de um texto contendo uma traduo livre, escrito entre aspas, seguido de uma referncia (provavelmente uma indicao referncia bibliogrfica ou autoria do texto original traduzido. Assim no texto pode aparecer:

10

Embrapa Informtica Agropecuria. Documentos, 124

Tente limitar seu uso de abreviaes em nomes simblicos.[gnu] As regras de codificao so escritas usando a notao apresentada na Tabela 1.
Tabela 1. Notao para regras de codificao. Notao Contedo Exemplo O cdigo-fonte deve ser escrito em ingls. <recomendao > Regra ou recomendao sobre algum aspecto de codificao a ser seguido. <exceo> Enfraquecimento da recomendao, justificando casos de exceo do uso da regra ou transferindo para o programador a escolha pelo uso ou no uso da recomendao. <explicao>

<exemplo>

Nomes e termos regionais sem correspondentes em ingls, ou de pessoas e localidades devem ser escritos no idioma de contexto do termo. Justificativa para a adoo da regra Atualmente ingls a ou da recomendao. linguagem padro para comunicao internacional. enum Enu_Colors Cdigo-fonte em C++ contendo exemplo {BLACK, BLUE};

Siglas e acrnimos
[fp]: fonte padro(fp) de informao, no caso o padro estabelecido em1 LabMaC: Laboratrio de Matemtica Computacional2 situado na Embrapa Informtica Agropecuria3 MP1 Pecus: projeto Pecus do Macroprograma 1 da Embrapa

Disponvel em: <http://www.possibility.com/Cpp/CppCodingStandard.html#names. Disponvel em: <http://cnptia.embrapa.br/content/matematica-computacional-labmac.html>. 3 Disponvel em: <http://cnptia.embrapa.br/>.


1 2

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

11

Objetivo
Apresentar uma proposta de padronizao de cdigo-fonte escrito na linguagem de programao C++, validando seu uso na implementao do framework de suporte simulao MacSim (simulador da matemtica computacionas) dentro das atividades do projeto Pecus, e adequando a espeficao em funo de seu uso prtico durante o desenvolvimento do framework.

Contexto
O uso de padronizao permite a criao ou o uso de protocolos que facilitam a comunicao entre os membros de uma equipe e reso dos objetos4 criados com o uso da padronizao. A padronizao de cdigo-fonte foi o primeiro processo escolhido pelos membros do LabMaC envolvidos no projeto componente do projeto MP1 Pecus. Os motivos da escolha desse processo foram: conseguir desenvolver software com qualidade, eficincia e reso; a existncia de vasta literatura sobre o assunto; evitar que cada membro da equipe, permanente ou temporrio, exera sua preferncia individual de desenvolvimento, possivelmente com pouca ou nenhuma organizao, gerando uma grande quantidade de formatos, prejudicando uma forma comum de entendimento dos produtos gerados ou em desenvolvimento; rpida incluso de novos membros na equipe com relao ao entendimento e produo de cdigo-fonte; aquisio de conhecimento na escolha ou desenvolvimento de padres, que poder ser aplicado posteriormente a outros processos.

Que no LabMaC so cdigo-fonte, documentos, programas de computador, processos.

12

Embrapa Informtica Agropecuria. Documentos, 124

Dentro desse contexto, este documento trata apenas da padronizao de cdigo-fonte, especificamente escrito na linguagem de programao C++. A codificao apenas uma das atividades do processo de desenvolvimento de software. Posteriormente, pretende-se gerar diretrizes para outros processos. O estabelecimento dessas diretrizes tem baixa prioridade, desejando-se que elas sejam subprodutos complementares criados em paralelo s atividades dirias, sem prejudicar a produo. Ainda que tais diretrizes tenham como resultado desejado um aumento na qualidade dos produtos, o tempo necessrio para sua formulao no foi previsto nas atividades programadas, de modo que tais documentos so vistos como um bnus dentro das atividades do grupo de trabalho. Essas diretrizes, para serem consolidadas, precisam ser validadas pelo uso aps sua formulao, num processo de melhoramento contnuo at sua aceitao.

Introduo
No h um padro de codificao para a linguagem C++ recomendado por um rgo internacional de padronizao5, mas existem diversos padres propostos por empresas (ex: Google) e organizaes (ex: GNU). O padro proposto neste trabalho baseado principalmente nas diretrizes da comunidade possibility6 com possveis incluses de algumas diretrizes do padro recomendado pela Google7, pela geosoft8 e pela GNU9, alm de adaptaes prprias sugeridas pelo autor ou pela equipe de reviso.

Ao menos no foi encontrado na pesquisa bibliogrfica. Disponvel em: <http://www.possibility.com/Cpp/CppCodingStandard.html>. 7 Disponvel em: <http://google-styleguide.googlecode.com/svn/trunk/cppguide.xml>. 8 Disponvel em: <http://geosoft.no/development/cppstyle.html#introduction>. 9 Disponvel em: <http://www.gnu.org/prep/standards/standards.html>.
5 6

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

13

Idioma
O cdigo-fonte deve ser escrito em ingls. fileName; // NOT: nomeArquivo Nomes e termos regionais sem correspondentes em ingls, ou de pessoas e localidades, devem ser escritos no idioma de contexto do termo. Quando o implementador no se sentir confortvel, no caso de comentrios de texto corrido (explicao de variveis e interfaces de funes, algoritmos, etc), adicionar tambm uma explicao no idioma local, para que posteriormente o texto em ingls possa ser refinado. Isso importante porque um texto escrito por algum com pouco domnio da linguagem pode ser confuso e haver perda de informao ou significao errada do contedo desejado. Atualmente ingls a linguagem padro para comunicao internacional.

Nomenclatura
A escolha adequada e consistente de nomes o aspecto mais importante da padronizao de cdigo, uma vez que deve permitir uma compreenso fcil e sem (ou com reduzida) ambiguidade aos humanos dos elementos representados no cdigo. Esses elementos podem ser dados ou procedimentos. Elementos de dados vo desde a declarao de tipos de dados (constantes, enumeraes, registros, estruturas, classes, etc) declarao das variveis a serem usadas no cdigo (variveis e arrays (vetores), variveis auxiliares, instncias de agregaes de dados como estruturas ou objetos de classe) e funes (sejam mtodos de classes ou no). As regras de consistncia mais importantes so aquelas que governam nomeao. O estilo de um nome informa-nos imediatamente sobre o tipo ou finalidade da entidade textual referenciada: um tipo, uma varivel, uma funo, uma constante, uma macro, etc, sem fazer-nos procurar pela declarao da entidade. O engenho de casamento de padres de nossos crebros funciona bem usando esse tipo de regras de nomeao.[google]

14

Embrapa Informtica Agropecuria. Documentos, 124

Um nome o resultado de um processo de reflexo longo e profundo sobre a ecologia em que o alvo reside. Somente um programador que entende o sistema como um todo pode criar um nome que se encaixa adequadamente com o sistema. Se o nome apropriado, tudo se encaixa junto naturalmente, relaes so claras, o entendimento derivvel, e o raciocnio a partir de expectativas comuns humanas funciona como esperado.[possibility]

Tipos de dados
Nomes representando tipos devem comear com um prefixo dependente do tipo (Tabela 2), seguido dos termos intercalados por tipo de caixa (primeira letra maiscula e demais minsculas).
Tabela 2. Prefixos para tipos. Classe Estrutura Unio Enumerao Cls_ Str_ Uni_ Enu_

class Cls_Rectangle { int width, height; public: void Values (int width_arg,int height_arg); int area () {return (width*height);} }; struct Str_Product { int weight; float price; }; enum Enu_Colors {BLACK, BLUE}; Cls_Rectangle rectangle; //Sabe_se que uma varivel de tipo classe pelo prefixo Str_Product product; //Sabe_se que uma varivel de tipo estrutura pelo prefixo

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

15

Enu_Colors color; //Sabe_se que uma varivel de tipo enumerao pelo prefixo

O uso de um prefixo permite saber na declarao da varivel o tipo de agregao da informao (classe, estrutura, etc), em adio funo informada no nome (Rectangle). Esta forma mimetiza a declarao de variveis de tipos bsicos em C++.
int integerNumber; //tipo bsico Cls_Rectangle rectangle; //imitao da declarao do tipo bsico

O uso de caixas maisculas e minsculas para diferenciar nomes de variveis de nomes de tipos ou de funes prtica comum na comunidade C++.

Constantes e enumeraes
Nome de constante ou de valor de enumerao deve ser escrito com letras maisculas. No caso do nome conter mais de uma palavra, estas devem ser separadas por sublinhado.
#define PI 3.14 enum Enu_ColoredFruits {YELLOW_BANANA, ORANGE_ORANGE, RED_APPLE};

Variveis
1. Por um ou mais prefixos (Tabela 3) relacionados ao modelo matemtico (caso se aplique), comeando com letra minscula e os demais termos comeando com letra maiscula, seguindo ordem de prioridade; 2. a funo da varivel comeando em minsculo e os demais termos comeando com maisculo; 3. um ou mais sufixos (Tabela 4)relacionados implementao (caso se aplique), comeando em minsculo e os demais termos comeando com maisculo, seguindo ordem de prioridade.

16

Embrapa Informtica Agropecuria. Documentos, 124

Tabela 3. Prefixos para variveis. 1) entrada (input) 2) sada (output) 3) estado (compartiment)10 4) estado de transio (transition)11 5) auxiliar 6) mnimo 7) mdia (average) 8) mximo 9) contador (count) 10) chave (key) 11) ndice (index) inp_ out_ cpt_ trs_ aux_ min_ avg_ max_ cnt_ key_ idx_

O prefixo auxiliar (aux_) refere-se a um clculo intermedirio do modelo matemtico.


Tabela 4. Sufixos para variveis. 1) 2) 3) 4) 5) 6) constante12 argumento13 (de funo) ponteiro Alias ou referncia Encapsulamento (hidden) Varivel esttica (static) _ctt _arg _ptr _ref _hid _stt

//Valor de entrada de carboidratos dirios na rao em miligramas com valor constante: const float inp_dailyCarbohidratesInFeedInMilligrams_ctt = 456.0;

Um compartimento (varivel de estado) refere-se a um valor de comportamento dinmico (em funo do tempo) de interesse do sistema sendo estudado. Terminologia de modelos dinmicos em simulao de sistemas. 11 Um estado de transio refere-se a um (ou a um conjunto de) estado que em funo de um evento (valor) de entrada dispara uma regra de transio adequada e muda o estado do sistema. Terminologia de automatos finitos de computao. 12 Variveis declaradas com a palavra-chave const, no referem-se macro #define. 13 O sufixo _arg deve ser usado apenas no escopo interno da funo onde declarado, evite seu uso na chamada da funo.
10

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

17

//Varivel auxiliar do modelo, porcentagem diria de carbohidratos na rao: float aux_dailyPercentageOfCarbohidratesInFeed; //Compartimento e porta de sada para ganho total de peso dirio em miligramas: float outCpt_totalWeightGainInMilligramsOfDay ; //Compartimento com valor mdio do ganho dirio de peso em gramas por animal no lote 53: float cptAvg_totalWeightGainInMilligramsOfDayInBatch53; //Estado de transio, situao reprodutiva da vaca, ponteiro constante para argumento de funo: const int* trs_reprodutiveStateOfCow_cttArgPtr;

Prtica comum na comunidade de desenvolvimento C++, iniciar nomes de variveis com minscula permite diferenci-las de tipos ou funes. O uso de prefixos e sufixos preestabelecidos permite fornecer informaes adicionais de tipo ou comportamento da varivel. A opo escolhida foi priorizar informaes relacionadas ao contexto do modelo matemtico na forma de prefixo, seguido pela informao da funcionalidade da varivel propriamente dita, e por ltimo (sufixo) o contexto da varivel em funo do tipo de comportamento na implementao. Alguns padres de codificao (google,gnu) recomendam o uso de sublinhado como separador de palavras. Como essa prtica aumenta o tamanho do nome no cdigo e tambm o tempo e esforo de digitao, preferiu-se o padro de separar as palavras por caixa alta e baixa, reservando o sublinhado apenas para separar sequncias de prefixos ou sufixos, quando existirem.
MyExcitingClass my_exciting_local_variable ; MyExcitingClass myExcitingLocalVariable; //mais curto e fcil de digitar

Nomes de tipos e variveis tipicamente deveriam ser substantivos ou adjuntos adnominais(adjetivos, locues adjetivas, artigos, pronomes adjetivos, numerais adjetivos):
string fileOpener; int cnt_errors;

18

Embrapa Informtica Agropecuria. Documentos, 124

Os verbos que tm uma ao associada so mais apropriados para a definio de nomes de funes. No se preocupe em salvar espao horizontal uma vez que muito mais importante tornar seu cdigo imediatamente entendvel para um novo leitor. Exemplos de nomes bem escolhidos:
int cnt_errors; // Bom int cnt_completedConnections; // Bom

Nomes pobremente escolhidos usam abreviaes ambguas ou caracteres arbitrrios que no transmitem significado:
int n; int nErr; int nCompConns; // Ruim: pouco significativo // Ruim: abreviao ambgua // Ruim: abreviao ambgua

Nomes de variveis locais podem ser curtos, porque so usados somente dentro de um contexto, onde comentrios (presumivelmente) explicam seu propsito.[gnu]
int i,j; //contador usado para incrementos em laos for (i=0; i<10; i++) {j = i*2;}

Variveis genricas devem ter o nome semelhante ao nome de seu tipo.


Cls_Database database; Cls_Database* database_ptr;

Reduza a complexidade reduzindo o nmero de termos e nomes usados. Tambm facilita deduzir o tipo dado apenas pelo nome da varivel. Se por alguma razo esta conveno parece no se encaixar uma forte indicao de que o nome do tipo est ruim. Variveis no genricas tem um papel. Estas variveis geralmente podem ser nomeadas pela combinao do papel e tipo:

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

19

Point startingPoint, centerPoint; Name loginName; [geosoft]

Abreviaes: no use abreviaes a menos que elas sejam extremamente bem conhecidas fora do seu projeto.
int cnt_dnsConnections; // Muitas pessoas sabem o que DNS significa. int wgcConnections; // Apenas seu grupo de trabalho conhece a sigla wgc int pcReader; // Muitas coisas podem ser abreviadas por pc.

Nunca abrevie deixando letras de fora:


string chemistryDepartmentManager; // Bom int chemDeptManager; // Ruim

Tente limitar o uso de abreviaes em nomes simblicos. Fazer umas poucas abreviaes aceitvel, mas explique o que elas significam e ento use-as frequentemente, mas no use grandes quantidades de abreviaes obscuras. [gnu] Abreviaes e acrnimos no devem ser em maiscula quando usados como um nome.
ExportHtmlSource(); // No use: ExportHTMLSource(); OpenDvdPlayer(); // No use: OpenDVDPlayer(); [geosoft]

Variveis globais devem sempre ser referenciadas explicitamente usando o operador :: [geosoft]
::mainWindow.Open() ::applicationContext.GetName()

20

Embrapa Informtica Agropecuria. Documentos, 124

Variveis privadas ou protegidas de classe devem ter o sufixo _hid


class Cls_SomeClass { private: int length_hid; }

A indicao explcita no nome de que a varivel esttica, funciona como um lembrete ao programador de que a varivel tem um nico valor para todas as instncias da classe. O prefixo cnt_ deve ser usado para variveis representando um nmero de objetos. A indicao deixa claro que a varivel representa o tamanho de uma populao. Variveis booleanas devem ser iniciadas por um verbo, quando adequado.
isSet = IsSet(); hasLicense = HasLicense(); mustDestroy = MustDestroy();

Funes
Nomes de funes devem comear com um verbo imperativo (expressa comando) em maiscula, sem prefixos ou sufixos. Nomes de funes (mtodo que retornam um valor) devem ter um nome representativo do que retornam. Procedimentos (mtodos void, que no retornam valor) devem ter um nome representativo da ao ou processo executado pelo mtodo. Na definio da funo os parmetros devem ter sufixo _arg.
void OpenFile(); isOperationValid = CheckFlight (flightNumber, cardCreditOfClient); aux_PercentOfFat = ComputeFatIndice (totalWeightInOnces, ageInWeeks); void ComputeGeometricCenter (Cls_Rectangle rectangle_arg, float x_ arg, float y_arg);

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

21

ComputeGeometricCenter (rectangle, x, y); //Chamada da funo sem o sufixo _arg

Funes tm o objetivo de processar dados e tm um carter ativo de executar aes, que so melhor representadas por verbos. Embora nomes de funes possam ser diferenciados de outros nomes porque possuem parnteses. O uso do sufixo _arg na definio da funo permite saber dentro do corpo da funo quando uma varivel um argumento da funo, til quando o corpo tem tamanho grande e muitas variveis so declaradas, ou quando so declaradas variveis internas com nomes semelhantes aos nomes dos argumentos. Funes de acesso a propriedades protegidas de classe devem ter o mesmo nome da propriedade, comeando com maiscula. Quando a propriedade contiver prefixos ou sufixos, no utilizar o caracter sublinhado(_) no nome da funo, para manter a padronizao da regra de nomeao de funes. Quando a propriedade for encapsulada (sufixo _hid), no usar hid no nome da funo de acesso.
class SomeClass { public: int Lenght() //No usar: GetLenght {return length_hid; } void Lenght(int value_arg) //No usar: SetLenght {length_hid = value_arg; } const float * AreaPtr() {return area_ptr; } private: int length_hid; float * area_ptr; }

As assinaturas diferentes das funes so suficientes para diferenciar se a varivel est sendo lida ou escrita, sem necessidade de Get/Set no nome da funo. Definir a funo com o mesmo nome da propriedade diminui a quantidade de nomes a serem lembrados.

22

Embrapa Informtica Agropecuria. Documentos, 124

Arquivos fontes
Uma classe deve ser declarada em um arquivo de interface (.h, .hpp) e definida em um arquivo fonte (.c++, .C, .cc , .cpp) com os arquivos tendo o mesmo nome da classe.
class Cls_Rectangle: Cls_Rectangle.h, Cls_Rectangle.cpp

Isto facilita localizar a definio de uma classe que foi referenciada em outro arquivo de cdigo-fonte. As sees de acessibilidade de uma classe devem ser explcitas e seguir a ordem: public, protected e private. Um usurio comum da classe l apenas a interface pblica, no incio. As sees encapsuladas so de interesse apenas dos programadores responsveis por tais mtodos. Arquivos de cabealho precisam conter um guarda de include.
#ifndef COM_COMPANY_MODULE_CLASSNAME_H #define COM_COMPANY_MODULE_CLASSNAME_H : #endif // COM_COMPANY_MODULE_CLASSNAME_H

Evita erros de compilao ao se tentar incluir duas ou mais vezes o mesmo arquivo de cabealho causando erro de duplicao de declarao. Tipos que so locais a um arquivo somente devem ser declarados dentro do referido arquivo. Refora encapsulamento da informao.

Identao
Usar 5 espaos para identao. Facilita visualizar comandos condicionais com blocos seno.

Proposta de padronizao de cdigo-fonte C++ no escopo do projeto Pecus

23

Alinhe { e } verticalmente.
{//declarao de variveis com uso em mais de um lugar no bloco int weight, height, x; //variveis obvias que no precisam explicao Type1 complexVariable1; //comentrio contendo explicao da variavel no obvia Type1 complexVariable2; // comentrio contendo explicao da variavel no obvia : Type5 complexVariable19; // comentrio contendo explicao da variavel no obvia if (condition) {command 1; } else {command 2; } if (very_long_condition1 && second_very_long_condition) {//variavel que sero usadas apenas em um comando ou subbloco //so declaradas antes do local de uso Type3 veryLocalVariable; veryLocalVariable = ; } else if (...) { .. } for (int i=0; i<height; i++) { } {//se criar novo bloco de escopo, comentar funo do novo bloco //declarao de variveis bvias //declarao de variveis com uso em mais de um lugar no bloco //comandos locais do bloco } while (condition1 && second_very_long_condition) { } }

24

Embrapa Informtica Agropecuria. Documentos, 124

Alinhando verticalmente as chaves, por questo de simetria, fica mais fcil visualizar a estrutura do cdigo. Quando houver aninhamento de muitas chaves, com o fechamento distante da abertura, comentar o fechamento com o comando correspondente da abertura.
if (condition1) {if (condition2) {if (condition3) { ... } //if (condition3) } //if (condition2) } //if (condition1)

CGPE 10233