الإجراءات والوظائف 1. التسمية والتنسيق (1) يجب أن تبدأ أسماء الإجراءات بحرف كبير، ويجب أن تكون الأحرف الكبيرة والصغيرة متداخلة لزيادة إمكانية القراءة. ما يلي هو طريقة غير صحيحة للكتابة: PROcedure thisisapoorlyformattedroutinename; قم بتغييره إلى هذا: الإجراء ThisIsMuchMoreReadableRoutineName (2) يجب أن يكون اسم العملية ذا معنى. من الأفضل أن يكون الروتين الذي ينفذ إجراءً ما مسبوقًا باسمه بالفعل الذي يمثل الإجراء. على سبيل المثال: الإجراء FormatHardDrive؛ يجب أن يكون اسم الروتين الذي يحدد قيمة معلمة الإدخال مسبوقًا بـ Set، على سبيل المثال: الإجراء SetUserName؛ يجب أن يكون اسم الروتين الذي يحصل على القيمة مسبوقًا بـ Get، على سبيل المثال: function GetUserName: string; المعلمات الرسمية (1) التنسيق: كلما أمكن، ينبغي تجميع المعلمات الرسمية من نفس النوع معًا. على سبيل المثال: اسم الإجراء (Param1، Param2، Param3: Integer؛ Param4: string)؛ (2) التسمية: يجب أن تعبر أسماء جميع المعلمات الرسمية عن الغرض منها. إذا كان ذلك مناسبًا، يجب أن تكون أسماء المعلمات الرسمية مسبوقة بالحرف A. على سبيل المثال: الإجراء اسم الإجراء (AUserName: سلسلة؛ AUserAge: عدد صحيح)؛ عندما يكون لاسم المعلمة نفس اسم سمة أو حقل فئة، تكون البادئة A ضرورية. (3) ترتيب المعلمات: يعتمد ترتيب المعلمات الرسمية بشكل أساسي على قواعد استدعاء السجل. يجب أن تكون المعلمة الأكثر استخدامًا هي المعلمة الأولى، مرتبة من اليسار إلى اليمين حسب تكرار الاستخدام. معلمات الإدخال تسبق معلمات الإخراج. يجب وضع المعلمات ذات النطاق الكبير قبل المعلمات ذات النطاق الصغير. على سبيل المثال: اسم الإجراء (APlanet، AContinent، ACcountry، AState، ACity) وبعضها استثناءات. على سبيل المثال: أثناء معالجة الحدث، غالبًا ما تكون معلمة المرسل من النوع TObject هي المعلمة الأولى التي سيتم تمريرها. (4) المعلمات الثابتة: لمنع تعديل معلمات السجل أو المصفوفة أو السلسلة القصيرة أو نوع الواجهة بواسطة الروتين، يجب وضع علامة على المعلمات الرسمية على أنها Const. بهذه الطريقة، سيقوم المترجم بإنشاء التعليمات البرمجية بأكثر الطرق فعالية، مما يضمن أن المعلمات التي تم تمريرها غير قابلة للتغيير. إذا لم يكن من المتوقع تعديل أنواع أخرى من المعلمات بواسطة الروتين، فيمكن أيضًا تمييزها بـ C onst. على الرغم من أن هذا ليس له أي تأثير على الكفاءة، إلا أنه يمنح المتصل بالروتين مزيدًا من المعلومات. (5) تعارض التسمية: عندما تحتوي وحدتان على إجراءات بنفس الاسم، إذا تم استدعاء الروتين، يتم استدعاء الروتين الموجود لاحقًا في الوحدة الذي يظهر لاحقًا في جملة الاستخدامات. لتجنب هذا الموقف، يمكنك إضافة اسم الوحدة المطلوبة قبل اسم الطريقة، على سبيل المثال: SysUtils.FindClose (SR);Windows.FindClose(Handle);3. المتغيرات (1) تسمية المتغيرات وشكلها: يجب أن يكون اسم المتغير قادرا على التعبير عن الغرض منه. غالبًا ما تكون متغيرات التحكم في الحلقة عبارة عن أحرف مفردة مثل I أو J أو K. يمكنك أيضًا استخدام اسم أكثر وضوحًا، مثل UserIndex؛ ويجب أن تشير أسماء المتغيرات المنطقية بوضوح إلى معنى القيمتين True وFalse. (2) المتغيرات المحلية: يتم استخدام المتغيرات المحلية داخل الإجراءات وتتبع قواعد تسمية المتغيرات الأخرى. إذا لزم الأمر، يجب تهيئة المتغيرات فورًا عند دخول الروتين. تتم تهيئة متغيرات نوع AnsiString المحلية تلقائيًا إلى سلاسل فارغة؛ وتتم تهيئة متغيرات نوع dispinterface تلقائيًا إلى صفر؛ وتتم تهيئة متغيرات نوع Variant المحلية وOleVariant تلقائيًا إلى غير معين. (3) المتغيرات العالمية: لا يُنصح عمومًا باستخدام المتغيرات العالمية. ومع ذلك، في بعض الأحيان هناك حاجة إليها. ومع ذلك، يجب أن تقتصر المتغيرات العالمية على البيئات التي تكون هناك حاجة إليها. قد تكون المتغيرات العالمية عالمية فقط في جزء التنفيذ من الوحدة؛ ويجب نقل البيانات العالمية، إذا كانت ستستخدمها العديد من الوحدات، إلى وحدة مشتركة واستخدامها من قبل جميع الكائنات؛ ويمكن تهيئة البيانات العالمية مباشرةً إلى قيمة عند الإعلان عنها . (لاحظ أن جميع المتغيرات العامة تتم تهيئتها تلقائيًا بصفر، لذلك لا تقم بتهيئة المتغيرات العامة لقيم فارغة مثل 0 أو صفر أو غير معين. لا تشغل المتغيرات العامة التي تمت تهيئتها بصفر أي مساحة في ملف . EXE. يتم حفظ البيانات في مقطع البيانات الافتراضية، حيث يقوم مقطع البيانات الافتراضية بتخصيص الذاكرة فقط عند بدء تشغيل التطبيق، حيث تشغل البيانات العالمية التي تمت تهيئتها بدون الصفر مساحة في ملف EXE) 4. النوع (1) قواعد الحالة: معرفات النوع هي كلمات محجوزة ويجب أن تكون جميعها بأحرف صغيرة. غالبًا ما تكون أنواع Win32 API مكتوبة بأحرف كبيرة وتتبع قواعد لأسماء أنواع معينة مثل Windows.pas أو وحدات API الأخرى. بالنسبة لأسماء المتغيرات الأخرى، يجب أن يكون الحرف الأول كبيرًا ويجب أن تكون الأحرف الأخرى بحالة متناوبة. على سبيل المثال: varMyString: string; // الكلمة المحجوزة WindowsHandle: HWND; // Win32 API type I: Integer; // معرف النوع المقدم في وحدة النظام (2) نوع النقطة العائمة: لا يُنصح باستخدام النوع الحقيقي لأنه مجرد محفوظة للتوافق مع كود باسكال الأقدم. عادةً، يجب استخدام Double لأرقام الفاصلة العائمة. يمكن تحسين Double بواسطة المعالج وهو تنسيق بيانات قياسي محدد بواسطة IEEE. يمكن استخدام التوسيع عند الحاجة إلى نطاق أكبر مما يوفره Double. يعد Extend نوعًا خاصًا بـ Intel ولا يدعمه Java. عندما يكون العدد الفعلي للبايتات لمتغير الفاصلة العائمة مهمًا (ربما باستخدام لغة مختلفة لكتابة ملف DLL)، يجب استخدام Single. (3) نوع التعداد: يجب أن يمثل اسم نوع التعداد الغرض من التعداد. يجب أن يكون الحرف T مسبوقًا قبل الاسم للإشارة إلى أن هذا نوع بيانات. يجب أن تحتوي بادئة قائمة المعرفات الخاصة بنوع التعداد على 2 إلى 3 أحرف صغيرة لربطها ببعضها البعض. على سبيل المثال: TSongType = (stRock, stClassical, stCountry, stAlternative, stHeavyMetal, stRB); اسم مثيل المتغير لنوع التعداد هو نفس النوع، ولكن بدون البادئة T. يمكنك أيضًا إعطاء المتغير المزيد اسم خاص، مثل: FavoriteSongTpe1، وFavouriteSongTpe2، وما إلى ذلك. انتظر. (4) Variant وOleVariant: لا يُنصح عمومًا باستخدام Variant وOleVariant. ومع ذلك، فإن هذين النوعين ضروريان للبرمجة عندما يكون نوع البيانات معروفًا فقط في وقت التشغيل (غالبًا في تطبيقات COM وقاعدة البيانات). عند القيام ببرمجة COM مثل أتمتة عناصر تحكم ActiveX، يجب عليك استخدام OleVariant للبرمجة غير التابعة لـ COM، ويجب عليك استخدام Variant. وذلك لأن Variant يمكنه حفظ سلاسل دلفي الأصلية بشكل فعال، بينما يقوم OleVariant بتحويل جميع السلاسل إلى سلاسل OLE (على سبيل المثال، سلاسل Wide Char) بدون حساب مرجعي. 5. النوع المُنشأ (1) نوع المصفوفة: يجب أن يعبر اسم نوع المصفوفة عن الغرض من المصفوفة. يجب أن تكون أسماء الأنواع مسبوقة بالحرف T. إذا كنت تريد الإعلان عن مؤشر لنوع مصفوفة، فيجب عليك أن تسبقه بالحرف P وتعلن عنه قبل إعلان النوع. على سبيل المثال: typePCycleArray = ^TCycleArray; TCycleArray=array [1..100] من عدد صحيح؛ في الواقع، المثيل المتغير لنوع الصفيف له نفس اسم النوع، ولكن بدون البادئة T. (2) نوع السجل: يجب أن يعبر اسم نوع السجل عن الغرض من السجل. يجب أن تكون أسماء الأنواع مسبوقة بالحرف T. إذا كنت تريد الإعلان عن مؤشر لنوع سجل، فيجب عليك أن تسبقه بالحرف P وتعلن عنه قبل إعلان النوع. على سبيل المثال: typePStudent = ^ TStudent;TStudent = RecordStudentName: string;StudentAge: مزدوج;6. الفئات (1) التسمية والتنسيق يجب أن يعبر اسم الفئة عن الغرض من الفئة. تتم إضافة الحرف T قبل اسم الفئة للإشارة إلى أنها نوع. على سبيل المثال: typeTStudent= class (TObject); اسم مثيل الفئة هو نفس اسم الفئة، ولكن بدون البادئة T. varStudent: TStudent؛ لاحظ أنه فيما يتعلق بتسمية المكونات، يرجى الرجوع إلى القسم 6.6 "المكونات". (2) تسمية الحقل وتنسيقه: تتبع تسمية الحقول نفس القواعد التي تتبعها المتغيرات، باستثناء إضافة البادئة F للإشارة إلى أن هذا حقل. الرؤية: يجب أن تكون جميع الحقول خاصة. إذا كنت تريد الوصول إلى حقل خارج نطاق الفصل الدراسي، فيمكنك القيام بذلك بمساعدة سمات الفصل. (3) تسمية الطريقة وتنسيقها: تتبع تسمية الطرق نفس قواعد الإجراءات والوظائف. الأساليب الثابتة: يجب استخدام الأساليب الثابتة عندما لا ترغب في تجاوز الطريقة بواسطة الفئات المشتقة. الأساليب الافتراضية مقابل الأساليب الديناميكية: عندما تريد تجاوز أسلوب ما بواسطة فئة مشتقة، يجب عليك استخدام الأساليب الافتراضية. إذا كان سيتم استخدام طريقة الفصل بشكل مباشر أو غير مباشر بواسطة فئات مشتقة متعددة، فيجب استخدام الطرق الديناميكية. على سبيل المثال، إذا كانت إحدى الفئات تحتوي على طريقة يتم تجاوزها بشكل متكرر وتحتوي على 100 فئة مشتقة، فيجب تعريف الطريقة على أنها ديناميكية، مما قد يقلل من حمل الذاكرة. الأساليب المجردة: إذا كان الفصل سينشئ مثيلات، فلا تستخدم الأساليب المجردة. لا يمكن استخدام الأساليب المجردة إلا في الفئات الأساسية التي لا تنشئ مثيلات أبدًا. طرق الوصول إلى الخاصية: يجب تحديد جميع طرق الوصول إلى الخاصية في الجزء الخاص أو المحمي من الفئة. تتبع طرق الوصول إلى الملكية نفس القواعد التي تتبعها الإجراءات والوظائف. يجب أن تكون الطريقة المستخدمة للقراءة مسبوقة بـ Get، ويجب أن تكون الطريقة المستخدمة للكتابة مسبوقة بـ Set، وأن يكون لها معلمة تسمى Value ونوعها هو نفس نوع السمة. على سبيل المثال: TStudent = class (TObject)privateFName: string;protected function GetName: string;SetName الإجراء (القيمة: string);اسم publicproperty: سلسلة قراءة GetName كتابة SetName;end;(4) تعمل خصائص الخاصية كموصلات إلى الحقول الخاصة وتتابع نفس الحقول لها نفس قواعد التسمية، ولكن بدون البادئة F. يجب أن تكون أسماء الخصائص أسماء، وليس أفعال. الخصائص هي البيانات والأساليب هي الإجراءات. يجب أن تكون أسماء خصائص المصفوفة بصيغة الجمع، بينما يجب أن تكون الخصائص العامة بصيغة المفرد. (5) على الرغم من أن استخدام أساليب الوصول غير مطلوب، فمن المستحسن استخدام أساليب الوصول للكتابة للوصول إلى الخصائص التي تمثل الحقول الخاصة.