qingrui li تم تجميعه وتعليقه استنادًا إلى دليل أسلوب Object Pascal الخاص بـ Charles Calvert
ملحوظة: العديد من الأشخاص الذين يستخدمون دلفي لا يهتمون بأسلوب الترميز وغالبًا ما يكتبون تعليمات برمجية غير قياسية، مما يجعل من الصعب على الآخرين فهمها وعرضة للأخطاء. آمل أن يشجع هذا المقال غالبية المتحمسين لدلفي على التوحيد مع النمط القياسي والمضي قدمًا معًا.
توضح هذه المقالة النمط القياسي لتنسيق كود دلفي. يعتمد هذا النمط الفرعي على اتفاقيات البرمجة الخاصة بفريق تطوير دلفي. نحن نقر بأن العديد من أكواد المصدر الشائعة تستخدم أسلوبًا مختلفًا عن أسلوبنا، لكننا نوصي بشدة باستخدام أسلوب بورلاند في مجتمع أكواد المصدر العام.
دلفي لغة جميلة، ومن أهم مميزاتها سهولة القراءة. تم تصميم هذا المعيار لتعزيز إمكانية القراءة. عندما يتبع المطورون هذا المعيار، سيستفيد جميع المطورين من أسلوب متسق وسهل القراءة. يمكن أن تؤدي الجهود المبذولة لفرض معايير النمط إلى زيادة قيمة البرامج المصدر، خاصة أثناء دورات التصحيح والصيانة.
أسلوب تسمية InfixCaps
يُسمى أيضًا CamelCaps، ويتكون الاسم من عدة كلمات تعبر عن المعنى، الحرف الأول من كل كلمة مكتوب بأحرف كبيرة والباقي بأحرف صغيرة.
مثل: MyFile، IntToStr، Items.
لا تستخدم دلفي التدوين المجري وتوصي بأسماء ذات معنى. على سبيل المثال، استخدم AppName بدلاً من lpszAppName، واستخدم Successful بدلاً من bSuccess، واستخدم ClientRect بدلاً من lPRectClientRect.
تسمية الملف المصدر
استخدم نموذج InfixCaps. في حالة نقل ملف رأس C/C++، استخدم نفس اسم ملف الرأس الأصلي. إذا كنت بحاجة إلى دمج ملفات رأس متعددة في وحدة واحدة، استخدم اسم ملف الرأس الرئيسي، مثل: WinBase.h، يتم دمج Windows.h في Windows.pas.
اصطلاح التسمية
باستثناء الكلمات المحجوزة والكلمات التوجيهية، والتي تكون جميعها بأحرف صغيرة، تستخدم المعرفات الأخرى نمط InfixCaps.
ملاحظة: يبدو أن هناك اتجاهًا حديثًا نحو استخدام الأحرف الصغيرة البسيطة أو الاختصارات للمتغيرات المحلية والمعلمات الرسمية.
الاستثناء هو أن المعرفات الموجودة في ملفات الرأس المنقولة تحتفظ بنمطها الأصلي.
تبدأ جميع أسماء النوع بحرف T (الحرف الأول من النوع)
تستخدم أسماء الوظائف والإجراءات والأساليب الأفعال أو عبارات الفعل، وتستخدم المعرفات الأخرى الأسماء أو العبارات الاسمية.
يبدأ أعضاء بيانات الفصل بحرف F (الحرف الأول من الحقل)
أعضاء نوع التعداد يسبقهم اختصار من النوع الصغير، عادة حرفين، على سبيل المثال:
TBitBtnKind = (bkCustom, bkOK, bkCancel, bkHelp, bkYes, bkNo, bkClose, bkAbort, bkRetry, bkIgnore, bkAll);
تبدأ الوظائف التي تُرجع قيمًا منطقية بـ Is، على سبيل المثال: IsVisible، IsResizable
استخدام المساحة البيضاء
أدخل أسطرًا فارغة في المواقع المناسبة للفصل بين الأجزاء المختلفة من التعليمات البرمجية، مثل إعلانات الفئات، وتطبيقات الوظائف، وما إلى ذلك.
مكان استخدام المسافات: على يمين علامات الترقيم، على جانبي عوامل التشغيل الثنائية
حيث لا ينبغي إدراج المسافات:
المثال الصحيح:
وظيفة TMyClass.MyFunc(var Value: Integer);MyPointer := @MyRecord;MyClass := TMyClass(MyPointer);MyInteger := MyIntegerArray[5];
مثال الخطأ:
الدالة TMyClass.MyFunc( var Value: Integer ) ;MyPointer := @ MyRecord;MyClass := TMyClass ( MyPointer ) ;MyInteger := MyIntegerArray [ 5 ] ;
المسافة البادئة
يجب استخدام مسافة بادئة ذات مسافتين ويجب عدم استخدام أحرف الجدولة.
يجب وضع مسافة بادئة للتعليمات البرمجية الموجودة بين start...end، ويجب عدم وضع مسافة بادئة للتعليمات البرمجية الموجودة بين begin...end نفسها.
ضع مسافة بادئة لمسافتين عند متابعة الأسطر
المثال الصحيح:
وظيفة CreateWindowEx(dwExStyle: DWord; lpClassName: PChar; lpWindowName: PChar; dwStyle: DWORD; إذا ((X = Y) أو (Y = X) أو (Z = P) أو (F = J) ثم ابدأ S := J;end;
بينما يبدأ (LongExpression1 أو LongExpression2) // DoSomething // DoSomethingElse;end;if (LongExpression1) أو (LongExpression2) أو (LongExpression3) ثم
عطوف
يتم تنظيم إعلانات الفئة بالترتيب التالي
حقل البيانات
طريقة
ملكية
يتم تنظيم التسلسل الهرمي للوصول بالترتيب التالي، باستثناء التعليمات البرمجية التي يتم إنشاؤها تلقائيًا بواسطة IDE.
يتم الإعلان عن المنشئين والمدمرين قبل إعلان الطريقة. نظرًا لأن TObject.Destroy عبارة عن دالة افتراضية واستدعاءات TObject.Free للتدمير، فلا تستخدم أسماء أخرى للأداة المدمرة. يمكن للمنشئ استخدام اسم آخر غير "إنشاء"، ولكن من الأفضل عمومًا استخدام "إنشاء".
مثال:
TMyClass = class(TObject) نهاية عامة منشورة محمية خاصة؛
يجب أن يتم الإعلان عن البيانات في القسم الخاص فقط وأن تبدأ بالحرف F (الحرف الأول من الحقل).
اكتب TMyClass = class(TObject) Private FMyData: Integer function GetData: Integer الإجراء SetData(Value: Integer);
واجهات تتبع نفس القواعد