qingrui li Compilé et annoté sur la base du guide de style Object Pascal de Charles Calvert
Remarque : De nombreuses personnes qui utilisent Delphi ne prêtent pas attention au style de codage et écrivent souvent du code non standard, ce qui le rend difficile à comprendre pour les autres et est sujet aux erreurs. J'espère que cet article pourra encourager la majorité des passionnés de Delphi à s'unifier au style standard et à avancer ensemble.
Cet article décrit le style standard de formatage du code Delphi. Ce sous-style est basé sur les conventions de codage de l'équipe de développement Delphi. Nous reconnaissons que de nombreux codes sources populaires utilisent un style différent du nôtre, mais nous recommandons fortement l'utilisation du style Borland dans la communauté des codes sources publics.
Delphi est un beau langage, et l’un de ses avantages les plus importants est la lisibilité. Cette norme est conçue pour améliorer la lisibilité. Lorsque les développeurs suivent cette norme, tous les développeurs bénéficieront d'un style cohérent et lisible. Les efforts visant à appliquer les normes de style peuvent augmenter la valeur des programmes sources, en particulier pendant les cycles de débogage et de maintenance.
Style de dénomination InfixCaps
Également appelé CamelCaps, le nom se compose de plusieurs mots qui expriment une signification. La première lettre de chaque mot est en majuscule et le reste est en minuscule.
Tels que : MyFile, IntToStr, Items.
Delphi n'utilise pas la notation hongroise et recommande des noms significatifs. Par exemple, utilisez AppName au lieu de lpszAppName, utilisez Successful au lieu de bSuccess et utilisez ClientRect au lieu de lPRectClientRect.
Nom du fichier source
Utilisez le formulaire InfixCaps. Si vous transpilez un fichier d'en-tête C/C++, utilisez le même nom que le fichier d'en-tête d'origine. Si plusieurs fichiers d'en-tête doivent être fusionnés en une seule unité, utilisez le nom du fichier d'en-tête principal, tel que : WinBase.h, Windows.h sont fusionnés dans Windows.pas.
convention de dénomination
À l'exception des mots réservés et des mots directives, qui sont tous en minuscules, les autres identifiants utilisent le style InfixCaps.
Remarque : Il semble y avoir une tendance récente à utiliser de simples minuscules ou des abréviations pour les variables locales et les paramètres formels.
L'exception est que les identifiants dans les fichiers d'en-tête transpilés conservent leur style d'origine.
Les noms de types commencent tous par T (la première lettre du type)
Les noms de fonctions, de procédures et de méthodes utilisent des verbes ou des expressions verbales, et les autres identifiants utilisent des noms ou des expressions nominales.
Les membres des données de classe commencent par F (la première lettre de Field)
Les membres de type énumération sont précédés d'une abréviation minuscule, généralement de deux lettres, par exemple :
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll) ;
Les fonctions qui renvoient des valeurs booléennes commencent par Is, par exemple : IsVisible, IsResizing
Utilisation de l'espace blanc
Insérez des lignes vides aux emplacements appropriés pour séparer les différentes parties du code, par exemple entre les déclarations de classe, les implémentations de fonctions, etc.
Où utiliser les espaces : à droite de la ponctuation, de chaque côté des opérateurs binaires
Là où les espaces ne doivent pas être insérés :
Exemple correct :
function TMyClass.MyFunc(var Value: Integer);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
Exemple d'erreur :
function TMyClass.MyFunc( var Value: Integer ) ;MyPointer := @ MyRecord;MyClass := TMyClass ( MyPointer ) ;MyInteger := MyIntegerArray [ 5 ] ;
échancrure
Une indentation à deux espaces doit être utilisée et aucun caractère de tabulation ne doit être utilisé.
Le code entre début...fin doit être en retrait et début...fin lui-même ne doit pas être en retrait.
Indenter deux espaces lorsque vous continuez des lignes
Exemple correct :
fonction CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; if ((X = Y) ou (Y = X) ou (Z = P) ou (F = J) puis commence S := J;fin;
while (LongExpression1 ou LongExpression2) do start // DoSomething // DoSomethingElse;end;if (LongExpression1) ou (LongExpression2) ou (LongExpression3) alors
gentil
Les déclarations de classe sont organisées dans l'ordre suivant
champ de données
méthode
propriété
La hiérarchie d'accès est organisée dans l'ordre suivant, à l'exception du code généré automatiquement par l'EDI.
Les constructeurs et les destructeurs sont déclarés avant la déclaration de la méthode. Puisque TObject.Destroy est une fonction virtuelle et que TObject.Free appelle Destroy, n'utilisez pas d'autres noms pour le destructeur. Le constructeur peut utiliser un nom autre que Create, mais il est généralement préférable d'utiliser Create.
exemple:
TMyClass = classe (TObject) privé protégé public publié fin ;
Les données doivent être déclarées uniquement dans la section privée et commencer par F (la première lettre de Field).
tapez TMyClass = classe (TObject) privé FMyData : Integer ; fonction GetData : Integer ; procédure SetData (Value : Integer public publié propriété MyData : Integer lecture GetData écriture SetData) ;
Les interfaces suivent les mêmes règles