كيفية إرجاع قيم متعددة من وظيفة دلفي

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

ببساطة ، فإن الإجراء هو إجراء روتيني لا يُرجع قيمة بينما ترجع الدالة قيمة.

يتم تعريف قيمة الإرجاع من دالة حسب نوع الإرجاع. في معظم الحالات ، تكتب وظيفة إلى إرجاع قيمة واحدة التي قد تكون عددًا صحيحًا أو سلسلة أو منطقية أو نوعًا بسيطًا آخر ، كما يمكن أن تكون أنواع الإرجاع صفيفًا أو قائمة سلاسل أو مثيلًا لكائن مخصص أو على حد سواء.

لاحظ أنه حتى إذا كانت وظيفتك تُرجع قائمة سلسلة (مجموعة من سلاسل) لا يزال بإرجاع قيمة واحدة: مثيل واحد من قائمة السلسلة.

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

هل تستطيع دالة إرجاع قيم متعددة؟

الجواب الأول الذي يتبادر إلى الذهن هو لا ، لأنه ببساطة عندما نفكر في وظيفة ما ، نفكر في قيمة إرجاع واحدة.

بالتأكيد ، الإجابة على السؤال أعلاه هي ، مع ذلك ، نعم. يمكن أن ترجع الدالة عدة قيم. لنرى كيف.

فار المعلمات

instagram viewer

كم عدد القيم التي يمكن أن ترجعها الوظيفة التالية ، واحدة أو اثنتان؟

وظيفة ايجابي متبادل (مقدار ثابت valueIn: عدد صحيح فار valueOut: الحقيقي): منطقية.

من الواضح أن الدالة تُرجع قيمة منطقية (صواب أو خطأ). ماذا عن المعلمة الثانية "valueOut" المعلنة كمعلمة "VAR" (متغير)؟

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

لنرى كيف يعمل أعلاه ، إليك التنفيذ:

وظيفة ايجابي متبادل (مقدار ثابت valueIn: عدد صحيح فار valueOut: الحقيقي): منطقية.

ابدأ

 النتيجة: = valueIn> 0 ؛

إذا نتيجة ثم valueOut: = 1 / valueIn ؛

النهاية;

يتم تمرير "valueIn" كمعلمة ثابتة - لا يمكن تغيير الوظيفة ، ويتم التعامل معها على أنها للقراءة فقط.

إذا كانت "valueIn" أو أكبر من الصفر ، فسيتم تعيين المعلمة "valueOut" على القيمة المتبادلة لـ "valueIn" وتكون نتيجة الوظيفة صحيحة. إذا كانت valueIn <= 0 ، فتُرجع الدالة false ، ولا يتم تبديل "valueOut" بأي طريقة.

إليك الاستخدام:

فار

 ب: منطقية ؛

 r: حقيقي ؛

ابدأ

 ص: = 5 ؛

 b: = PositiveReciprocal (1 ، r) ؛

 //here:

 // b = true (منذ 1> = 0)

 // ص = 0.2 (1/5)

 ص: = 5 ؛

 b: = PositiveReciprocal (-1 ، r) ؛

 //here:

 // ب = خطأ (منذ -1 

النهاية;

لذلك ، يمكن لـ "الإيجابي الإيجابي" في الواقع "إرجاع" قيمتين! باستخدام معلمات var ، يمكنك الحصول على عائد روتيني لأكثر من قيمة.

المعلمات خارج

هناك طريقة أخرى لتحديد معلمة مرجعية — باستخدام الكلمة "الخارج" ، كما في:

وظيفة ايجابيمقدار ثابت valueIn: عدد صحيح خارج valueOut: الحقيقي): منطقية.

ابدأ

 النتيجة: = valueIn> 0 ؛

إذا نتيجة ثم valueOut: = 1 / valueIn ؛

النهاية;

تطبيق PositiveReciprocalOut هو نفسه كما هو الحال في PositiveReciprocal ، هناك فرق واحد فقط: "valueOut" هي معلمة OUT.

مع المعلمات المعلنة كـ "مهلة" ، يتم تجاهل القيمة الأولية للمتغير المشار إليه "valueOut".

إليك الاستخدام والنتائج:

فار

 ب: منطقية ؛

 r: حقيقي ؛

ابدأ

 ص: = 5 ؛

 b: = PositiveReciprocalOut (1 ، r) ؛

 //here:

 // b = true (منذ 1> = 0)

 // ص = 0.2 (1/5)

 ص: = 5 ؛

 b: = PositiveReciprocalOut (-1 ، r) ؛

 //here:

 // ب = خطأ (منذ -1 

النهاية;

لاحظ كيف يتم تعيين قيمة المتغير المحلي "r" في المكالمة الثانية إلى "0". تم تعيين قيمة "r" إلى 5 قبل استدعاء الدالة ولكن منذ المعلمة في المعلنة كـ "مهلة" ، عندما "r" وصلت إلى الدالة تم تجاهل القيمة وتم تعيين القيمة الافتراضية "الفارغة" للمعلمة (0 للقيمة الحقيقية) اكتب).

نتيجةً لذلك ، يمكنك إرسال متغيرات غير مهيأة بأمان للمعلمات الخارجية - شيء لا يجب عليك فعله مع المعلمات "var". تُستخدم المعلمات لإرسال شيء ما إلى الروتين ، باستثناء هنا مع المعلمات "الخروج" :) ، وبالتالي يمكن أن تحتوي المتغيرات غير المهيأة (المستخدمة لمعلمات VAR) على قيم غريبة.

عودة السجلات؟

التطبيقات المذكورة أعلاه حيث ترجع الدالة أكثر من قيمة واحدة ليست لطيفة. تقوم الدالة فعليًا بإرجاع قيمة واحدة ، ولكن أيضًا تُرجع ، من الأفضل أن تقول ، قيم قيم var / out.

لهذا السبب ، قد نادراً ما تريد استخدام معلمات المرجع الثانوي. إذا كانت هناك حاجة إلى المزيد من النتائج من وظيفة ، فيمكنك إرجاع دالة نوع السجل متغير.

النظر في ما يلي:

اكتب

 TLatitudeLongitude = سجل

 خط العرض: حقيقي ؛

 خط الطول: حقيقي ؛

النهاية;

وظيفة افتراضية:

وظيفة أين أنا(مقدار ثابت اسم المدينة: خيط): TLatitudeLongitude ؛

وظيفة WhereAmI سيعود خطوط الطول والعرض لمدينة معينة (المدينة ، المنطقة ، ...).

سيكون التنفيذ:

وظيفة أين أنا(مقدار ثابت اسم المدينة: خيط): TLatitudeLongitude ؛

ابدأ// استخدم بعض الخدمات لتحديد موقع "townName" ، ثم قم بتعيين نتيجة الوظيفة:

 نتيجة. خط العرض: = 45.54 ؛

 نتيجة. خط الطول: = 18.71 ؛

النهاية;

وهنا لدينا وظيفة إرجاع 2 القيم الحقيقية. حسنًا ، يُرجع سجلًا واحدًا ، لكن هذا السجل به حقلان لاحظ أنه يمكنك الحصول على سجل معقد للغاية يمزج أنواعًا مختلفة ليتم إرجاعها كنتيجة لوظيفة.

هذا هو. لذلك ، نعم ، يمكن لوظائف دلفي إرجاع قيم متعددة.

instagram story viewer