أسلوب التحميل الزائد والمعلمات الافتراضية في دلفي

click fraud protection

وظائف وإجراءات هي جزء مهم من لغة دلفي. بدءًا من Delphi 4 ، يتيح لنا Delphi العمل مع الوظائف والإجراءات التي تدعم المعلمات الافتراضية (مما يجعل المعلمات اختيارية) ، ويسمح اثنين أو أكثر من الروتين أن يكون لها اسم مطابق ولكن تعمل مختلفة تماما الروتين.

دعونا نرى كيف يمكن أن تساعدك التحميل الزائد والمعلمات الافتراضية على تحسين الرمز.

الحمولة الزائدة

ببساطة ، الحمولة الزائدة تعلن أكثر من روتين بنفس الاسم. يسمح لنا التحميل الزائد بأن يكون لدينا إجراءات متعددة تشترك في نفس الاسم ، ولكن مع عدد مختلف من المعلمات والأنواع.

كمثال ، دعنا نفكر في الوظيفتين التاليتين:

{يجب الإعلان عن الروتين الزائد. مع التوجيه الزائد}وظيفة SumAsStr (a، b: integer): خيط; الزائد; ابدأ النتيجة: = IntToStr (a + b) ؛ النهاية؛ وظيفة SumAsStr (a، b: Extended؛ الأرقام: عدد صحيح): خيط; الزائد; ابدأ النتيجة: = FloatToStrF (a + b ، ffFixed ، 18 ، أرقام) ؛ النهاية; 

تقوم هذه التعريفات بإنشاء دالتين ، كلاهما يسمى SumAsStr ، والتي تأخذ عددًا مختلفًا من المعلمات ومن نوعين مختلفين. عندما نسمي روتينًا زائد التحميل ، يجب أن يكون المحول البرمجي قادراً على معرفة أي روتين نريد الاتصال به.

instagram viewer

على سبيل المثال ، يستدعي SumAsStr (6 ، 3) أول وظيفة لـ SumAsStr ، لأن الوسائط الخاصة بها هي قيمة صحيحة.

ملحوظة: سوف تساعدك دلفي على اختيار التطبيق الصحيح بمساعدة استكمال التعليمات البرمجية والبصيرة.

من ناحية أخرى ، ضع في اعتبارك ما إذا كنا نحاول استدعاء دالة SumAsStr كما يلي:

 SomeString: = SumAsStr (6.0،3.0) 

سنحصل على خطأ يقرأ: "لا يوجد إصدار زائد من 'SumAsStr' يمكن استدعاءه باستخدام هذه الوسيطات."هذا يعني أنه يجب علينا أيضًا تضمين معلمة" الأرقام "المستخدمة لتحديد عدد الأرقام بعد العلامة العشرية.

ملحوظة: هناك قاعدة واحدة فقط عند كتابة إجراءات محمّلة بشكل زائد ، وهي أن الروتين المفرط الحمل يجب أن يختلف في نوع معلمة واحد على الأقل. نوع الإرجاع ، بدلاً من ذلك ، لا يمكن استخدامه للتمييز بين روتين.

وحدتين - واحد الروتينية

لنفترض أن لدينا روتينًا واحدًا في الوحدة "أ" ، بينما تستخدم الوحدة "ب" الوحدة "أ" ، لكن تعلن روتينًا بنفس الاسم. لا يحتاج الإعلان الوارد في الوحدة "ب" إلى توجيه التحميل الزائد - يجب استخدام اسم الوحدة "أ" لتأهيل المكالمات إلى إصدار "أ" من الروتين من الوحدة "ب".

النظر في شيء مثل هذا:

وحدة ب؛... الاستخدامات أ؛... إجراء اسم روتيني ابدأ النتيجة: = A.RoutineName؛ النهاية; 

بديل لاستخدام إجراءات overloaded هو استخدام المعلمات الافتراضية ، والتي ينتج عنها عادة رمز أقل للكتابة والصيانة.

المعلمات الافتراضية / الاختيارية

لتبسيط بعض العبارات ، يمكننا إعطاء قيمة افتراضية لمعلمة دالة أو إجراء ، ويمكننا استدعاء الروتينية مع أو بدون المعلمة ، مما يجعلها اختيارية. لتوفير قيمة افتراضية ، قم بإنهاء تعريف المعلمة بالرمز (=) متبوعًا بتعبير ثابت.

على سبيل المثال ، بالنظر إلى الإعلان

وظيفة SumAsStr (a، b: Extended؛ الأرقام: عدد صحيح = 2): خيط; 

استدعاءات الوظائف التالية متكافئة.

 SumAsStr (6.0 ، 3.0) 
 SumAsStr (6.0 ، 3.0 ، 2) 

ملحوظة: يجب أن تحدث المعلمات ذات القيم الافتراضية في نهاية قائمة المعلمات ، ويجب أن يتم تمريرها حسب القيمة أو كـ const. لا يمكن أن تحتوي المعلمة المرجعية (var) على قيمة افتراضية.

عند استدعاء إجراءات مع أكثر من معلمة افتراضية ، لا يمكننا تخطي المعلمات (مثل في VB):

وظيفة SkipDefParams (فار a: سلسلة. B: عدد صحيح = 5 ، C: منطقية = خطأ): منطقية ؛... // هذه المكالمة تنشئ رسالة خطأ
CantBe: = SkipDefParams ('delphi' ،، True)؛ 

الحمولة الزائدة مع المعلمات الافتراضية

عند استخدام كل من الوظيفة أو الإجراء الحمولة الزائدة والمعلمات الافتراضية ، لا تقدم إعلانات روتينية غامضة.

النظر في التصريحات التالية:

إجراء DoIt (A: الموسعة ؛ B: عدد صحيح = 0) ؛ الزائد; إجراء DoIt (A: الموسعة) ؛ الزائد; 

استدعاء الإجراء DoIt مثل DoIt (5.0) ، لا يتم ترجمة. بسبب المعلمة الافتراضية في الإجراء الأول ، قد تستدعي هذه العبارة كلا الإجراءين ، لأنه من المستحيل معرفة الإجراء المراد استدعاؤه.

instagram story viewer