تعابير اللامدا في VisualBasic.NET

بسم الله الرحمن الرحيم

السلام عليكم ورحمة الله وبركاته

اللهم علمنا ما ينفعنا وانفعنا بما علمتنا إنك أنت العليم الحكيم

 ====تمهيد====

ما هي تعابير لامدا ؟
هي دالة(Function) او إجراء(Sub) بدون إسم يمكن إستخدامها في أي موضع يمكنك فيه إستخدام الـ"مفوض" Delegates وتتكون من سطر أو أكثر كما سنذكر لاحقا.

لماذا سأستخدم تعابير لامدا بينما يمكنني إستخدام دالة عادية أو مفوض ؟
لإنها مناسبة أكثر للحالات التي ستستخدم فيها الدالة مرة واحدة مثلاً داخل تكرار لحساب ضريبة المبيعات وستجعل الكود يبدو بشكل منظم ☺.

*يكثر إستخدام تعابير لامدا عند إستخدام تقنية LINQ.


====كيفية كتابة تعابير لامدا====

في البداية سنتعرف كيفية كتابة تعابير لامدا التي تتكون من  سطر واحد فقط.

VB.Net



 يوضح المثال السابق كيفية كتابة تعبير لامدا من سطر واحد فقط من نوع (Function) ،في البداية بعد التعريف عن المتغير الذي سنسد إليه التعبير وهو في هذه الحالة (FirstLambda) تقوم بكتابة نوع التعبير إما دالة (Function) أو إجراء(Sub) ثم المعاملات وإذا قمت بتحديد نوع المعامل الأول يجب عليك تحديد باقي أنواع المعاملات ولتعرف مقصدي أنظر للمثال التالي

VB.Net



المثال السابق خاطئ لإنه قمت بتحديد نوع المعامل FParameter هو من نوع Integer أما المعامل الثاني فلم أحدد نوعه وهذا خاطئ ☺ والطريقة الصحيحة هي إما بتحديد نوع المتغيرين أو عدم تحديد نوع المتغيرين معاً ☻.

ثم تقوم بكتابة التعبير ،ولا يجوز إستخدام Return إن كان التعبير من سطر واحد ☻ ولا يجوز تحديد نوع القيمة التي يعيدها التعبير.

الآن لنرى كيفية كتابة تعابير لامدا تتكون من أكثر من سطر.

VB.Net

 هي نفس التعابير التي من سطر واحد لكن مع إستخدام Return ويمكنك إستخدام As لتحديد نوع القيمة التي يعيدها التعبير إن كان دالة.

في الأمثلة السابقة أسندت التعبير لمتغير مثلا لـCharRepetition في المثال السابق لاستخدامه أكثر من مرة ،ويمكنك أيضا أن تكتب التعبير وتنفذه في نفس الوقت ولتفهم الفكرة أنظر للمثال التالي 

VB.Net



ويمكنك تمرير تعابير لامدا كمعامل للدوال أو الإجراءات التي تتطلب مفوض والمثال التالي يوضح الفكرة
VB.Net

في المثال السابق قمت بتمرير تعبير لامدا للدالة Where والتي تقوم بتنفيذه على جميع العناصر،
ومررت تعبير لامدا للإجراء Array.ForEach
 شروط كتابة تعابير لامدا
1- تعبير لامدا لا إسم له.
2- لا يمكن أن يحتوي على محددات وصول أو معدلات مثل Protected ،Overloads.
3- التعابير التي من سطر واحد لا يمكن إستخدام As لتحديد نوع القيمة التي يعيدها التعبير لكن بدلا من ذلك  يتم تحديد نوع القيمة تلقائيا من هيئة التعبير ،مثلا التعبير Parameter.ToCahrArray نوع القيمة التي يعيدها هي مصفوفة حروف.
4-في التعابير التي تتكون من أكثر من سطر كلمة As لتحديد القيمة التي يعيدها التعبير إن كان من نوع دالة هي إختيارية ،إن لم تستخدم As سيتم تحديد النوع الذي يتوافق مع جميع القيم التي يعيدها التعبير ولتعرف مقصدي أنظر للمثال التالي

VB.Net

الدالة السابقة تعيد جذر العدد في حال كان الرقم موجب تعيد جذره وهو من نوع Double ،أما في حال كان الرقم سالب فليس له جذر تعيد 0 وهو من Integer ،فالنوع الذي تعيده الدالة في هذه الحالة هو Double لإنه يمكن تحويل النوع Integer لـ Double والعكس خاطئ.

وللتوضيح أكثر شاهد المثال التالي
VB.Net

الدالة السابقة تعيد جذر العدد في حال كان الرقم موجب تعيد جذره وهو من نوع Double ،أما في حال كان الرقم سالب فليس له جذر تعيد نص("Negative Number") ،في هذه الحالة نوع القيمة التي تعيدها الدالة هو Object لإنه لا يمكن تحويل أي من النوعين للآخر (String to Double , Double to String).

5- التعابير التي من نوع(Function) التي من سطر واحد يجب أن يعيد هذا السطر قيمة ،ولا يكون تعبيرا لتنفيذه فقط، لإنه في التعابير التي من سطر واحد فقط لا توجد كلمة Return وإنما يعيد التعبير القيمة الناتجة عن تنفيذ السطر، أنظر المثال التالي

VB.Net

الدالة السابقة تعيد Boolean وهو ناتج تنفيذ التعبير Str.ToUpper = Str

6- التعبيرات التي تتكون من سطر واحد فقط ،يجب ألا تحتوي على End Function أو End Sub
7- لا يمكنك استخدام Optional أو ParamArray مع المعاملات.

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

إن أصبت فمن الله ، وإن اخطئت فمني ومن الشيطان  اترككم في امان الله ورعايته 



والسلام عليكم ورحمة الله وبركاته
DoneByA

تعابير اللامدا ،تعابير اللامبدا ،المفوض ،Delegates ،Anonymous Methods ،extension Methods in LINQ

ليست هناك تعليقات:

إرسال تعليق

يمكنك النقل من المدونة كيف ما تشاء وبدون ذكر المصدر