Reglas para escribir código fuente
Especificaciones de escritura del formato del código fuente de Delphi Al aprender cualquier idioma, debe prestar atención a las especificaciones de escritura del formato del código fuente de Delphi 1. Introducción a la especificación
Las principales disposiciones de esta especificación Las reglas y precauciones que se deben seguir al escribir programas fuente de Delphi. El propósito de escribir esta especificación es hacer consistentes los hábitos de escritura del código fuente de los desarrolladores de software de la empresa. Esto permite que cada miembro del equipo comprenda el código de otros miembros del equipo, lo que facilita el mantenimiento del sistema de memoria de desarrollo secundario del código fuente.
2. Especificaciones generales de formato
2.1 Sangría
La sangría son los dos caracteres expuestos para aumentar la legibilidad cuando cambia el nivel del espacio del programa fuente. La regla de sangría es de dos espacios por nivel. No se permite la tabulación. Porque Tab producirá diferentes efectos debido a las diferentes configuraciones realizadas por el usuario. Cuando encuentre un juicio de inicio o entrada, bucle, manejo de excepciones, con declaración, declaración de tipo de registro, declaración de clase, etc., aumente un nivel. Cuando encuentre un juicio de fin o salida, bucle, manejo de excepciones, con declaración, declaración de tipo de registro, la clase. La declaración se reduce en un nivel durante la espera. Por ejemplo:
if TmpInt lt;gt; 100 entonces
TmpInt := 100
2.2 Inicio..Fin
comenzar; declaración Las declaraciones y end deben ocupar una línea en el programa fuente, por ejemplo:
for I:= 0 a 10 do start //Uso incorrecto
end
para I:= 0 a 10 hacer //Uso correcto
comenzar
finalizar
2.3 espacios
en operador; Y agregue espacios en ambos extremos de los símbolos de juicio lógico, por ejemplo: I: = I 1;, ayb, etc., pero no se requieren espacios al agregar paréntesis. Por ejemplo: if (a gt; b) then //Uso incorrecto
If (a gt; b) then //Uso correcto
Otro ejemplo: procedimiento Test(Param1: integer ; Param3: string);
3. Especificación del formato de escritura de sintaxis de Object Pascal
3.1 Palabras reservadas
Todas las palabras reservadas o palabras clave del lenguaje Object Pascal deben ser Utilice letras minúsculas.
3.2 Procedimientos y funciones
3.2.1 Denominación y formato
Todos los nombres de los procedimientos y funciones deben utilizar palabras significativas, y los nombres de todas las palabras deben be Una letra debe estar en mayúsculas.
Por ejemplo:
procedimiento formatharddisk; //Nombre incorrecto
procedimiento FormatHardDisk; //Nombre correcto
Se deben utilizar procedimientos y funciones que establezcan contenido variable Establecer como un prefijo, por ejemplo:
procedimiento SetUserName
Los procedimientos y funciones que leen contenidos variables deben usar Get como prefijo, por ejemplo:
función GetUserName: string;
3.2.2 Parámetros de procedimientos y funciones
3.2.2.1 Nombramiento
Los parámetros de tipo uniforme se escriben en la misma oración:
procedure Foo(Param1, Param2, Param3: Integer; Param4: string);
3.2.2.2 Nomenclatura
Todos los parámetros deben ser significativos y cuando los nombres de los parámetros son diferentes de otros; Cuando se repite el nombre del atributo, agregue un prefijo 'A', por ejemplo:
procedure SomeProc(AUserName: string; AUserAge: integer
3.2.2.3 Conflicto de nombres
3.2.2.3 Conflicto de nombres
p >
Cuando dos unidades utilizadas incluyen una función o procedimiento con el mismo nombre, cuando haga referencia a esta función o procedimiento, se ejecutará la función o procedimiento en la unidad declarada más adelante en la cláusula de uso. Para evitar esta 'dependencia de cláusulas de uso', debe escribir la fuente completa de la función o procedimiento al hacer referencia a ella. Por ejemplo:
SysUtils.FindClose(SR);
Windows.FindClose(Handle);
3.3 Variables
3.3.1. Denominación y formato de variables
En primer lugar, todas las variables deben tener nombres significativos para que otros miembros del equipo puedan comprender fácilmente el significado de las variables. La denominación de variables puede utilizar nombres sinónimos en inglés y se pueden utilizar varios nombres en inglés. . palabras, pero la primera letra de cada palabra debe estar en mayúscula. Por ejemplo:
var
WriteFormat::string;
Al mismo tiempo, se pueden utilizar ciertas abreviaturas para algunos tipos específicos, como se muestra a continuación:
Tipo de puntero
Tipo de registro P
Tipo de matriz Rec
Clase Arr
Las variables de control de bucle de clase generalmente usan un solo carácter como: i, j o k. También se permite utilizar un nombre significativo como UserIndex.
3.3.2 Variables locales
El uso de variables locales en un procedimiento sigue las reglas de nomenclatura para todas las demás variables.
3.3.3 Variables globales
Intenta no utilizar variables globales. Si debes utilizar variables globales, debes agregar el prefijo 'g' y el tipo de variable debe ser. reflejado en el nombre de la variable. Por ejemplo:
gprecUserCount: point; //La variable global denominada UserCount es de tipo puntero a una estructura
Pero las variables globales se pueden usar dentro del módulo. Todas las variables globales dentro del módulo deben tener el prefijo 'F'. Si es necesario intercambiar datos entre varios módulos, esto debe lograrse declarando atributos.
Por ejemplo:
tipo
TFormOverdraftReturn = class(TForm)
privado
{ Declaraciones privadas }
FuserName: cadena;
FuserCount: entero;
Procedimiento SetUserName(Valor: cadena);
Función GetUserName: cadena
público;
{ Declaraciones públicas }
propiedad UserName: cadena lee GetUserName escribe SetUserName
propiedad UserCount: entero lee FuserCount escribe FuserCount
end ;
3.4 Tipo
3.4.1 Acuerdo de mayúsculas y minúsculas
Los nombres de tipo de palabras reservadas deben estar todos en minúsculas. Los tipos de API de Win32 suelen estar en mayúsculas. Para otros tipos, la primera letra está en mayúscula y las letras restantes en minúsculas, por ejemplo:
var
MyString: // palabra reservada;
WindowHandle: HWND; // Tipo de API Win32
I: Integer; // identificador de tipo introducido en la unidad del sistema
3.4.2 Tipo de punto flotante p>
Intente no utilizar el tipo Real. Es sólo por compatibilidad con el antiguo código Pascal. Intente utilizar el tipo Doble. El tipo Double está optimizado para procesadores y buses de datos y es una estructura de datos estándar definida por IEEE. Cuando el valor excede el rango de Doble, use Extendido. Pero Java no admite Extended. Sin embargo, el tipo Single se puede utilizar cuando se utilizan archivos DLL escritos en otros idiomas.
3.4.3 Tipo de enumeración
El nombre del tipo de enumeración debe ser significativo y el nombre del tipo debe tener el prefijo 'T'. El nombre del contenido del tipo de enumeración debe contener la abreviatura del nombre del tipo de enumeración, por ejemplo:
TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB
<); p>3.4.4 Tipos de matrizEl nombre del tipo de matriz debe ser significativo y el nombre del tipo debe tener el prefijo 'T'. Si declara un puntero a un tipo de matriz, debe anteponer el prefijo 'P' antes del nombre del tipo, por ejemplo:
tipo
PCcycleArray = ^TCycleArray
;TCycleArray = array[1..100] of integer;
3.4.5 Tipo de registro
El nombre del tipo de registro debe ser significativo y el nombre del tipo debe tener el prefijo 'T'.
Si declara un puntero a un tipo de matriz, debe prefijar 'P' antes del nombre del tipo, por ejemplo:
tipo
PEmployee = ^TEmployee
;TEmployee = registro
Nombre del empleado: cadena
Tarifa de empleado: Doble
fin
Clase 3.5
3.5 .1 Nomenclatura y formato
El nombre de la clase debe ser significativo y el nombre del tipo debe tener el prefijo 'T'. Por ejemplo:
tipo
TCliente = clase(TObject)
El nombre de una instancia de clase suele ser el nombre de la clase sin la 'T' . Por ejemplo:
var
Cliente: TCliente;
3.5.2 Variables en clases
3.5.2.1 Nomenclatura y formato
p> p>
Los nombres de las clases deben ser significativos y los nombres de los tipos deben tener el prefijo 'F'. Todas las variables deben ser de cuatro dimensiones. Si necesita acceder a esta variable desde el exterior, debe declarar un atributo
3.5.3 Método
3.5.3.1 Nombramiento y formato
Igual que la denominación y formato de funciones y procedimientos Formato.
3.5.3.2 Métodos de acceso a la propiedad
Todos los métodos de acceso a la propiedad deben aparecer en privado o protegido. La denominación de los métodos de acceso a atributos es la misma que la de las funciones y procedimientos. Además, el método de lectura debe usar el prefijo 'Get'. El método de escritura debe usar el prefijo 'Set'. El parámetro del método de escritura debe denominarse 'Valor' y su tipo debe ser coherente con la propiedad que se va a escribir. Por ejemplo:
TSomeClass = class(TObject)
privado
FSomeField: Entero
protegido
función GetSomeField: Entero;
procedimiento SetSomeField( Valor: Entero);
propiedad pública
Entero: leer GetSomeField escribir SetSomeField; > end;
3.6 Atributos
3.6.1 Nombramiento y formato
Consistente con el nombre de la variable de la clase con el prefijo 'F' es decir utilizado para la operación.
3.7 Archivos
3.7.1 Archivos de proyecto
3.7.1.1 Estructura del directorio del proyecto
Directorio principal del programa - Bin (Aplicación
-Db (la ruta a la base de datos local)
-Doc (la ruta al documento)
-Hlp (la ruta al archivo de ayuda)
-Backup (ruta de respaldo)
-Tmp (ruta de archivo temporal)
3.7.1.2 Nomenclatura
El archivo del proyecto debe usar un nombre significativo. Por ejemplo: el archivo del proyecto de información del sistema en Delphi se llama SysInfo.dpr.
3.7.2 Archivo de formulario
3.7.2.1 Nombramiento
Consistente con el nombre del formulario: Por ejemplo: si el nombre del formulario es FormMain, entonces el nombre del archivo de formulario será FormMain.frm.
3.7.3 Archivo del módulo de datos
3.7.3.1 Nomenclatura
El nombre del archivo del módulo de datos debe ser significativo y utilizar 'DM' como prefijo. Por ejemplo: el módulo de datos del usuario se denomina 'DMCustomers.dfm'.
3.7.4 Archivo del módulo de datos remoto
3.7.4.1 Denominación
El nombre del archivo del módulo de datos remoto debe ser significativo y utilizar 'RDM' como nombre. prefijo. Por ejemplo: el módulo de datos remoto del usuario se denomina 'RDMCustomers.dfm'.
3.7.5 Archivo de unidad
3.7.5.1 Unidad común
3.7.5.1.1 Nomenclatura de archivo de unidad
Nombre de archivo de unidad Debería tiene sentido y utiliza 'unidad' como prefijo. Por ejemplo: una unidad general se denomina 'UnidadGeneral'.
3.7.5.2 Unidades de formulario
3.7.5.2.1 Nombramiento
El nombre del archivo de la unidad de formulario debe ser coherente con el nombre del formulario. Por ejemplo: si el formulario principal se llama FormMain.pas, entonces el nombre del archivo de la Unidad de formulario es: UnitFormMain.
3.7.5.3 Unidades del módulo de datos
3.7.5.3.1 Nombramiento
El nombre del archivo de la unidad del módulo de datos debe ser coherente con el nombre del módulo de datos. Módulo. Por ejemplo: si el módulo de datos principal se llama DMMain.pas, entonces el nombre del archivo de la unidad del módulo de datos es: UnitDMMain.
3.7.5.4 Encabezado del archivo
El propósito, autor, fecha, entrada y salida del archivo debe escribirse en el encabezado de todos los archivos. Por ejemplo:
{
Fecha de modificación:
Autor:
Propósito:
La estructura de este módulo consta de:
}
3.7.6 Formularios y módulos de datos Formularios
3.7.6.1 Clase de formulario
1 Estándar de nomenclatura de clases de formulario.
p>
Las clases de formularios deben tener nombres significativos y usar 'TForm' como prefijo. Por ejemplo: El nombre de la clase Acerca del formulario es:
TAboutForm = class(TForm)
El nombre del formulario principal es
TMainForm = class( TForm)
p>
2. Estándares de nomenclatura para instancias de clase Form
El nombre de la instancia de clase Form debe ser coherente con el nombre de la clase Form con la 'T. ' abandonó.
Por ejemplo:
Nombre de tipo
Nombre de instancia TaboutForm
AboutForm TmainForm
MainForm TCustomerEntryForm
CustomerEntryForm
CustomerEntryForm
p >
3.7.6.2 Formulario de módulos de datos
3.7.6.2.1 Estándares de denominación de formularios de módulos de datos
La denominación de las clases de formularios de módulos de datos debe ser significativa y utilizar 'TDM'. ' como prefijo. Por ejemplo:
TDMCustomer = class(TDataModule)
TDMOrders = class(TDataModule)
3.7.6.2.2 Estándar de nomenclatura de instancias del módulo de datos
El nombre de la instancia de la clase Formulario del módulo de datos debe ser coherente con el nombre de la clase Formulario del módulo de datos sin la 'T'. Por ejemplo:
Nombre de tipo
Nombre de instancia TCustomerDataModule
CustomerDataModule TordersDataModule
Control OrdersDataModule 3.8
3.8. 1 Denominación de instancias de control
Las instancias de control deben tener como prefijo el nombre de la clase de control menos la 'T', por ejemplo:
El nombre de Tedit donde se ingresa el nombre de usuario es: Editar nombre de usuario.
3.8.2 Abreviaturas de controles
Las siguientes abreviaturas se pueden usar para los nombres de los controles, pero las abreviaturas utilizadas se agregan con '_' entre los nombres de los controles:
3.8 .2.1 Pestaña Estándar
mm TMainMenu
pm TPopupMenu
mmi TMainMenuItem
pmi TPopupMenuItem
lbl TLabel
edt TEdit
mem TMemo
btn TButton
cb TCheckBox
rb TRadioButton
lb TListBox
cb TComboBox
scb TScrollBar
gb TGroupBox
rg TRadioGroup
pnl TPanel
p>cl TCommandList
3.8.2.2 Pestaña Adicional
bbtn TBitBtn
sb TSpeedButton
me TMaskEdit
sg TStringGrid
dg TDrawGrid
img TImage
shp TShape
bvl TBevel
sbx TScrollBox
clb TCheckListbox
spl TSplitter
stx TStaticText
cht TChart
3.8.2.3 Pestaña Win32
p>
tbc TTabControl
pgc TPageControl
il TImageList
re TRichEdit p>
tbr TTrackBar
prb TProgressBar
ud TUpDown
hk THotKey
ani TAnimate
dtp TDateTimePicker
tv TTreeView
lv TListView
hdr THeaderControl
stb TStatusBar
tlb TToolBar
clb TCoolBar
3.8 .2.4 Pestaña Sistema
tm TTimer
pb TPaintBox
mp TMediaPlayer
olec TOleContainer
ddcc TDDEClientConv
ddci TDDEClientItem
ddsc TDDEServerConv
ddsi TDDEServerItem
3.8.2.5 Pestaña Internet
csk TClientSocket
ssk TServerSock
et
wbd TWebDispatcher
pp TPageProducer
tp TQueryTableProducer
dstp TDataSetTableProducer
nmdt TNMDayTime
nec TNMEcho
nf TNMFinger
nftp TNMFtp
n TDCOMConnection
olee TOleEnterpriseConnection
sck TSocketConnection
rms TRemoteServer
mid TmidasConnection
4. Especificaciones de modificación
Las disposiciones de esta regla sólo se aplican a los programas que han sido incluidos en la gestión de configuración. En este tipo de modificación se requiere conservar el contenido anterior a la modificación e identificar el contenido modificado y nuevo. Y agregue la información necesaria, como el modificador, la fecha de modificación, la descripción de la modificación, etc., al encabezado del archivo.
4.1 Historial de modificaciones
Al realizar modificaciones aprobadas en el archivo fuente, el modificador debe agregar un elemento del historial de modificaciones al encabezado del archivo de programa. Para cada modificación posterior, el modificador debe completar la siguiente información en el proyecto:
Modificador
Tiempo de modificación
Motivo de la modificación
Las instrucciones de modificación son cómo modificar
4.2 Nuevas líneas de código
Debe haber líneas de comentarios antes y después de las nuevas líneas de código.
//Modificador, hora de modificación, descripción de la modificación
Nueva línea de código
//Modificación completada
4.3 Eliminar líneas de código
Eliminar líneas de código con líneas de comentarios antes y después.
//Modificador, hora de modificación, descripción de la modificación
//Línea de código que se eliminará (comenta la declaración que se eliminará)
//Fin de modificación
4.4 Modificar la línea de código
Modifique la línea de código eliminando la línea de código y luego agregando la línea de código.
//Modificador, hora de modificación, descripción de la modificación
//Línea de código antes de la modificación
//Fin de la modificación
/ /Línea de código modificada
Línea de código modificada
//Fin de la modificación