qingrui li Compilado e anotado com base no Object Pascal Style Guide de Charles Calvert
Nota: Muitas pessoas que usam Delphi não prestam atenção ao estilo de codificação e muitas vezes escrevem código fora do padrão, o que torna difícil a compreensão de outras pessoas e propenso a erros. Espero que este artigo possa encorajar a maioria dos entusiastas do Delphi a se unificarem ao estilo padrão e avançarem juntos.
Este artigo descreve o estilo padrão para formatação de código Delphi. Este subestilo é baseado nas convenções de codificação da equipe de desenvolvimento Delphi. Reconhecemos que muitos códigos-fonte populares usam um estilo diferente do nosso, mas recomendamos fortemente o uso do estilo Borland na comunidade de código-fonte público.
Delphi é uma linguagem bonita e uma de suas vantagens mais importantes é a legibilidade. Este padrão foi projetado para melhorar a legibilidade. Quando os desenvolvedores seguirem esse padrão, todos os desenvolvedores se beneficiarão de um estilo consistente e legível. Os esforços para impor padrões de estilo podem aumentar o valor dos programas de origem, especialmente durante os ciclos de depuração e manutenção.
Estilo de nomenclatura InfixCaps
Também chamado de CamelCaps, o nome consiste em diversas palavras que expressam significado. A primeira letra de cada palavra é maiúscula e as demais são minúsculas.
Tais como: MyFile, IntToStr, Itens.
Delphi não usa notação húngara e recomenda nomes significativos. Por exemplo, use AppName em vez de lpszAppName, use Successful em vez de bSuccess e use ClientRect em vez de lPRectClientRect.
Nomenclatura do arquivo de origem
Use o formulário InfixCaps. Se estiver transpilando um arquivo de cabeçalho C/C++, use o mesmo nome do arquivo de cabeçalho original. Se vários arquivos de cabeçalho precisarem ser mesclados em uma unidade, use o nome do arquivo de cabeçalho principal, como: WinBase.h, Windows.h são mesclados em Windows.pas.
convenção de nomenclatura
Exceto palavras reservadas e palavras diretivas, que estão todas em letras minúsculas, outros identificadores usam o estilo InfixCaps.
Nota: Parece haver uma tendência recente no uso de letras minúsculas simples ou abreviações para variáveis locais e parâmetros formais.
A exceção é que os identificadores nos arquivos de cabeçalho transpilados mantêm seu estilo original.
Todos os nomes de tipo começam com T (a primeira letra do tipo)
Os nomes de funções, procedimentos e métodos usam verbos ou frases verbais, e outros identificadores usam substantivos ou frases nominais.
Os membros dos dados da classe começam com F (a primeira letra do Campo)
Os membros do tipo enumeração são precedidos por uma abreviatura minúscula, geralmente duas letras, por exemplo:
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll);
Funções que retornam valores booleanos começam com Is, por exemplo: IsVisible, IsResizable
Uso de espaço em branco
Insira linhas em branco em locais apropriados para separar diferentes partes do código, como entre declarações de classe, implementações de funções, etc.
Onde usar espaços: À direita da pontuação, em ambos os lados dos operadores binários
Onde espaços não devem ser inseridos:
Exemplo correto:
function TMyClass.MyFunc(var Valor: Inteiro);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
Exemplo de erro:
função TMyClass.MyFunc( var Valor: Inteiro ) ;MeuPonteiro := @ MeuRecord;MinhaClasse := TMyClass( MeuPonteiro ) ;MeuInteger := MeuIntegerArray[ 5 ] ;
recuo
O recuo de dois espaços deve ser usado e nenhum caractere de tabulação deve ser usado.
O código entre início...fim deve ser recuado e o próprio início...fim não deve ser recuado.
Recue dois espaços ao continuar linhas
Exemplo correto:
função CreateWindowEx (dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; if ((X = Y) ou (Y = X) ou (Z = P) ou (F = J) então comece S := J;fim;
while (LongExpression1 ou LongExpression2) do start // DoSomething // DoSomethingElse;end;if (LongExpression1) ou (LongExpression2) ou (LongExpression3) then
tipo
As declarações de classe são organizadas na seguinte ordem
campo de dados
método
propriedade
A hierarquia de acesso é organizada na seguinte ordem, com exceção do código gerado automaticamente pelo IDE.
Construtores e destruidores são declarados antes da declaração do método. Como TObject.Destroy é uma função virtual e TObject.Free chama Destroy, não use outros nomes para o destruidor. O construtor pode usar um nome diferente de Create, mas geralmente é melhor usar Create.
exemplo:
TMyClass = class(TObject) privado protegido público publicado final;
Os dados só devem ser declarados na seção privada e começar com F (primeira letra do Campo).
tipo TMyClass = class(TObject) private FMyData: Integer; function GetData: Integer; procedimento SetData (Valor: Integer); propriedade pública publicada MyData: Integer read GetData write SetData;
As interfaces seguem as mesmas regras