Padronização de código C# Por Celito Muck Felipetto
Introdução Por que a padronização de código? Ela é realmente necessária? Padronização da padronização? Qual usar? Como usar?
Convenção de nomenclatura Notação Húngara bBusy : boolean chInitial : char cApples : count of items dwLightYears : double word (systems) fBusy : boolean (flag) nSize : integer (systems) or count (application) iSize : integer (systems) or index (application)
Convenção de nomenclatura Notação Posicional Máximo 8 caracteres Apenas usava mnemônicos BUSY : boolean WORDL : char APPLES : int LYEAR : double ISVAL : boolean (flag)
Convenção de nomenclatura CamelCase: isBusy : boolean longWord : string apples : int lightYear : double varWithALongName : float Pascal: IsBusy : boolean LongWord : string Apples : int Light Year : double VarWithALongName : float
Convenção de nomenclatura Underscore & Hyphen (UPPER or lower) is_busy : boolean long_word : string NUM_APPLES : int _light_year : double first-letter : char VAR-WITH-A-VERY-LONG-NAME : float
Convenção de nomenclatura Padrão C#: Estrutura Nomenclatura Exemplo Classe Pascal PessoaFisica Interface ‘I’ + Pascal IProgramador Método public, Propriedades NomeCompleto() Método private Camel Case calculaIdade() Variável Public & Protected PrimeiroNome Variável Private salarioInicial Constantes Uppercase Underscored PISO_SALARIAL
Convenção de nomenclatura Padrão alternativo: Estrutura Nomenclatura Exemplo Classe Pascal PessoaFisica Interface ‘I’ + Pascal IProgramador Método public, Propriedades Camel Case nomeCompleto() Método private calculaIdade() Variavel Public & Protected primeiroNome Variavel Private ‘_’ + Camel Case _salarioAtual Constantes Uppercase Underscored PISO_SALARIAL
Indentação Tabulação != 3 Espaços Fontes Monospaced Namespace não tem indentação Limite da linha
Indentação Função quebrada: Caso 1: Caso 2: nomeCompleto = metodoQueCaptaONome... nomeCompleto = metodoQueCaptaONome(); Caso 2: metodoMuitoComprido(metodoMuitoCom... metodoMuitoComprido( metodoMuitoComprido());
Indentação Inicio de Bloco Mesma linha Próxima linha (MS) public void NomeDaFunção(){ ... } Próxima linha (MS) public void NomeDaFunção() { ... }
Idioma Escopo do projeto Equipe de programação Mistura de idiomas
Documentação Importancia da documentação O que documentar? C# XML Doc Comentários com Tags
Documentação Tags: <summary> = Descrição da estrutura que segue <param> = Descrição do parametro <returns> = Descrição do retorno <code> = Delimita codigo na documentação <see> = Referencia um membro externo <example> = Exemplifica a documentação
Documentação Exemplo: /// <summary> /// Retorna o nome completo da Pessoa /// </summary> /// <param name=“tratamento”> Tratamento a ser adicionado /// antes do nome </param> /// <example> /// Esse exemplo mostra como pode ser /// usado o metodo <see cref=“NomeCompleto"/>. /// <code> /// class ClasseTeste /// { /// static int Main() /// { /// NomeCompleto(false); /// } /// } /// </code> /// </example> public string NomeCompleto(string tratamento) { … }
Repositório de código SVN GIT Repositório centralizado Bom para pequenos grupos GIT Repositórios hierarquicos Bom para projetos complexos
TODO O que é o TODO? Necessidade do TODO TODO direcionado //TODO: Adicionar sons ao personagem; Necessidade do TODO TODO direcionado //TODO: [João] Fazer conexão com BD; Sistemas mais completos: Redmine; Jira; Trac; FogBugz
Fontes MSDN: Microsoft Developer Network (msdn.microsoft.com) Naming convention (programming): Wikipedia (en.wikipedia.org/wiki/Naming_convention_(programing)) Google...