كيفية استخدام الوظائف والإجراءات في دلفي

click fraud protection

هل سبق لك أن وجدت نفسك تكتب نفس الرمز مرارًا وتكرارًا لأداء بعض المهام المشتركة في الداخل معالجات الأحداث? نعم! حان الوقت لتتعلم عن البرامج داخل البرنامج. دعونا ندعو تلك البرامج الفرعية المصغرة.

مقدمة للروتينات

الروتينات هي جزء مهم من أي لغة برمجةودلفي ليست استثناء. بشكل عام في دلفي ، هناك نوعان من الروتينات الفرعية: وظيفة وإجراء. يتمثل الاختلاف المعتاد بين الوظيفة والإجراء في أن الدالة يمكنها إرجاع قيمة ، ولن يؤدي الإجراء بشكل عام إلى ذلك. عادة ما يتم استدعاء دالة كجزء من تعبير.

ألق نظرة على الأمثلة التالية:

إجراء قل مرحبا(مقدار ثابت ماذا:خيط); ابدأ
ShowMessage ('Hello' + sWhat) ؛ النهاية; وظيفة سنوات قديم (مقدار ثابت الميلادالسنة: عدد صحيح): عدد صحيح ؛ فار
السنة ، الشهر ، اليوم: Word ؛ ابدأ
DecodeDate (التاريخ والسنة والشهر واليوم) ؛ النتيجة: = السنة - سنة الميلاد ؛ النهاية; 

بمجرد تحديد الروتينات الفرعية ، يمكننا تسميتها مرة واحدة أو أكثر:

إجراء TForm1.Button1Click (المرسل: TObject) ؛ ابدأ
SayHello ("مستخدم دلفي") ؛ النهاية; إجراء TForm1.Button2Click (المرسل: TObject) ؛ ابدأ
SayHello ("Zarko Gajic") ؛ ShowMessage ('أنت' + IntToStr (YearsOld (1973)) + 'years old!') ؛ النهاية; 
instagram viewer

الوظائف والإجراءات

كما نرى ، تعمل كل من الوظائف والإجراءات مثل البرامج المصغرة. على وجه الخصوص ، يمكن أن يكون لديهم نوع خاص بهم وثوابت وإعلانات متغيرة داخلهم.

ألق نظرة عن كثب على وظيفة SomeCalc (متنوعة):

وظيفة SomeCalc. (مقدار ثابت sStr: خيط; مقدار ثابت iYear، iMonth: عدد صحيح؛ فار iDay: عدد صحيح): منطقي؛ ابدأ...النهاية; 

يبدأ كل إجراء أو وظيفة بـ العنوان يحدد الإجراء أو الوظيفة ويسرد المعلمات يستخدم الروتين إن وجدت. يتم سرد المعلمات بين قوسين. كل معلمة لها اسم تعريف وعادة ما يكون لها نوع. يفصل الفاصلة المنقوطة المعلمات في قائمة معلمات عن بعضها البعض.

يتم استدعاء sStr و iYear و iMonth معلمات ثابتة. لا يمكن تغيير المعلمات الثابتة بواسطة الوظيفة (أو الإجراء). يتم تمرير iDay كـ معلمة var، ويمكننا إجراء تغييرات عليه ، داخل الروتين.

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

تحديد المواقع والاستدعاء للروتينات الفرعية

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

ملاحظة: يخبرك بند استخدام الوحدة بالوحدات التي يمكنها الاتصال بها. إذا أردنا أن يكون روتين معين في الوحدة 1 قابلاً للاستخدام بواسطة معالجات الأحداث أو الروتينات الفرعية في وحدة أخرى (على سبيل المثال الوحدة 2) ، فيجب علينا:

  • أضف الوحدة 1 إلى بند استخدامات الوحدة 2
  • ضع نسخة من رأس روتين فرعي في مقطع الواجهة من الوحدة 1.

هذا يعني أن الروتينات الفرعية التي تم إعطاء رؤوسها في قسم الواجهة هي عالمي النطاق.

عندما ندعو دالة (أو إجراء) داخل وحدتها ، نستخدم اسمها مع أي شيء المعلمات مطلوبين. من ناحية أخرى ، إذا قمنا باستدعاء روتين فرعي عالمي (محدد في بعض الوحدات الأخرى ، مثل MyUnit) ، فإننا نستخدم اسم الوحدة متبوعًا بنقطة.

... // تم تحديد إجراء SayHello داخل هذه الوحدة
SayHello ("مستخدم دلفي") ؛ يتم تحديد وظيفة // YearsOld داخل وحدة MyUnit
دمية: = MyUnit. سنوات قديم (1973) ؛... 

ملاحظة: يمكن أن تحتوي الوظائف أو الإجراءات على روتين فرعي خاص بها مضمن داخلها. روتين فرعي مضمن محلي روتين فرعي الحاوية ولا يمكن استخدامه من قبل أجزاء أخرى من البرنامج. شيء مثل:

إجراء TForm1.Button1Click (المرسل: TObject) ؛ وظيفة IsSmall (مقدار ثابت sStr:خيط): منطقي ابدأ// IsSmall بإرجاع True إذا كانت sStr بأحرف صغيرة ، أو False خلاف ذلك
النتيجة: = LowerCase (sStr) = sStr؛ النهاية; ابدأ// IsSmall يمكن استخدامه داخل حدث Button1 OnClick فقطإذا IsSmall (تحرير 1. نص) ثم
ShowMessage ("كافة الأحرف الكبيرة في Edit1.Text")
آخر
ShowMessage ('ليست كافة الأحرف الكبيرة في Edit1.Text') ؛ النهاية;
instagram story viewer