1. Introducción a las especificaciones
Esta especificación estipula principalmente las reglas y precauciones que los programas fuente de Delphi deben seguir durante el proceso de escritura. El propósito de escribir esta especificación es mantener consistentes los hábitos de escritura del código fuente de los desarrolladores de software de la empresa. Al hacerlo, cada miembro del grupo puede comprender el código de otros miembros del grupo, a fin de facilitar el desarrollo secundario del mantenimiento del sistema de memoria del código fuente.
2. Especificaciones de formato general
2.1 sangría
La sangría son los dos espacios expuestos para aumentar la legibilidad cuando cambia el nivel del programa fuente. La regla de sangría es sangrar dos espacios para cada nivel. La pestaña no está permitida. Porque la pestaña producirá diferentes efectos debido a diferentes configuraciones realizadas por el usuario. Cuando se encuentra con el juicio, el juicio, el manejo de excepciones, con la declaración, la declaración de tipo de registro, la declaración de clase, etc., agregue un nivel. Las declaraciones de clase, etc. se reducirán en un nivel. Por ejemplo:
iftmpint <> 100
Tmpint: = 100;
2.2Begin..El
La declaración Begin y la declaración final deberían ocupar una sola línea en el programa fuente, por ejemplo:
Fori: = 0to10Dobegin // Uso incorrecto
fin;
fori: = 0to10do // uso correcto
Comenzar
fin;
2.3 espacios
Agregue espacios en ambos extremos de los operadores y símbolos de juicio lógico, como: i: = i+1;, aandb, etc., pero no se necesitan espacios al agregar soportes. Por ejemplo: if (a> b) entonces // uso incorrecto
If (a> b) entonces // uso correcto
Por ejemplo: procedimientoTest (param1: integer; param3: string);
3. Especificaciones de formato de escritura de gramática de OBJECTPASCAL
3.1 Palabras reservadas
Todas las palabras reservadas o palabras clave en ObjectPascal deben usarse en letras minúsculas.
3.2 Procesos y funciones
3.2.1 Naming y formato
Los nombres de los procedimientos y funciones deben estar compuestos por palabras significativas, y la primera letra de todas las palabras debe estar en mayúsculas. Por ejemplo:
procedimiento formato de disk; // Naming incorrecto
procedimiento formatharddisk; // Naming correcto
El proceso y la función que establece el contenido de una variable debe usar SET como prefijo, por ejemplo:
procedimiento de nombre de lugar;
Procesos y funciones que leen contenido variable deben usar Get como prefijo, por ejemplo:
functetUsername: string;
3.2.2 Parámetros de procedimientos y funciones
3.2.2.1 Naming
Los parámetros del tipo unificado se escriben en la misma oración:
procedimientofoo (param1, param2, param3: entero; param4: string);
3.2.2.2 Naming
Todos los parámetros deben ser significativos;
ProcedurSomeProc (AuserName: String; Auserage: Integer);
3.2.2.3 Conflicto de nombres
Cuando las dos unidades utilizadas incluyen una función o procedimiento duplicados, cuando se refiere a esta función o procedimiento, se ejecutará la función o procedimiento en la unidad declarada en la cláusula de uso. Para evitar tales 'usos dependientes de cláusula', es necesario escribir la función completa o la fuente de proceso al referirse a una función o proceso. Por ejemplo:
Sysutils.findclose (SR);
Windows.FindClose (mango);
3.3 Variables
3.3.1 Naming y formato variables
En primer lugar, las variables deben tener nombres significativos para que otros miembros del grupo puedan comprender fácilmente el significado representado por la variable. capital. Por ejemplo:
varilla
WriteFormat :: String;
Al mismo tiempo, para algunos tipos específicos, ciertas abreviaturas se pueden usar de la siguiente manera:
Tipo de puntero
PAG
Tipo de registro
Recreación
Tipo de matriz
Arrugado
amable
Clase
Las variables de control de bucle generalmente usan un solo carácter como: I, J o K. Además, también está permitido usar un nombre significativo como UserIndex.
3.3.2 Variables locales
El uso de variables locales en el proceso sigue las reglas de nomenclatura para todas las demás variables.
3.3.3 Variables globales
Intenta no usar variables globales. Por ejemplo:
gprecuserCount: punto; // La variable global con el nombre de UserCount, su tipo es un puntero a una estructura
Pero las variables globales se pueden usar dentro del módulo. Todas las variables globales en los módulos deben estar prefijadas con 'F'. Si se requiere intercambio de datos entre varios módulos, debe implementarse declarando atributos. Por ejemplo:
tipo
TFormoverDrafTreturn = class (tForm)
Privado
{Privatedeclarations}
Fusername: string;
Fusercount: entero;
ProcedurSetUserName (valor: cadena);
FunctetUsername: string;
público
{PublicDeclarations}
PropertyUserName: StringReadGetUsernameWriteSetUsername;
PropertyUserCount: IntegerReadfuserCountWriteFuserCount;
fin;
Tipo 3.4
3.4.1 Protocolo de casos
Los nombres de tipos de caracteres reservados deben ser todos minúsculas. Los tipos Win32API generalmente están en mayúscula, y las primeras letras están capitalizadas para otros tipos, y las letras restantes son minúsculas, por ejemplo:
varilla
MyString: string; // reservedword
WindowHandle: hwnd; // win32apitype
I: entero; // typeAdidifierInTroDucedInsystemunit
3.4.2 Tipo de punto flotante
Intente no usar el tipo real, solo quiere ser compatible con el antiguo código Pascal e intente usar el tipo doble. El tipo doble es un procesador optimizado y un bus de datos y es una estructura de datos estándar definida por IEEE. Extendido se usa cuando el valor está fuera del rango de doble. Pero extendido no es compatible con Jave. Sin embargo, el tipo único se puede usar al escribir DLL 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 estar prefijo 't'. El nombre del contenido del tipo enum debe contener la abreviatura del nombre del tipo enum, por ejemplo:
TsongType = (strock, stcClassical, stcountry, estial, stheavymetal, strb);
3.4.4 Tipo de matriz
El nombre del tipo de matriz debe ser significativo y el nombre del tipo debe estar prefijo 't'. Si declara un puntero a un tipo de matriz, debe prefijo 'P' antes del nombre de ese tipo, por ejemplo:
tipo
Pcyclearray =^tcyclearray;
Tcyclearray = array [1..100] ofinteger;
3.4.5 Tipo de registro
El nombre del tipo de registro debe ser significativo y el nombre del tipo debe estar prefijo 't'. Si declara un puntero a un tipo de matriz, debe prefijo 'P' antes del nombre de ese tipo, por ejemplo:
tipo
PEMPLIMINEE =^TEMPLISEE;
Temployee = registro
Employeename: cadena
Empleado: doble;
fin;
Categoría 3.5
3.5.1 Naming y formato
El nombre de la clase debe ser significativo y el nombre del tipo debe estar prefijo 't'. Por ejemplo:
tipo
Tcustomer = class (tobject)
El nombre de una instancia de clase suele ser el nombre de la clase con 't' eliminado. Por ejemplo:
varilla
Cliente: TCustomer;
Variables en la clase 3.5.2
3.5.2.1 Naming y formato
El nombre de la clase debe ser significativo y el nombre del tipo debe estar prefijo 'f'. Todas las variables deben ser cuatro en uno. Si necesita acceder a esta variable desde el exterior, debe declarar una propiedad
Método 3.5.3
3.5.3.1 Naming y formato
Nomentario y formato de funciones y procedimientos.
3.5.3.2 Método de acceso a atributos
Todos los métodos de acceso a atributos deben aparecer en privado o protegidos. Nombrar el método de acceso de atributos es el mismo que nombrar las funciones y procedimientos. El parámetro del método escrito debe llamarse 'valor', y su tipo es consistente con el atributo a escribir. Por ejemplo:
Tsomeclass = class (tobject)
Privado
fsomefield: entero;
protegido
functetSomefield: Integer;
ProceduresetSomefield (valor: entero);
público
PropertySomefield: IntegerReadgetSomeFieldWritesetSomefield;
fin;
3.6 Propiedades
3.6.1 Naming y formato
Los nombres de las variables de la clase con el prefijo 'F' son consistentes con la operación.
3.7 Archivo
3.7.1 Archivo del proyecto
3.7.1.1 Estructura del directorio de proyectos
Directorio de inicio del programa - -bin (ruta donde se encuentra la aplicación)
-Db (ruta donde se encuentra la base de datos local)
-Doc (ruta donde se encuentra el documento)
-Hlp (ruta donde se encuentra el archivo de ayuda)
-Backup (ruta de copia de seguridad)
-TMP (ruta de archivo temporal)
3.7.1.2 Naming
El archivo del proyecto debe usar un nombre significativo. Por ejemplo: el archivo del proyecto para la información del sistema en Delphi se llama sysinfo.pr.
3.7.2forma
3.7.2.1 Naming
De acuerdo con el nombre del formulario: por ejemplo: si el nombre del formulario es FormMain, entonces el nombre del archivo de formulario es FormMain.frm.
3.7.3datamodule archivo
3.7.3.1 Naming
El nombramiento del archivo DataModule debe tener sentido y usar 'DM' como prefijo. Por ejemplo: el usuario DataModule se llama 'dmcustomers.dfm'.
3.7.4RemotedAtAmodule Archivo
3.7.4.1 Naming
El nombramiento del archivo Remotedatamodule debe tener sentido y usar 'RDM' como prefijo. Por ejemplo: el usuario remoTedAdAtamodule se llama 'rdmcustomers.dfm'.
3,7.5NET ARCHIVO
3.7.5.1 Unidad normal
3.7.5.1.1 Nombramiento de archivo de unión
El nombramiento del archivo de la unidad debe tener sentido y usar 'Unidad' como prefijo. Por ejemplo: una unidad genérica se llama 'UnitGeneral'.
3.7.5.2FormUnits
3.7.5.2.1 Naming
El nombre del archivo FormUnit debe ser consistente con el nombre del formulario. Por ejemplo: el formulario principal se llama FormMain.pas, el nombre del archivo FormUnit es: UnitFormMain.
3.7.5.3DatamoduleUnits
3.7.5.3.1 Naming
El nombre del archivo DataModuleUnit debe ser consistente con el nombre del DataModule. Por ejemplo: el principal DataModule se llama dMMain.pas, entonces el nombre del archivo DataModuleUnit es: UnitdMMain.
3.7.5.4 Encabezado de archivo
El propósito, el autor, la fecha y la entrada y la salida de este archivo deben escribirse en el encabezado de todos los archivos. Por ejemplo:
{
Fecha de modificación:
autor:
usar:
Esta estructura del módulo consiste en:
}
3.7.6Forms y DataModulesforms
3.6.6.1Form clase
1. Estándares de nomenclatura de clases de forma
El nombre de la clase de formularios debe tener sentido y usar 'tForm' como prefijo. Por ejemplo: el nombre de la clase Acerca de la clase es:
TABOTFORM = CLASS (TFORM)
El nombre del formulario principal es
Tmainform = class (tForm)
2. Normas de nombres para instancias de clase de formulario
Los nombres de las instancias de clase de formulario deben ser consistentes con los nombres de la clase de formulario con 't' durante el mismo período. Por ejemplo:
Nombre de tipo
Nombre de instancia
Formación de taabout
Aboutform
Tmainform
Forma principal
TcustomerEnform
Al cliente
3.7.6.2Datamodulesform
3.7.6.2.1.datamoduleform nomnaming estándar
El nombramiento de la clase DataModulesforms debería tener sentido y usar 'TDM' como prefijo. Por ejemplo:
Tdmcustomer = class (tdatamodule)
Tdmorders = class (tdatamodule)
3.7.6.2..
El nombre de la instancia de la clase DataModuleForm debe ser el mismo que el nombre de la clase DataModuleForm con las caídas 'T' al mismo tiempo. Por ejemplo:
Nombre de tipo
Nombre de instancia
Tcustomerdatamodule
CustomerDatamodule
Tordersdatamodule
Ordersdatamodule
3.8 controles
3.8.1 Naming de instancias de control
Una instancia de un control debe usar el nombre de la clase de control que elimina 't' como prefijo, por ejemplo:
El nombre del TEDIT que ingresa al nombre del usuario es: EditUsername.
3.8.2 Abreviatura de controles
El nombre del control se puede usar con la siguiente abreviatura, pero la abreviatura utilizada se agrega entre el nombre de control '_':
3.8.2.1 StandardTab
mmtmainmenu
pmtpopupmenu
mmitmainmenuitem
pmitpopupmenuitem
lbltlabel
edttedit
memtmemo
btntbutton
CBTCheckbox
rbtradiobutton
LBTListBox
cbtcombobox
scbtscrollbar
gbtgroupbox
rgtradiogrupo
pnltpanel
cltcommandlist
3.8.2.2additionaltab
bbtntbitbtn
sbtspeedbutton
Metmaskedit
sgtstringgrid
dgtdrawgrid
imgtimage
shptshape
bvltbevel
sbxtscrollbox
clbtchecklistbox
spltsplitter
stxtstateText
chttchart
3.8.2.3win32tab
tbctabControl
pgctpagecontrol
ilusta
retrices
tbrttracbar
prbtprogressbar
udtupdown
hkthotkey
anitanimado
dtptDateTiMepicker
TVTreeview
lvtlistview
hdrTtheaderControl
stbtstatusbar
tlbttoolbar
clbtcoolbar
3.8.2.4SystemTab
tmttimer
PBTPaintbox
mptMediaPlayer
Olectolecontainer
ddcctddeclientconv
ddcitddeclientitem
ddsctddeserverconv
ddsitddeserveritem
3.8.2.5 Internettab
csktclientsocket
ssktserversocket
wbdtwebdispatcher
pptPageProducer
tptquerytableProducer
dstptdataSettableProducer
nmdttnmdaytime
nectnmecho
nftnmfinger
nftptnmftp
nhttptnmhttp
nmsgtnmmsg
nmsgtnmmsgserv
nntptnmnntp
npoptnmpop3
nuuptnmuuprocessor
smtptnmsmtp
nsttnmstrm
nstnmstrmserv
ntmtnmtime
nudptnmudp
psktpowersock
ngstnmGeneralServer
htmlthtml
urltnmurl
smltsimplemail
3.8.2.6dataaccesstab
dstdataSource
tblttable
quytquery
sptstoredproc
dbtdatabase
ssntsession
bmtbatchmove
USQLTUPDATSQL
3.8.2.7DatacontrolStab
dbgtdbgrid
dbntdbnavigator
dbttdbText
dbetdbedit
dbmtdbmemo
dbitdbimage
dblbtdblistbox
dbcbtdbcomboBox
dbchtdbcheckbox
dbrgtdbradiogroup
dblltdBlookUplistBox
dblctdblookupcombobox
dbretdbrichedit
dbcgtdbctrlgrid
dbchtdbchart
3.8.2.8DecisionCubetab
dcbtdecisionCube
dcqtdecisionQuery
dcstdecississource
dcptDecisionPivot
dcgtdecisionGrid
dcgrtdecisiongraph
3.8.2.9qReporttab
QrtquickReport
qrsdtqrsubdetail
QRBTQRBAND
qrcbtqrchildband
qrgtqrgroup
qrltqrlabel
qrttqrtext
Qretqreexpr
qrstqrsysdata
qrmtqrmemo
qrrrttqrrichtext
qrdrtqrdbrichText
qrshtqrshape
QritqRiMage
qrditqrdbmimage
qrcrtqrcompositereport
qrptqrpreview
qrchtqrchart
3.8.2.10dialogStab
Opendialogtopendialog
SaveDialogtSavedialog
OpenPicturedialogTopenPictureDialog
SavePicturedialOgtSavePicturedialog
Fontdialogtfontdialog
Colordialogtcolordialog
Printdialogtprintdialog
PrintersetUpdialogTPrintsetUpdialog
Finddialogtfinddialog
Reemplazo de ogreplaedialog
3.8.2.11win31tab
dblltdblookuplist
dblctdblookupcombo
tstabset
oleada
tnbttabbednotebook
Nbtnotebook
HDRTTEADER
flbtfilelistbox
dlbtDirectoryListBox
dcbtdrivecomboBox
fcbtfiltercomboBox
3.8.2.12Samplestab
ggtgauge
cgtcolorgrid
spbtspinbutton
Spetspinedit
doltdirectoryOutline
caltcalendar
ibeatibEventalerter
3.8.2.13activextab
cfxtchartfx
VPTVSSPELL
F1BTF1Book
vtctvtchart
grptgraph
3.8.2.14midastab
prvtprovider
cdstclientdataset
QCDSTQueryClientDataSet
dcomtdcomConnection
oleetoleenterpriseconnection
scktsocketconnection
rmstremoteserver
midtmidasconnection
4. Modificar las especificaciones
Las disposiciones hechas en estas reglas se aplican solo a los procedimientos que se han incorporado a la gestión de la configuración. En tales modificaciones, se requiere retener el contenido antes de la modificación e identificar el contenido modificado y recién agregado. Y agregue la información necesaria como el modificador, la fecha de modificación, las instrucciones de modificación, etc. al encabezado del archivo.
4.1 Modificar el registro del historial
Al realizar modificaciones aprobadas en el archivo de origen, el modificador debe agregar un elemento del historial de modificación al encabezado del archivo del programa. En cada modificación posterior, el modificador debe completar la siguiente información en el elemento:
Modificar
Tiempo de modificación
Razón de modificación
Cómo modificar las instrucciones
4.2 Agregar nueva línea de código
La nueva línea de código debería haber comentado líneas antes y después.
// modificar la persona, tiempo de modificación, instrucciones de modificación
Línea de código agregada
// Fin de la modificación
4.3 Eliminar la línea de código
Use líneas de comentarios para describir antes y después de eliminar la línea de código.
// modificar la persona, tiempo de modificación, instrucciones de modificación
// La línea de código que se eliminará (comente la declaración que se eliminará)
// Fin de la modificación
4.4 Modificar la línea de código
Modifique la línea de código para eliminar la línea de código y agregar nuevas líneas de código.
// modificar la persona, tiempo de modificación, instrucciones de modificación
// La 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