qingrui li Compilado y anotado según la Guía de estilo Object Pascal de Charles Calvert
Nota: Muchas personas que usan Delphi no prestan atención al estilo de codificación y, a menudo, escriben código no estándar, lo que hace que sea difícil de entender para otros y propenso a errores. Espero que este artículo pueda alentar a la mayoría de los entusiastas de Delphi a unificarse con el estilo estándar y avanzar juntos.
Este artículo describe el estilo estándar para formatear el código Delphi. Este subestilo se basa en las convenciones de codificación del equipo de desarrollo de Delphi. Reconocemos que muchos códigos fuente populares utilizan un estilo diferente al nuestro, pero recomendamos encarecidamente el uso del estilo Borland en la comunidad de código fuente público.
Delphi es un lenguaje hermoso y una de sus ventajas más importantes es la legibilidad. Este estándar está diseñado para mejorar la legibilidad. Cuando los desarrolladores sigan este estándar, todos los desarrolladores se beneficiarán de un estilo coherente y legible. Los esfuerzos para hacer cumplir los estándares de estilo pueden aumentar el valor de los programas fuente, especialmente durante los ciclos de depuración y mantenimiento.
Estilo de nomenclatura de InfixCaps
También llamado CamelCaps, el nombre consta de varias palabras que expresan significado. La primera letra de cada palabra está en mayúscula y el resto en minúscula.
Tales como: MyFile, IntToStr, Items.
Delphi no utiliza notación húngara y recomienda nombres significativos. Por ejemplo, use AppName en lugar de lpszAppName, use Successful en lugar de bSuccess y use ClientRect en lugar de lPRectClientRect.
Nomenclatura del archivo fuente
Utilice el formulario InfixCaps. Si transpila un archivo de encabezado C/C++, use el mismo nombre que el archivo de encabezado original. Si es necesario fusionar varios archivos de encabezado en una unidad, use el nombre del archivo de encabezado principal, como: WinBase.h, Windows.h se fusionan en Windows.pas.
convención de nomenclatura
A excepción de las palabras reservadas y las palabras directivas, que están todas en minúsculas, otros identificadores utilizan el estilo InfixCaps.
Nota: Parece haber una tendencia reciente hacia el uso de minúsculas simples o abreviaturas para variables locales y parámetros formales.
La excepción es que los identificadores de los archivos de encabezado transpilados conservan su estilo original.
Todos los nombres de tipos comienzan con T (la primera letra de Tipo)
Los nombres de funciones, procedimientos y métodos utilizan verbos o frases verbales, y otros identificadores utilizan sustantivos o frases nominales.
Los miembros de datos de clase comienzan con F (la primera letra de Field)
Los miembros del tipo de enumeración están precedidos por una abreviatura de tipo minúscula, normalmente dos letras, por ejemplo:
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll);
Las funciones que devuelven valores booleanos comienzan con Is, por ejemplo: IsVisible, IsResizable
Uso de espacios en blanco
Inserte líneas en blanco en las ubicaciones apropiadas para separar diferentes partes del código, como entre declaraciones de clases, implementaciones de funciones, etc.
Dónde usar espacios: a la derecha de la puntuación, a cada lado de los operadores binarios
Donde no se deben insertar espacios:
Ejemplo correcto:
función TMyClass.MyFunc(var Valor: Integer);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
Ejemplo de error:
función TMyClass.MyFunc( var Valor: Entero );MiPunto:= @ MyRecord;MiClase := TMyClass (MiPuntero);MiInteger := MyIntegerArray [ 5 ] ;
sangría
Se debe utilizar sangría de dos espacios y no se deben utilizar caracteres de tabulación.
El código entre comienzo...fin debe tener sangría, y el propio comienzo...fin no debe tener sangría.
Sangrar dos espacios al continuar líneas
Ejemplo correcto:
función CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; si ((X = Y) o (Y = X) o (Z = P) o (F = J) luego comienza S := J;fin;
mientras (LongExpression1 o LongExpression2) comienzan // DoSomething // DoSomethingElse;end;if (LongExpression1) o (LongExpression2) o (LongExpression3) entonces
amable
Las declaraciones de clase están organizadas en el siguiente orden.
campo de datos
método
propiedad
La jerarquía de acceso está organizada en el siguiente orden, con la excepción del código generado automáticamente por el IDE.
Los constructores y destructores se declaran antes de la declaración del método. Dado que TObject.Destroy es una función virtual y TObject.Free llama a Destroy, no utilice otros nombres para el destructor. El constructor puede utilizar un nombre distinto de Crear, pero generalmente es mejor utilizar Crear.
ejemplo:
TMyClass = clase(TObject) privado protegido público publicado final;
Los datos sólo deben declararse en la sección privada y comenzar con F (la primera letra del campo).
tipo TMyClass = clase (TObject) privada FMyData: Entero; función GetData: Entero; procedimiento SetData (Valor: Entero propiedad pública MyData: Entero leer GetData escribir SetData);
Las interfaces siguen las mismas reglas.